weaver-hrm-salary/src/com/engine/salary/service/impl/SIAccountServiceImpl.java

2481 lines
126 KiB
Java
Raw Normal View History

2022-04-11 19:07:35 +08:00
package com.engine.salary.service.impl;
2022-04-27 14:36:05 +08:00
import com.alibaba.fastjson.JSON;
2022-04-12 19:29:19 +08:00
import com.api.browser.bean.SearchConditionGroup;
import com.api.browser.bean.SearchConditionItem;
2022-04-18 20:24:43 +08:00
import com.api.browser.bean.SearchConditionOption;
import com.api.formmode.mybatis.util.SqlProxyHandle;
2022-04-16 16:43:33 +08:00
import com.cloudstore.eccom.pc.table.*;
2022-04-11 19:07:35 +08:00
import com.cloudstore.eccom.result.WeaResultMsg;
2022-04-12 10:24:21 +08:00
import com.engine.common.util.ServiceUtil;
2022-04-11 19:07:35 +08:00
import com.engine.core.impl.Service;
2022-09-02 11:53:38 +08:00
import com.engine.salary.biz.*;
2022-04-11 19:07:35 +08:00
import com.engine.salary.component.SalaryWeaTable;
2022-04-12 19:29:19 +08:00
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.encrypt.siaccount.ExcelInsuranceDetailPOEncrypt;
2022-05-24 09:23:17 +08:00
import com.engine.salary.encrypt.siaccount.InsuranceAccountDetailPOEncrypt;
2022-09-02 11:53:38 +08:00
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
2022-04-11 19:07:35 +08:00
import com.engine.salary.entity.siaccount.bo.InsuranceAccountBO;
import com.engine.salary.entity.siaccount.dto.InsuranceAccountBatchListDTO;
2022-04-15 19:01:09 +08:00
import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO;
2022-04-18 20:24:43 +08:00
import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO;
2022-04-15 13:17:25 +08:00
import com.engine.salary.entity.siaccount.param.*;
import com.engine.salary.entity.siaccount.po.ExcelInsuranceDetailPO;
2022-04-11 19:07:35 +08:00
import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO;
2022-04-12 10:24:21 +08:00
import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO;
2022-04-15 13:17:25 +08:00
import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO;
import com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO;
2022-04-16 16:43:33 +08:00
import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
2022-04-27 16:21:24 +08:00
import com.engine.salary.entity.sicategory.po.ICategoryPO;
import com.engine.salary.entity.sischeme.po.InsuranceSchemePO;
2022-06-08 17:52:10 +08:00
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
2022-04-16 16:43:33 +08:00
import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.siaccount.*;
2022-04-27 16:21:24 +08:00
import com.engine.salary.enums.sicategory.WelfareTypeEnum;
2022-07-20 15:40:51 +08:00
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.siaccount.ExcelInsuranceDetailMapper;
2022-04-14 11:54:16 +08:00
import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper;
2022-04-12 19:29:19 +08:00
import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper;
2022-04-15 13:17:25 +08:00
import com.engine.salary.mapper.siaccount.InsuranceAccountInspectMapper;
import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper;
2022-04-27 16:21:24 +08:00
import com.engine.salary.mapper.sicategory.ICategoryMapper;
import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper;
import com.engine.salary.mapper.sys.SalarySysConfMapper;
import com.engine.salary.mapper.taxagent.TaxAgentMapper;
2022-06-08 17:52:10 +08:00
import com.engine.salary.service.*;
import com.engine.salary.sys.entity.po.SalarySysConfPO;
2022-09-27 10:19:09 +08:00
import com.engine.salary.sys.entity.vo.OrderRuleVO;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
2022-04-12 19:29:19 +08:00
import com.engine.salary.util.SalaryDateUtil;
2022-04-14 11:54:16 +08:00
import com.engine.salary.util.SalaryFormItemUtil;
2022-04-15 19:01:09 +08:00
import com.engine.salary.util.SalaryI18nUtil;
2022-04-12 19:29:19 +08:00
import com.engine.salary.util.db.MapperProxyFactory;
2022-09-02 11:53:38 +08:00
import com.engine.salary.util.excel.ExcelParseHelper;
import com.engine.salary.util.excel.ExcelSupport;
import com.engine.salary.util.excel.ExcelUtil;
2022-04-19 12:19:06 +08:00
import com.engine.salary.util.page.Column;
2022-04-11 19:07:35 +08:00
import com.engine.salary.util.page.PageInfo;
2022-05-25 13:10:03 +08:00
import com.engine.salary.util.page.SalaryPageUtil;
2022-04-14 11:54:16 +08:00
import com.engine.salary.util.valid.ValidUtil;
2022-04-27 14:36:05 +08:00
import com.google.common.collect.Lists;
2022-09-02 11:53:38 +08:00
import com.google.common.collect.Maps;
import dm.jdbc.util.IdGenerator;
2022-04-12 19:29:19 +08:00
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
2022-09-02 11:53:38 +08:00
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.file.ImageFileManager;
import weaver.general.Util;
2022-04-12 10:24:21 +08:00
import weaver.hrm.User;
2022-04-11 19:07:35 +08:00
2022-09-02 11:53:38 +08:00
import java.io.InputStream;
2022-06-06 19:08:39 +08:00
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;
2022-06-06 19:08:39 +08:00
import java.util.stream.Collectors;
2022-09-02 11:53:38 +08:00
import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX;
2022-04-11 19:07:35 +08:00
/**
* @Author weaver_cl
2022-07-13 11:45:16 +08:00
* @Description:
2022-04-11 19:07:35 +08:00
* @Date 2022/4/11
* @Version V1.0
**/
public class SIAccountServiceImpl extends Service implements SIAccountService {
2022-06-08 17:52:10 +08:00
// private SIAccountBiz siAccountBiz = new SIAccountBiz();
2022-04-11 19:07:35 +08:00
2022-04-16 16:43:33 +08:00
private SIArchivesBiz siArchivesBiz = new SIArchivesBiz();
private EncryptUtil encryptUtil = new EncryptUtil();
2022-04-12 10:24:21 +08:00
public RecordsBuildService getService(User user) {
2022-07-08 11:19:08 +08:00
return ServiceUtil.getService(RecordsBuildServiceImpl.class, user);
2022-04-12 10:24:21 +08:00
}
2022-06-08 17:52:10 +08:00
public SIAccountBiz getSiAccountBiz(User user) {
2022-07-08 11:19:08 +08:00
return ServiceUtil.getService(SIAccountBiz.class, user);
2022-06-08 17:52:10 +08:00
}
2022-04-12 19:29:19 +08:00
public ColumnBuildService getColumnBuildService(User user) {
2022-07-08 11:19:08 +08:00
return ServiceUtil.getService(ColumnBuildServiceImpl.class, user);
2022-04-12 19:29:19 +08:00
}
2022-04-27 16:21:24 +08:00
public SICategoryService getSICategoryService(User user) {
2022-07-08 11:19:08 +08:00
return ServiceUtil.getService(SICategoryServiceImpl.class, user);
2022-04-27 16:21:24 +08:00
}
2022-06-08 17:52:10 +08:00
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
2022-04-12 19:29:19 +08:00
private InsuranceAccountBatchMapper getInsuranceAccountBatchMapper() {
return MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class);
}
private InsuranceAccountDetailMapper getInsuranceAccountDetailMapper() {
return MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class);
}
private ExcelInsuranceDetailMapper getExcelInsuranceDetailMapper() {
return MapperProxyFactory.getProxy(ExcelInsuranceDetailMapper.class);
}
2022-09-02 11:53:38 +08:00
private SalaryItemService getSalaryItemService(User user) {
return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
private TaxAgentMapper getTaxAgentMapper() {
return MapperProxyFactory.getProxy(TaxAgentMapper.class);
}
2022-09-02 11:53:38 +08:00
SICategoryBiz siCategoryBiz = new SICategoryBiz();
private SalarySysConfMapper getSalarySysConfMapper() {
return SqlProxyHandle.getProxy(SalarySysConfMapper.class);
}
private SalaryEmployeeService getSalaryEmployeeService(User user) {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
2022-09-27 10:19:09 +08:00
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
private InsuranceSchemeMapper getInsuranceSchemeMapper() {
return MapperProxyFactory.getProxy(InsuranceSchemeMapper.class);
}
private InsuranceBaseInfoMapper getInsuranceBaseInfoMapper() {
return MapperProxyFactory.getProxy(InsuranceBaseInfoMapper.class);
}
private EmployBiz employeeBiz = new EmployBiz();
private TaxAgentBiz taxAgentBiz = new TaxAgentBiz();
2022-04-11 19:07:35 +08:00
@Override
public Map<String, Object> listPage(InsuranceAccountBatchParam queryParam) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
Map<String, Object> datas = new HashMap<>();
2022-04-11 19:07:35 +08:00
2022-06-09 18:31:36 +08:00
// 分权逻辑
Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID());
2022-07-08 11:19:08 +08:00
if (needAuth) {
2022-06-09 18:31:36 +08:00
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAllTaxAgents((long) user.getUID());
List<Long> taxAgents = taxAgentPOS.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
2022-07-08 11:19:08 +08:00
if (CollectionUtils.isEmpty(taxAgents)) {
//防止普通用户查询
queryParam.setTaxAgents(Collections.singletonList(-1L));
} else {
queryParam.setTaxAgents(taxAgents);
}
2022-06-09 18:31:36 +08:00
}
2022-04-11 19:07:35 +08:00
//福利台账列表
PageInfo<InsuranceAccountBatchPO> pageInfo = getSiAccountBiz(user).listPage(queryParam);
2022-04-11 19:07:35 +08:00
Collection<InsuranceAccountBatchPO> insuranceAccountBatchPOS = pageInfo.getList();
List<InsuranceAccountBatchListDTO> insuranceAccountBatchListDTOS = InsuranceAccountBO.buildAccountBatchDTOList(insuranceAccountBatchPOS);
2022-07-08 11:19:08 +08:00
PageInfo<InsuranceAccountBatchListDTO> pageInfos = new PageInfo<>(insuranceAccountBatchListDTOS, InsuranceAccountBatchListDTO.class);
2022-04-22 18:50:03 +08:00
pageInfos.setTotal(pageInfo.getTotal());
2022-04-11 19:07:35 +08:00
pageInfos.setPageNum(queryParam.getCurrent());
pageInfos.setPageSize(queryParam.getPageSize());
2022-07-08 11:19:08 +08:00
List<Map<Integer, List<Permission>>> operatesPermission = new ArrayList<>();
2022-04-12 19:29:19 +08:00
2022-04-11 19:07:35 +08:00
SalaryWeaTable<InsuranceAccountBatchListDTO> table = new SalaryWeaTable<>(user, InsuranceAccountBatchListDTO.class);
2022-04-19 12:19:06 +08:00
List<Column> columns = pageInfos.getColumns();
List<WeaTableColumn> weaTableColumn = columns.stream().map(v -> new WeaTableColumn("100", v.getTitle(), v.getKey())).collect(Collectors.toList());
table.setColumns(weaTableColumn);
2022-04-11 19:07:35 +08:00
//table.getColumns().get(0).setFixed("left");
2022-04-12 19:29:19 +08:00
// for (int i = 0; i < insuranceAccountBatchListDTOS.size(); i++) {
// InsuranceAccountBatchListDTO insuranceAccountBatchListDTO = insuranceAccountBatchListDTOS.get(i);
// if (Objects.equals(insuranceAccountBatchListDTO.getBillStatus(), BillStatusEnum.ARCHIVED.getDefaultLabel())) {
// table.getOperates().getOperate().get(i).getIndex();
//
// resultTable.getOperatesPermission().get(i).get(0).setVisible(false);
// resultTable.getOperatesPermission().get(i).get(1).setVisible(false);
// resultTable.getOperatesPermission().get(i).get(2).setVisible(false);
// resultTable.getOperatesPermission().get(i).get(3).setVisible(false);
// resultTable.getOperates().get(4).setOuter(true);
// }
// if (Objects.equals(insuranceAccountBatchListDTO.getBillStatus(), BillStatusEnum.NOT_ARCHIVED.getDefaultLabel())) {
// resultTable.getOperatesPermission().get(i).get(4).setVisible(false);
// List<InsuranceAccountInspectPO> insuranceAccountInspectPOS = siAccountInspectService.listByBillMonth(insuranceAccountBatchListDTO.getBillMonth(), tenantKey);
// if (CollectionUtils.isEmpty(insuranceAccountInspectPOS)) {
// resultTable.getOperatesPermission().get(i).get(2).setVisible(false);
// }
// }
// }
2022-04-11 19:07:35 +08:00
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
datas.put("pageInfo", pageInfos);
2022-07-08 11:19:08 +08:00
datas.put("operatesPermission", operatesPermission);
datas.put("dataKey", result.getResultMap());
2022-04-11 19:07:35 +08:00
return datas;
// WeaTable<InsuranceAccountBatchListDTO> resultTable = FormatManager.<InsuranceAccountBatchListDTO>getInstance()
// .genTable(InsuranceAccountBatchListDTO.class, insuranceAccountBatchListDTOPage);
//
// resultTable.getOperates().forEach(e -> {
// if (e.getIndex() == 0) {
// e.setOuter(true);
// }
// });
2022-04-12 19:29:19 +08:00
2022-04-11 19:07:35 +08:00
// resultTable.setModule("hrmsalary");
// resultTable.getColumns().get(0).setFixed("left");
// return WeaResult.success(resultTable);
}
@Override
2022-04-12 10:24:21 +08:00
public Map<String, Object> listCommonPage(InsuranceAccountDetailParam queryParam) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
Map<String, Object> datas = new HashMap<>();
2022-04-11 19:07:35 +08:00
2022-04-12 10:24:21 +08:00
//正常缴纳列表
2022-06-08 17:52:10 +08:00
PageInfo<InsuranceAccountDetailPO> pageInfo = getSiAccountBiz(user).listCommonPage(queryParam);
2022-04-12 10:24:21 +08:00
List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = pageInfo.getList();
//数据组装
List<Map<String, Object>> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId);
2022-04-15 19:01:09 +08:00
PageInfo<Map<String, Object>> pageInfos = new PageInfo<>(records);
2022-04-22 18:50:03 +08:00
pageInfos.setTotal(pageInfo.getTotal());
2022-04-12 19:29:19 +08:00
pageInfos.setPageNum(queryParam.getCurrent());
pageInfos.setPageSize(queryParam.getPageSize());
//动态列组装
List<WeaTableColumn> weaTableColumn = getColumnBuildService(user).buildCommonColumnsWithStyle(insuranceAccountDetailPOS, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY, queryParam.getPaymentStatus());
2022-04-12 19:29:19 +08:00
2022-04-19 13:31:46 +08:00
WeaTable table = new WeaTable();
2022-04-19 17:46:24 +08:00
table.setPageUID(UUID.randomUUID().toString());
2022-04-12 19:29:19 +08:00
table.setColumns(weaTableColumn);
2022-04-19 12:19:06 +08:00
List<Column> columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList());
pageInfos.setColumns(columns);
2022-04-12 19:29:19 +08:00
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
datas.put("pageInfo", pageInfos);
2022-04-19 17:46:24 +08:00
//datas.put("dataKey",result.getResultMap());
2022-04-12 19:29:19 +08:00
return datas;
}
2022-04-16 16:43:33 +08:00
2022-04-12 19:29:19 +08:00
@Override
public Map<String, Object> listCommonPageByName(InsuranceAccountDetailParam queryParam) {
//增加查询参数userName
if (StringUtils.isNotBlank(queryParam.getUserName())) {
2022-07-08 11:19:08 +08:00
queryParam.setUserName(queryParam.getUserName());
2022-04-12 19:29:19 +08:00
}
return listCommonPage(queryParam);
}
@Override
public Map<String, Object> listSupplementaryPage(InsuranceAccountDetailParam queryParam) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
Map<String, Object> datas = new HashMap<>();
2022-04-12 19:29:19 +08:00
//过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员
List<InsuranceArchivesBaseInfoPO> baseInfoPOList = getInsuranceBaseInfoMapper().listAll();
List<Long> canAccountIds = baseInfoPOList.stream()
.filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization())
&& (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())))
.map(InsuranceArchivesBaseInfoPO::getEmployeeId)
.collect(Collectors.toList());
queryParam.setEmployeeIds(canAccountIds);
2022-04-15 19:01:09 +08:00
//补缴缴纳列表
2022-04-12 19:29:19 +08:00
queryParam.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue());
2022-09-27 10:19:09 +08:00
//排序配置
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
queryParam.setOrderRule(orderRule);
2022-05-25 13:10:03 +08:00
SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize());
List<InsuranceAccountDetailPO> list = getInsuranceAccountDetailMapper().list(queryParam);
2022-07-08 11:19:08 +08:00
PageInfo<InsuranceAccountDetailPO> pageInfo = new PageInfo<>(list, InsuranceAccountDetailPO.class);
2022-04-12 19:29:19 +08:00
List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = pageInfo.getList();
2022-05-24 09:23:17 +08:00
InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(insuranceAccountDetailPOS);
2022-04-12 19:29:19 +08:00
//数据组装
List<Map<String, Object>> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId);
2022-04-19 12:19:06 +08:00
PageInfo<Map<String, Object>> pageInfos = new PageInfo<>(records);
2022-04-22 18:50:03 +08:00
pageInfos.setTotal(pageInfo.getTotal());
2022-04-12 19:29:19 +08:00
pageInfos.setPageNum(queryParam.getCurrent());
pageInfos.setPageSize(queryParam.getPageSize());
2022-04-12 10:24:21 +08:00
2022-04-12 19:29:19 +08:00
//动态列组装
List<WeaTableColumn> weaTableColumn = getColumnBuildService(user).buildCommonColumnsWithStyle(insuranceAccountDetailPOS, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY, queryParam.getPaymentStatus());
2022-04-12 10:24:21 +08:00
2022-04-19 12:19:06 +08:00
SalaryWeaTable<InsuranceAccountDetailPO> table = new SalaryWeaTable<>(user, InsuranceAccountDetailPO.class);
2022-04-12 19:29:19 +08:00
table.setColumns(weaTableColumn);
2022-04-19 17:46:24 +08:00
List<Column> columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList());
pageInfos.setColumns(columns);
2022-04-12 19:29:19 +08:00
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
datas.put("pageInfo", pageInfos);
2022-04-19 17:46:24 +08:00
//datas.put("dataKey",result.getResultMap());
2022-04-12 10:24:21 +08:00
return datas;
2022-04-11 19:07:35 +08:00
}
2022-04-12 10:24:21 +08:00
2022-04-16 16:43:33 +08:00
2022-04-12 19:29:19 +08:00
@Override
public Map<String, Object> supplementaryByNameList(InsuranceAccountDetailParam queryParam) {
//增加查询参数userName
if (StringUtils.isNotBlank(queryParam.getUserName())) {
2022-04-19 17:46:24 +08:00
queryParam.setUserName(queryParam.getUserName());
2022-04-12 19:29:19 +08:00
}
return listSupplementaryPage(queryParam);
}
@Override
public Map<String, Object> listRecessionPage(InsuranceAccountDetailParam queryParam) {
Long employeeId = (long) user.getUID();
Map<String, Object> datas = new HashMap<>();
// 分权逻辑
Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID());
if (needAuth) {
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAllTaxAgents((long) user.getUID());
List<Long> taxAgents = taxAgentPOS.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(taxAgents)) {
//防止普通用户查询
queryParam.setTaxAgents(Collections.singletonList(-1L));
} else {
queryParam.setTaxAgents(taxAgents);
}
}
//退差列表
queryParam.setPaymentStatus(PaymentStatusEnum.RECESSION.getValue());
//排序配置
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
queryParam.setOrderRule(orderRule);
SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize());
List<InsuranceAccountDetailPO> list = getInsuranceAccountDetailMapper().list(queryParam);
PageInfo<InsuranceAccountDetailPO> pageInfo = new PageInfo<>(list, InsuranceAccountDetailPO.class);
List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = pageInfo.getList();
InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(insuranceAccountDetailPOS);
//数据组装
List<Map<String, Object>> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId);
PageInfo<Map<String, Object>> pageInfos = new PageInfo<>(records);
pageInfos.setTotal(pageInfo.getTotal());
pageInfos.setPageNum(queryParam.getCurrent());
pageInfos.setPageSize(queryParam.getPageSize());
//动态列组装
List<WeaTableColumn> weaTableColumn = getColumnBuildService(user).buildCommonColumnsWithStyle(insuranceAccountDetailPOS, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY, queryParam.getPaymentStatus());
SalaryWeaTable<InsuranceAccountDetailPO> table = new SalaryWeaTable<>(user, InsuranceAccountDetailPO.class);
table.setColumns(weaTableColumn);
List<Column> columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList());
pageInfos.setColumns(columns);
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
datas.put("pageInfo", pageInfos);
//datas.put("dataKey",result.getResultMap());
return datas;
}
2022-04-12 19:29:19 +08:00
@Override
public Map<String, Object> getForm(Map<String, Object> params) {
2022-04-14 11:54:16 +08:00
Map<String, Object> apidatas = new HashMap<>();
2022-04-12 19:29:19 +08:00
//条件组
List<SearchConditionGroup> addGroups = new ArrayList<>();
List<SearchConditionItem> conditionItems = new ArrayList<>();
2022-04-20 19:12:01 +08:00
SearchConditionItem datePickerItem = SalaryFormItemUtil.datePickerItem(user, 2, 16, true, 2, "账单月份", "billMonth");
2022-04-14 11:54:16 +08:00
String minDate = SalaryDateUtil.getYearMonth(-1, 0);
String maxDate = SalaryDateUtil.getYearMonth(0, 6);
2022-04-20 19:12:01 +08:00
datePickerItem.setOtherParams(new HashMap<>());
2022-07-08 11:19:08 +08:00
datePickerItem.getOtherParams().put("minDate", minDate);
datePickerItem.getOtherParams().put("maxDate", maxDate);
2022-04-14 11:54:16 +08:00
List<InsuranceAccountBatchPO> billMonthList = getInsuranceAccountBatchMapper().listByTimeRange(minDate, maxDate);
encryptUtil.decryptList(billMonthList, InsuranceAccountBatchPO.class);
2022-04-14 11:54:16 +08:00
if (CollectionUtils.isEmpty(billMonthList)) {
datePickerItem.getOtherParams().put("disabledData", Collections.emptyList());
} else {
datePickerItem.getOtherParams().put("disabledData", billMonthList.stream().map(InsuranceAccountBatchPO::getBillMonth).collect(Collectors.toList()));
}
datePickerItem.getOtherParams().put("type", "month");
datePickerItem.getOtherParams().put("format", "YYYY-MM");
datePickerItem.getOtherParams().put("showFormat", "YYYY-MM");
conditionItems.add(datePickerItem);
2022-04-12 19:29:19 +08:00
2022-04-20 19:12:01 +08:00
SearchConditionItem textareaItem = SalaryFormItemUtil.textareaItem(user, 2, 16, true, 2, 60, "备注", "remarks");
2022-04-14 11:54:16 +08:00
conditionItems.add(textareaItem);
2022-07-08 11:19:08 +08:00
addGroups.add(new SearchConditionGroup("常用条件", true, conditionItems));
2022-04-14 11:54:16 +08:00
apidatas.put("billMonth", SalaryDateUtil.getYearMonth(0, 0));
2022-07-08 11:19:08 +08:00
apidatas.put("condition", addGroups);
2022-04-14 11:54:16 +08:00
return apidatas;
}
@Override
public String save(AccountParam param) {
ValidUtil.doValidator(param);
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-15 13:17:25 +08:00
String lastName = user.getLastname();
return getSiAccountBiz(user).save(param.isFlag(), param, employeeId, lastName);
2022-04-15 13:17:25 +08:00
}
@Override
public void commonAccount(SaveCommonAccountParam param) {
ValidUtil.doValidator(param);
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-22 15:17:31 +08:00
String currentUserName = user.getLastname();
2022-07-08 11:19:08 +08:00
getSiAccountBiz(user).saveCommonAccount(param, employeeId, currentUserName);
2022-04-15 13:17:25 +08:00
}
@Override
public void delete(AccountParam accountParam) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
getSiAccountBiz(user).delete(accountParam, employeeId);
2022-04-15 13:17:25 +08:00
}
@Override
public void saveCommonAccount(SaveCommonAccountParam accountParam) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-22 15:17:31 +08:00
String currentUserName = user.getLastname();
2022-07-08 11:19:08 +08:00
getSiAccountBiz(user).saveCommonAccount(accountParam, employeeId, currentUserName);
2022-04-15 13:17:25 +08:00
}
@Override
public void saveSupplementaryAccount(SaveSupplementaryAccountParam saveSupplementaryAccountParam) {
2022-06-28 18:21:44 +08:00
ValidUtil.doValidator(saveSupplementaryAccountParam);
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-22 15:17:31 +08:00
String currentUserName = user.getLastname();
2022-07-08 11:19:08 +08:00
getSiAccountBiz(user).saveSupplementaryAccount(saveSupplementaryAccountParam, employeeId, currentUserName);
2022-04-15 13:17:25 +08:00
}
@Override
public void deleteCommonAccount(SaveCommonAccountParam param) {
2022-06-06 19:08:39 +08:00
ValidUtil.doValidator(param);
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-22 15:17:31 +08:00
String currentUserName = user.getLastname();
2022-07-08 11:19:08 +08:00
getSiAccountBiz(user).deleteCommonAccount(param, employeeId, currentUserName);
2022-04-15 13:17:25 +08:00
}
@Override
public void deleteSummplementaryAccount(List<SupplementAccountBaseParam> supplementAccountBaseParams) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-22 15:17:31 +08:00
String currentUserName = user.getLastname();
2022-07-08 11:19:08 +08:00
getSiAccountBiz(user).deleteSupplementaryAccount(supplementAccountBaseParams, employeeId, currentUserName);
2022-04-15 13:17:25 +08:00
}
@Override
public void file(AccountParam accountParam) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-15 13:17:25 +08:00
String billMonth = accountParam.getBillMonth();
2022-07-08 11:19:08 +08:00
getSiAccountBiz(user).file(billMonth, employeeId, accountParam.getPaymentOrganization());
2022-04-15 13:17:25 +08:00
}
@Override
public void unconfirmed(Collection<Long> ids) {
2022-07-08 11:19:08 +08:00
List<InsuranceAccountInspectPO> insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndIds(InspectStatusEnum.COMFORED.getValue(), ids);
2022-04-15 13:17:25 +08:00
if (CollectionUtils.isNotEmpty(insuranceAccountInspectPOS)) {
getInsuranceAccountDetailMapper().batchUnConfirmedInspectDetails(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getId).collect(Collectors.toList()));
2022-04-15 13:17:25 +08:00
}
}
@Override
public Map<String, Boolean> buttonCheck(String billMonth) {
Map<String, Boolean> result = new HashMap<>();
2022-07-08 11:19:08 +08:00
List<InsuranceAccountInspectPO> list = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndBillMonth(InspectStatusEnum.IGNORE.getValue(), billMonth);
2022-04-15 13:17:25 +08:00
if (CollectionUtils.isEmpty(list)) {
result.put("displayFlag", false);
return result;
}
result.put("displayFlag", true);
return result;
2022-04-12 19:29:19 +08:00
}
2022-04-15 19:01:09 +08:00
@Override
public void ignore(Collection<Long> ids) {
2022-07-08 11:19:08 +08:00
List<InsuranceAccountInspectPO> insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndIds(InspectStatusEnum.IGNORE.getValue(), ids);
2022-04-15 19:01:09 +08:00
if (CollectionUtils.isNotEmpty(insuranceAccountInspectPOS)) {
getInsuranceAccountDetailMapper().batchIgnoreInspectDetails(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getId).collect(Collectors.toList()));
2022-04-15 19:01:09 +08:00
}
}
@Override
2022-06-06 19:08:39 +08:00
public InsuranceAccountTabDTO tabList(AccountParam build) {
2022-04-15 19:01:09 +08:00
InsuranceAccountTabDTO insuranceAccountTabDTO = InsuranceAccountTabDTO.builder().build();
InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(build.getBillMonth(), build.getPaymentOrganization());
insuranceAccountBatchPO = encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class);
2022-04-15 19:01:09 +08:00
boolean isShow = false;
if (insuranceAccountBatchPO == null || insuranceAccountBatchPO.getBillStatus() == BillStatusEnum.NOT_ARCHIVED.getValue()) {
isShow = true;
}
if (insuranceAccountBatchPO != null) {
insuranceAccountTabDTO.setRemarks(insuranceAccountBatchPO.getRemarks());
}
List<Map<String, Object>> tabList = new ArrayList<>();
Map<String, Object> common = new HashMap<>();
common.put("id", "1");
2022-07-08 11:19:08 +08:00
common.put("content", SalaryI18nUtil.getI18nLabel(92265, "正常缴纳"));
2022-04-15 19:01:09 +08:00
tabList.add(common);
if (isShow) {
Map<String, Object> change = new HashMap<>();
change.put("id", "2");
2022-07-08 11:19:08 +08:00
change.put("content", SalaryI18nUtil.getI18nLabel(100509, "异动清单"));
2022-04-15 19:01:09 +08:00
tabList.add(change);
}
Map<String, Object> repair = new HashMap<>();
repair.put("id", "3");
repair.put("content", SalaryI18nUtil.getI18nLabel(92267, "补缴"));
tabList.add(repair);
Map<String, Object> overView = new HashMap<>();
overView.put("id", "4");
2022-07-08 11:19:08 +08:00
overView.put("content", SalaryI18nUtil.getI18nLabel(99927, "总览"));
2022-04-15 19:01:09 +08:00
tabList.add(overView);
Map<String, Object> recession = new HashMap<>();
recession.put("id", "5");
recession.put("content", SalaryI18nUtil.getI18nLabel(92270, "退差"));
tabList.add(recession);
2022-04-15 19:01:09 +08:00
insuranceAccountTabDTO.setTabList(tabList);
insuranceAccountTabDTO.setShow(isShow);
2022-06-06 19:08:39 +08:00
insuranceAccountTabDTO.setBillMonth(build.getBillMonth());
2022-04-15 19:01:09 +08:00
return insuranceAccountTabDTO;
}
2022-04-16 16:43:33 +08:00
@Override
public Map<String, Object> changeList(InsuranceAccountDetailParam param) {
2022-07-08 11:19:08 +08:00
Map<String, Object> datas = new HashMap<>();
Long employeeId = (long) user.getUID();
SalaryPageUtil.start(param.getCurrent(), param.getPageSize());
List<InsuranceArchivesEmployeePO> insuranceArchivesEmployeePOS = getInsuranceAccountDetailMapper().changeList(param.getUserName());
2022-04-22 18:50:03 +08:00
PageInfo<InsuranceArchivesEmployeePO> pageInfo = new PageInfo<>(insuranceArchivesEmployeePOS);
2022-04-16 16:43:33 +08:00
List<Map<String, Object>> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS);
PageInfo<Map<String, Object>> pageInfos = new PageInfo<>(records);
2022-04-22 18:50:03 +08:00
pageInfos.setTotal(pageInfo.getTotal());
2022-04-16 16:43:33 +08:00
pageInfos.setPageNum(param.getCurrent());
pageInfos.setPageSize(param.getPageSize());
List<WeaTableColumn> weaTableColumns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, employeeId);
WeaTable table = new WeaTable();
table.setPageUID(UUID.randomUUID().toString());
table.setColumns(weaTableColumns);
table.setTableType(WeaTableType.CHECKBOX);
WeaTableOperates weaTableOperates = new WeaTableOperates();
WeaTableOperate weaTableOperate = new WeaTableOperate();
weaTableOperate.setIndex("0");
weaTableOperate.setText("移除");
WeaTableOperate weaTableOperate1 = new WeaTableOperate();
weaTableOperate1.setIndex("1");
weaTableOperate1.setText("添加");
table.setOperates(weaTableOperates);
List<List<Permission>> permissions = new ArrayList<>();
for (int i = 0; i < records.size(); i++) {
List<Permission> permission = new ArrayList<>();
if (UserStatusEnum.DEPARTURE.getDefaultLabel().equals(records.get(i).get("status"))) {
2022-04-16 16:43:33 +08:00
permission.add(new Permission(true, false));
permission.add(new Permission(false, false));
permissions.add(permission);
}
if (UserStatusEnum.DEPARTURE.getDefaultLabel().equals(records.get(i).get("status"))) {
2022-04-16 16:43:33 +08:00
permission.add(new Permission(false, false));
permission.add(new Permission(true, false));
permissions.add(permission);
}
}
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
2022-07-08 11:19:08 +08:00
datas.put("permissions", permissions);
2022-04-16 16:43:33 +08:00
datas.put("pageInfo", pageInfos);
2022-07-08 11:19:08 +08:00
datas.put("dataKey", result.getResultMap());
2022-04-16 16:43:33 +08:00
return datas;
}
@Override
public void accountInspect(InspectAccountParam param) {
2022-07-08 11:19:08 +08:00
Long employeeId = (long) user.getUID();
2022-04-16 16:43:33 +08:00
ValidUtil.doValidator(param);
2022-04-22 15:17:31 +08:00
String currentUserName = user.getLastname();
getSiAccountBiz(user).accountInspect(param.getIds(), param.getBillMonth(), employeeId, currentUserName, param.getPaymentOrganization());
2022-04-16 16:43:33 +08:00
}
@Override
public Map<String, Object> getInspectTable(InsuranceAccountDetailParam param) {
2022-07-08 11:19:08 +08:00
Map<String, Object> datas = new HashMap<>();
2022-04-16 16:43:33 +08:00
2022-07-08 11:19:08 +08:00
SalaryPageUtil.start(param.getCurrent(), param.getPageSize());
2022-04-16 16:43:33 +08:00
List<InsuranceAccountInspectPO> insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByBillMonth(param.getBillMonth());
List<Map<String, Object>> records = getService(user).buildInspectRecords(insuranceAccountInspectPOS, Long.valueOf(param.getPaymentOrganization()));
2022-04-16 16:43:33 +08:00
PageInfo<Map<String, Object>> pageInfos = new PageInfo<>(records);
pageInfos.setTotal(records.size());
pageInfos.setPageNum(param.getCurrent());
pageInfos.setPageSize(param.getPageSize());
List<WeaTableColumn> weaTableColumns = getColumnBuildService(user).buildInspectColumns(insuranceAccountInspectPOS, Long.valueOf(param.getPaymentOrganization()));
2022-04-16 16:43:33 +08:00
WeaTable table = new WeaTable();
table.setPageUID(UUID.randomUUID().toString());
table.setColumns(weaTableColumns);
table.setTableType(WeaTableType.CHECKBOX);
WeaTableOperates weaTableOperates = new WeaTableOperates();
WeaTableOperate weaTableOperate = new WeaTableOperate();
weaTableOperate.setIndex("0");
weaTableOperate.setText("忽略");
WeaTableOperate weaTableOperate1 = new WeaTableOperate();
weaTableOperate1.setIndex("1");
weaTableOperate1.setText("重置");
table.setOperates(weaTableOperates);
List<List<Permission>> permissions = new ArrayList<>();
for (int i = 0; i < records.size(); i++) {
List<Permission> permission = new ArrayList<>();
Permission permissionCheckBox = new Permission();
if (InspectStatusEnum.IGNORE.getValue() == records.get(i).get("inspectStatus")) {
permissionCheckBox.setVisible(true);
permissionCheckBox.setDisabled(false);
permission.add(new Permission(true, false));
permission.add(new Permission(false, true));
permissions.add(permission);
}
if (InspectStatusEnum.COMFORED.getValue() == records.get(i).get("inspectStatus")) {
permissionCheckBox.setVisible(true);
permissionCheckBox.setDisabled(true);
permission.add(new Permission(false, true));
permission.add(new Permission(true, false));
permissions.add(permission);
}
}
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
2022-07-08 11:19:08 +08:00
datas.put("permissions", permissions);
2022-04-16 16:43:33 +08:00
datas.put("pageInfo", pageInfos);
2022-07-08 11:19:08 +08:00
datas.put("dataKey", result.getResultMap());
2022-04-16 16:43:33 +08:00
return datas;
}
2022-04-18 20:24:43 +08:00
@Override
public Map<String, Object> getCommonForm(Map<String, Object> params) {
Map<String, Object> apidatas = new HashMap<>();
//条件组
List<SearchConditionGroup> addGroups = new ArrayList<>();
List<SearchConditionItem> conditionItems = new ArrayList<>();
List<SearchConditionItem> conditionItem = new ArrayList<>();
2022-04-22 16:42:06 +08:00
SearchConditionItem includes = SalaryFormItemUtil.browserItem(user, 18, 12, 2, true, "对象", "required", "17", "includes");
2022-04-18 20:24:43 +08:00
conditionItems.add(includes);
2022-04-22 16:42:06 +08:00
SearchConditionItem excludes = SalaryFormItemUtil.browserItem(user, 18, 12, 2, true, "选择人员", "required", "17", "excludes");
2022-04-18 20:24:43 +08:00
conditionItem.add(excludes);
2022-07-08 11:19:08 +08:00
addGroups.add(new SearchConditionGroup("人员范围", true, conditionItems));
addGroups.add(new SearchConditionGroup("人员范围排除", true, conditionItem));
2022-04-18 20:24:43 +08:00
2022-07-08 11:19:08 +08:00
apidatas.put("condition", addGroups);
2022-04-18 20:24:43 +08:00
return apidatas;
}
@Override
public Map<String, Object> getSupplementaryForm(Map<String, Object> params) {
Map<String, Object> apidatas = new HashMap<>();
//条件组
List<SearchConditionGroup> addGroups = new ArrayList<>();
List<SearchConditionItem> condition = new ArrayList<>();
List<SearchConditionItem> conditionItems = new ArrayList<>();
List<SearchConditionItem> conditionItem = new ArrayList<>();
2022-09-22 14:25:50 +08:00
SearchConditionItem billMonthList = SalaryFormItemUtil.datePickerItem(user, 2, 16, true, 2, "补缴月份", "billMonth");
2022-04-18 20:24:43 +08:00
billMonthList.setMultiple(true);
2022-04-20 19:12:01 +08:00
billMonthList.setOtherParams(new HashMap<>());
2022-04-18 20:24:43 +08:00
billMonthList.getOtherParams().put("type", "months");
billMonthList.getOtherParams().put("format", "YYYY-MM");
billMonthList.getOtherParams().put("showFormat", "YYYY-MM");
billMonthList.setMultiple(true);
2022-09-22 14:25:50 +08:00
billMonthList.setViewAttr(3);
billMonthList.setRules("required");
2022-04-18 20:24:43 +08:00
condition.add(billMonthList);
2022-07-08 11:19:08 +08:00
SearchConditionItem billProjects = SalaryFormItemUtil.selectItem(user, buildBillProjectsOptions(), 2, 16, 6, true, "补缴项目", "projects");
2022-09-22 14:25:50 +08:00
billProjects.setViewAttr(3);
2022-05-26 11:00:38 +08:00
billProjects.setDetailtype(2);
2022-09-22 14:25:50 +08:00
billProjects.setRules("required");
2022-04-18 20:24:43 +08:00
condition.add(billProjects);
2022-04-22 15:17:31 +08:00
SearchConditionItem includes = SalaryFormItemUtil.browserItem(user, 18, 6, 3, true, "对象", "required", "17", "includes");
2022-04-18 20:24:43 +08:00
conditionItems.add(includes);
2022-05-26 11:00:38 +08:00
// SearchConditionItem excludes = SalaryFormItemUtil.browserItem(user, 18, 6, 2, true, "选择人员", "required", "17", "excludes");
// excludes.setViewAttr(2);
// conditionItem.add(excludes);
2022-07-08 11:19:08 +08:00
addGroups.add(new SearchConditionGroup("基础信息", true, condition));
addGroups.add(new SearchConditionGroup("人员范围", true, conditionItems));
2022-05-26 11:00:38 +08:00
// addGroups.add(new SearchConditionGroup("人员范围排除",true,conditionItem));
2022-04-18 20:24:43 +08:00
2022-07-08 11:19:08 +08:00
apidatas.put("condition", addGroups);
2022-04-18 20:24:43 +08:00
return apidatas;
}
@Override
public PageInfo<InsuranceAccountViewListDTO> overView(InsuranceAccountDetailParam queryParam) {
2022-06-08 17:52:10 +08:00
PageInfo<InsuranceAccountViewListDTO> pageInfos = getSiAccountBiz(user).overView(queryParam);
2022-04-18 20:24:43 +08:00
return pageInfos;
}
2022-04-27 14:36:05 +08:00
@Override
2022-07-08 11:19:08 +08:00
public List<Map<String, Object>> welfareData(String billMonth, List<Long> employeeIds, Long taxAgentId) {
InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, taxAgentId);
insuranceAccountBatchPO = encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class);
2022-04-27 14:36:05 +08:00
if (insuranceAccountBatchPO == null || Objects.equals(BillStatusEnum.NOT_ARCHIVED.getValue(), insuranceAccountBatchPO.getBillStatus())) {
return Lists.newArrayList();
}
List<InsuranceAccountDetailPO> list = queryList(billMonth, taxAgentId, employeeIds);
2022-04-27 14:36:05 +08:00
List<Map<String, Object>> result = new ArrayList<>();
list.stream().forEach(item -> {
Map<String, Object> record = new HashMap<>();
record.put("employeeId", item.getEmployeeId());
if (StringUtils.isNotEmpty(item.getSocialPerJson())) {
Map<String, Object> socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap<String, Object>().getClass());
socialJson.forEach((k, v) -> {
record.put(k + "socialPer", v);
});
}
if (StringUtils.isNotEmpty(item.getSocialComJson())) {
Map<String, Object> socialJson = JSON.parseObject(item.getSocialComJson(), new HashMap<String, Object>().getClass());
socialJson.forEach((k, v) -> {
record.put(k + "socialCom", v);
});
}
record.put("socialPerSum", item.getSocialPerSum());
record.put("socialComSum", item.getSocialComSum());
if (StringUtils.isNotEmpty(item.getFundPerJson())) {
Map<String, Object> fundPerJson = JSON.parseObject(item.getFundPerJson(), new HashMap<String, Object>().getClass());
fundPerJson.forEach((k, v) -> {
record.put(k + "fundPer", v);
});
}
if (StringUtils.isNotEmpty(item.getFundComJson())) {
Map<String, Object> fundPerJson = JSON.parseObject(item.getFundComJson(), new HashMap<String, Object>().getClass());
fundPerJson.forEach((k, v) -> {
record.put(k + "fundCom", v);
});
}
record.put("fundPerSum", item.getFundPerSum());
record.put("fundComSum", item.getFundComSum());
if (StringUtils.isNotEmpty(item.getOtherPerJson())) {
Map<String, Object> fundPerJson = JSON.parseObject(item.getOtherPerJson(), new HashMap<String, Object>().getClass());
fundPerJson.forEach((k, v) -> {
record.put(k + "otherPer", v);
});
}
if (StringUtils.isNotEmpty(item.getOtherComJson())) {
Map<String, Object> fundComJson = JSON.parseObject(item.getOtherComJson(), new HashMap<String, Object>().getClass());
if (fundComJson != null) {
2022-07-21 17:28:47 +08:00
}
2022-04-27 14:36:05 +08:00
fundComJson.forEach((k, v) -> {
record.put(k + "otherCom", v);
});
}
record.put("otherPerSum", item.getOtherPerSum());
record.put("otherComSum", item.getOtherComSum());
record.put("perSum", item.getPerSum());
record.put("comSum", item.getComSum());
result.add(record);
});
return result;
}
2022-04-18 20:24:43 +08:00
2022-04-27 16:21:24 +08:00
@Override
public Map<String, String> welfareColumns() {
2022-07-08 11:19:08 +08:00
List<ICategoryPO> listAll = MapperProxyFactory.getProxy(ICategoryMapper.class).listAll();
2022-04-27 16:21:24 +08:00
List<ICategoryPO> list = new ArrayList<>();
if (CollectionUtils.isNotEmpty(listAll)) {
list.addAll(listAll);
}
Map<String, String> result = new LinkedHashMap<>();
result.put(SalaryI18nUtil.getI18nLabel(100393, "个人合计"), "perSum");
result.put(SalaryI18nUtil.getI18nLabel(100388, "社保个人合计"), "socialPerSum");
result.put(SalaryI18nUtil.getI18nLabel(100390, "公积金个人合计"), "fundPerSum");
result.put(SalaryI18nUtil.getI18nLabel(100392, "其他福利个人合计"), "otherPerSum");
Map<String, String> categoryIdNameMap = getSICategoryService(user).categoryIdNameMap();
list.stream().forEach(item -> {
if (Objects.equals(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), item.getWelfareType())) {
result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "socialPer");
}
if (Objects.equals(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), item.getWelfareType())) {
result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "fundPer");
}
if (Objects.equals(WelfareTypeEnum.OTHER.getValue(), item.getWelfareType())) {
result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "otherPer");
}
});
result.put(SalaryI18nUtil.getI18nLabel(100397, "单位合计"), "comSum");
result.put(SalaryI18nUtil.getI18nLabel(100394, "社保单位合计"), "socialComSum");
result.put(SalaryI18nUtil.getI18nLabel(100395, "公积金单位合计"), "fundComSum");
result.put(SalaryI18nUtil.getI18nLabel(100396, "其他福利单位合计"), "otherComSum");
list.stream().forEach(item -> {
if (Objects.equals(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), item.getWelfareType())) {
result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(100289, "单位"), item.getId() + "socialCom");
}
if (Objects.equals(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), item.getWelfareType())) {
result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(100289, "单位"), item.getId() + "fundCom");
}
if (Objects.equals(WelfareTypeEnum.OTHER.getValue(), item.getWelfareType())) {
result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(100289, "单位"), item.getId() + "otherCom");
}
});
return result;
}
2022-04-18 20:24:43 +08:00
public List<SearchConditionOption> buildBillProjectsOptions() {
List<SearchConditionOption> options = new ArrayList<>();
options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.ALL.getValue()),
2022-07-08 11:19:08 +08:00
SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.ALL.getLabelId(), ProjectTypeEnum.ALL.getDefaultLabel())));
2022-04-18 20:24:43 +08:00
options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.SOCIAL.getValue()),
2022-07-08 11:19:08 +08:00
SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.SOCIAL.getLabelId(), ProjectTypeEnum.SOCIAL.getDefaultLabel())));
2022-04-18 20:24:43 +08:00
options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.FUND.getValue()),
2022-07-08 11:19:08 +08:00
SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.FUND.getLabelId(), ProjectTypeEnum.FUND.getDefaultLabel())));
2022-04-18 20:24:43 +08:00
options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.OTHER.getValue()),
2022-07-08 11:19:08 +08:00
SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.OTHER.getLabelId(), ProjectTypeEnum.OTHER.getDefaultLabel())));
2022-04-18 20:24:43 +08:00
options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.ENDOWMENT_INSURANCE.getValue()),
2022-07-08 11:19:08 +08:00
SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.ENDOWMENT_INSURANCE.getLabelId(), ProjectTypeEnum.ENDOWMENT_INSURANCE.getDefaultLabel())));
2022-04-18 20:24:43 +08:00
options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.MEDICAL_INSURANCE.getValue()),
2022-07-08 11:19:08 +08:00
SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.MEDICAL_INSURANCE.getLabelId(), ProjectTypeEnum.MEDICAL_INSURANCE.getDefaultLabel())));
2022-04-18 20:24:43 +08:00
return options;
}
public List<InsuranceAccountDetailPO> queryList(String billMonth, Long taxAgentId, List<Long> employeeIds) {
2022-08-18 15:02:04 +08:00
List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, employeeIds);
//退差数据不参与薪资核算
insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream().filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue()) || f.getPaymentStatus().equals(PaymentStatusEnum.REPAIR.getValue())).collect(Collectors.toList());
2022-08-18 15:02:04 +08:00
List<InsuranceAccountDetailPO> list = buildNewInsuranceDetailPOS(insuranceAccountDetailPOS);
2022-06-06 20:05:37 +08:00
// InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(list);
2022-04-27 14:36:05 +08:00
return list;
}
public List<InsuranceAccountDetailPO> buildNewInsuranceDetailPOS(List<InsuranceAccountDetailPO> list) {
List<InsuranceAccountDetailPO> newList = new ArrayList<>();
if (CollectionUtils.isEmpty(list)) {
return newList;
}
Map<Long, List<InsuranceAccountDetailPO>> employeeMap = list.stream().filter(item -> item.getEmployeeId() != null)
.collect(Collectors.groupingBy(InsuranceAccountDetailPO::getEmployeeId));
for (Map.Entry<Long, List<InsuranceAccountDetailPO>> entry : employeeMap.entrySet()) {
Long k = entry.getKey();
List<InsuranceAccountDetailPO> v = entry.getValue();
InsuranceAccountDetailPO insuranceAccountDetailPO = new InsuranceAccountDetailPO();
insuranceAccountDetailPO.setEmployeeId(k);
Map<String, String> socialPerMap = new HashMap<>();
Map<String, String> fundPerMap = new HashMap<>();
Map<String, String> otherPerMap = new HashMap<>();
Map<String, String> socialComMap = new HashMap<>();
Map<String, String> fundComMap = new HashMap<>();
Map<String, String> otherComMap = new HashMap<>();
BigDecimal socialPer = new BigDecimal("0");
BigDecimal socialCom = new BigDecimal("0");
BigDecimal fundPer = new BigDecimal("0");
BigDecimal fundCom = new BigDecimal("0");
BigDecimal otherPer = new BigDecimal("0");
BigDecimal otherCom = new BigDecimal("0");
BigDecimal perSum = new BigDecimal("0");
BigDecimal comSum = new BigDecimal("0");
for (InsuranceAccountDetailPO item : v) {
2022-06-06 20:05:37 +08:00
InsuranceAccountDetailPOEncrypt.decryptItem(item);
2022-09-20 10:13:05 +08:00
insuranceAccountDetailPO.setId(item.getId());
2022-04-27 14:36:05 +08:00
BigDecimal socialPerSum = StringUtils.isBlank(item.getSocialPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getSocialPerSum());
BigDecimal socialComSum = StringUtils.isBlank(item.getSocialComSum()) ? new BigDecimal("0") : new BigDecimal(item.getSocialComSum());
BigDecimal fundPerSum = StringUtils.isBlank(item.getFundPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getFundPerSum());
BigDecimal fundComSum = StringUtils.isBlank(item.getFundComSum()) ? new BigDecimal("0") : new BigDecimal(item.getFundComSum());
BigDecimal otherPerSum = StringUtils.isBlank(item.getOtherPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getOtherPerSum());
BigDecimal otherComSum = StringUtils.isBlank(item.getOtherComSum()) ? new BigDecimal("0") : new BigDecimal(item.getOtherComSum());
BigDecimal perSumItem = StringUtils.isBlank(item.getPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getPerSum());
BigDecimal comSumItem = StringUtils.isBlank(item.getComSum()) ? new BigDecimal("0") : new BigDecimal(item.getComSum());
socialPer = socialPer.add(socialPerSum);
socialCom = socialCom.add(socialComSum);
fundPer = fundPer.add(fundPerSum);
fundCom = fundCom.add(fundComSum);
otherPer = otherPer.add(otherPerSum);
otherCom = otherCom.add(otherComSum);
perSum = perSum.add(perSumItem);
comSum = comSum.add(comSumItem);
if (StringUtils.isNotBlank(item.getSocialPerJson())) {
Map<String, String> socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap<String, String>().getClass());
if (socialJson != null) {
2022-07-21 17:28:47 +08:00
socialJson.forEach((insuranceId, num) -> {
if (socialPerMap.get(insuranceId) == null) {
socialPerMap.put(insuranceId, num);
} else {
String oldNum = socialPerMap.get(insuranceId);
BigDecimal insuanceNum = new BigDecimal("0");
BigDecimal oldDecimal = new BigDecimal(oldNum);
BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num);
insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal);
socialPerMap.put(insuranceId, insuanceNum.toPlainString());
}
});
}
2022-04-27 14:36:05 +08:00
}
if (StringUtils.isNotBlank(item.getSocialComJson())) {
Map<String, String> socialJson = JSON.parseObject(item.getSocialComJson(), new HashMap<String, String>().getClass());
if (socialJson != null) {
2022-07-21 17:28:47 +08:00
socialJson.forEach((insuranceId, num) -> {
if (socialComMap.get(insuranceId) == null) {
socialComMap.put(insuranceId, num);
} else {
String oldNum = socialComMap.get(insuranceId);
BigDecimal insuanceNum = new BigDecimal("0");
BigDecimal oldDecimal = new BigDecimal(oldNum);
BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num);
insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal);
socialComMap.put(insuranceId, insuanceNum.toPlainString());
}
});
}
2022-04-27 14:36:05 +08:00
}
if (StringUtils.isNotBlank(item.getFundPerJson())) {
Map<String, String> fundJson = JSON.parseObject(item.getFundPerJson(), new HashMap<String, String>().getClass());
if (fundJson != null) {
2022-07-21 17:28:47 +08:00
fundJson.forEach((insuranceId, num) -> {
if (fundPerMap.get(insuranceId) == null) {
fundPerMap.put(insuranceId, num);
} else {
String oldNum = fundPerMap.get(insuranceId);
BigDecimal insuanceNum = new BigDecimal("0");
BigDecimal oldDecimal = new BigDecimal(oldNum);
BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num);
insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal);
fundPerMap.put(insuranceId, insuanceNum.toPlainString());
}
});
}
2022-04-27 14:36:05 +08:00
}
if (StringUtils.isNotBlank(item.getFundComJson())) {
Map<String, String> fundJson = JSON.parseObject(item.getFundComJson(), new HashMap<String, String>().getClass());
if (fundJson != null) {
2022-07-21 17:28:47 +08:00
fundJson.forEach((insuranceId, num) -> {
if (fundComMap.get(insuranceId) == null) {
fundComMap.put(insuranceId, num);
} else {
String oldNum = fundComMap.get(insuranceId);
BigDecimal insuanceNum = new BigDecimal("0");
BigDecimal oldDecimal = new BigDecimal(oldNum);
BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num);
insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal);
fundComMap.put(insuranceId, insuanceNum.toPlainString());
}
});
}
2022-04-27 14:36:05 +08:00
}
if (StringUtils.isNotBlank(item.getOtherPerJson())) {
Map<String, String> otherJson = JSON.parseObject(item.getOtherPerJson(), new HashMap<String, String>().getClass());
if (otherJson != null) {
2022-07-21 17:28:47 +08:00
otherJson.forEach((insuranceId, num) -> {
if (otherPerMap.get(insuranceId) == null) {
otherPerMap.put(insuranceId, num);
} else {
String oldNum = otherPerMap.get(insuranceId);
BigDecimal insuanceNum = new BigDecimal("0");
BigDecimal oldDecimal = new BigDecimal(oldNum);
BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num);
insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal);
otherPerMap.put(insuranceId, insuanceNum.toPlainString());
}
});
}
2022-04-27 14:36:05 +08:00
}
if (StringUtils.isNotBlank(item.getOtherComJson())) {
Map<String, String> otherJson = JSON.parseObject(item.getOtherComJson(), new HashMap<String, String>().getClass());
if (otherJson != null) {
2022-07-21 17:28:47 +08:00
otherJson.forEach((insuranceId, num) -> {
if (otherComMap.get(insuranceId) == null) {
otherComMap.put(insuranceId, num);
} else {
String oldNum = otherComMap.get(insuranceId);
BigDecimal insuanceNum = new BigDecimal("0");
BigDecimal oldDecimal = new BigDecimal(oldNum);
BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num);
insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal);
otherComMap.put(insuranceId, insuanceNum.toPlainString());
}
});
}
2022-04-27 14:36:05 +08:00
}
}
insuranceAccountDetailPO.setSocialPerJson(JSON.toJSONString(socialPerMap));
insuranceAccountDetailPO.setSocialComJson(JSON.toJSONString(socialComMap));
insuranceAccountDetailPO.setFundPerJson(JSON.toJSONString(fundPerMap));
insuranceAccountDetailPO.setFundComJson(JSON.toJSONString(fundComMap));
insuranceAccountDetailPO.setOtherPerJson(JSON.toJSONString(otherPerMap));
insuranceAccountDetailPO.setOtherComJson(JSON.toJSONString(otherComMap));
insuranceAccountDetailPO.setSocialPerSum(socialPer.toPlainString());
insuranceAccountDetailPO.setSocialComSum(socialCom.toPlainString());
insuranceAccountDetailPO.setFundPerSum(fundPer.toPlainString());
insuranceAccountDetailPO.setFundComSum(fundCom.toPlainString());
insuranceAccountDetailPO.setOtherPerSum(otherPer.toPlainString());
insuranceAccountDetailPO.setOtherComSum(otherCom.toPlainString());
insuranceAccountDetailPO.setPerSum(perSum.toPlainString());
insuranceAccountDetailPO.setComSum(comSum.toPlainString());
newList.add(insuranceAccountDetailPO);
}
return newList;
}
2022-04-12 10:24:21 +08:00
2022-05-09 11:18:54 +08:00
@Override
public List<InsuranceAccountInspectPO> allInspects(Collection<Long> ids, String billMonth) {
InsuranceAccountInspectMapper siAccountInspectMapper = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class);
List<InsuranceAccountInspectPO> list = siAccountInspectMapper.getList(billMonth, InspectStatusEnum.IGNORE.getValue(), ids);
if (CollectionUtils.isNotEmpty(list)) {
return list;
}
return Collections.emptyList();
}
2022-06-08 17:52:10 +08:00
@Override
public Collection<TaxAgentPO> getAdminTaxAgentList() {
2022-07-08 11:19:08 +08:00
return getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID());
2022-06-08 17:52:10 +08:00
}
2022-04-22 15:17:31 +08:00
2022-07-20 15:40:51 +08:00
@Override
public void socialSecurityBenefitsRecalculate(InsuranceAccountBatchPO param) {
2022-09-21 11:12:05 +08:00
//fixme 重新核算的校验逻辑 1、先取台账对应扣缴义务人下的所有账套 2、取账套下所有核算记录 3、判断核算记录有没有使用对应月份的福利台账
// int num = getSiAccountBiz(user).checkIfBusinessaccounting(param);
// //表示已经被核算过不能重新核算
// if (num > 0) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "已被薪酬核算给核算过,无法重新核算!"));
// }
2022-07-20 15:40:51 +08:00
param.setBillStatus(0);
getSiAccountBiz(user).updateById(param);
}
2022-09-02 11:53:38 +08:00
/**
* 导出福利核算导入模板
*/
@Override
public XSSFWorkbook exportImportTemplate(InsuranceAcctDetailImportTemplateParam param) {
ValidUtil.doValidator(param);
// 必须选择导入模板所需的薪资项目(福利项)
if (CollectionUtils.isEmpty(param.getWelfareNames())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99019, "参数错误,请选择导入模板所需的福利项目核算项"));
2022-09-02 11:53:38 +08:00
}
// 模板表头(默认必带"个税扣缴义务人"、"姓名")
List<Object> headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"),
"部门",
SalaryI18nUtil.getI18nLabel(86186, "手机号"),
SalaryI18nUtil.getI18nLabel(86317, "工号"),
2022-09-02 11:53:38 +08:00
SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"),
"账单月份");
List<String> dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "taxAgentName", "billMonth");
// 查询福利核算项目
List<String> welfareNames = (List<String>) param.getWelfareNames();
headerList.addAll(welfareNames);
2022-09-02 11:53:38 +08:00
// excel导出的数据
//查询当前已有的正常缴纳数据
List<Map<String, Object>> resultMapList = getNormalDataByBillMonth(param.getBillMonth(), param.getPaymentOrganization());
// excel导出的数据
List<List<Object>> rows = Lists.newArrayListWithExpectedSize(resultMapList.size());
2022-09-02 11:53:38 +08:00
rows.add(headerList);
for (Map<String, Object> map : resultMapList) {
List<Object> row = Lists.newArrayListWithExpectedSize(headerList.size());
for (String dataIndex : dataIndexList) {
row.add(map.getOrDefault(dataIndex, StringUtils.EMPTY));
}
rows.add(row);
}
2022-09-02 11:53:38 +08:00
String sheetName = "福利核算导入模板";
return ExcelUtil.genWorkbookV2(rows, sheetName);
}
/**
* 将福利核算模板导入的数据更新到数据库
*/
2022-09-02 11:53:38 +08:00
@Override
public Map<String, Object> importInsuranceAcctDetail(InsuranceAcctImportParam importParam) {
// long currentEmployeeId = user.getUID();
// Boolean openDevolution = getTaxAgentService(user).isOpenDevolution();
2022-09-02 11:53:38 +08:00
Map<String, Object> apidatas = new HashMap<String, Object>();
EmployBiz employBiz = new EmployBiz();
//查询对于人员信息导入筛选的全局配置
SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode");
String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0";
2022-09-02 11:53:38 +08:00
//检验参数
//excel文件id
String imageId = Util.null2String(importParam.getImageId());
2022-09-02 11:53:38 +08:00
if (StringUtils.isBlank(imageId)) {
throw new SalaryRunTimeException("文件不存在");
}
// // 获取所有个税扣缴义务人
// List<TaxAgentPO> taxAgents = getTaxAgentService(user).listAll();
// Map<String, Long> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId);
2022-09-02 11:53:38 +08:00
// 获取租户下所有的人员
List<DataCollectionEmployee> salaryEmployees = employBiz.listEmployee();
// 失败的数量
int failCount = 0;
// 成功的数量
int successCount = 0;
InputStream fileInputStream = null;
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(importParam.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
// 错误提示信息
List<Map> excelComments = Lists.newArrayList();
// 存在错误的那行数据
List<Map<String, Object>> errorDatas = Lists.newArrayList();
// 表头
List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
// 处理数值
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
if (CollectionUtils.isEmpty(headers)) {
throw new SalaryRunTimeException("表头为空");
2022-09-02 11:53:38 +08:00
}
if (CollectionUtils.isEmpty(data)) {
throw new SalaryRunTimeException("无数据");
2022-09-02 11:53:38 +08:00
}
//存储待更新的InsuranceAccountDetailPO数据
List<InsuranceAccountDetailPO> updateInsuranceAccountDetailList = new ArrayList<>();
//遍历excel表具体数据
2022-09-02 11:53:38 +08:00
for (int i = 0; i < data.size(); i++) {
String row = "" + (i + 2) + "";
boolean isError = false;
Map<String, Object> map = data.get(i);
Long employeeId = 0L;
// Long taxAgentId = 0L;
List<InsuranceAccountDetailPO> list = new ArrayList<>();
String billMonth = (String) map.getOrDefault("账单月份", "");
String taxAgentName = (String) map.getOrDefault("个税扣缴义务人", "");
2022-09-20 10:13:05 +08:00
String supplementaryMonth = (String) map.getOrDefault("补缴月份", "");
Long paymentOrganization = 0L;
List<TaxAgentPO> taxAgentPoList = getTaxAgentMapper().listByName(taxAgentName);
2022-09-02 11:53:38 +08:00
if (taxAgentPoList.size() == 1) {
paymentOrganization = taxAgentPoList.get(0).getId();
} else {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人")));
excelComments.add(errorMessageMap);
}
if (!checkBillMonth(billMonth)) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "账单月份输入有误请参照“2022-09”这种格式进行检查"));
excelComments.add(errorMessageMap);
}
//遍历表头
2022-09-02 11:53:38 +08:00
for (int j = 0; j < headers.size(); j++) {
String header = headers.get(j);
String dataKey = header;
if (dataKey == null) {
continue;
}
String dataValue = (String) map.getOrDefault(dataKey.toString(), "");
String deparmentName = (String) map.getOrDefault("部门", "");
String mobile = (String) map.getOrDefault("手机号", "");
String workcode = (String) map.getOrDefault("工号", "");
2022-09-02 11:53:38 +08:00
2022-09-20 10:13:05 +08:00
2022-09-02 11:53:38 +08:00
if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) {
//当人员信息导入筛选的全局配置为"0"时,姓名才是必填项
if (StringUtils.isEmpty(dataValue) && "0".equals(confValue)) {
2022-09-02 11:53:38 +08:00
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"));
excelComments.add(errorMessageMap);
} else {
//筛选导入人员信息可以在人力资源池中匹配到的人员信息
List<DataCollectionEmployee> employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, dataValue, deparmentName, mobile, workcode, null);
2022-09-02 11:53:38 +08:00
if (CollectionUtils.isEmpty(employeeSameIds)) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"));
excelComments.add(errorMessageMap);
2022-09-02 11:53:38 +08:00
} else if (employeeSameIds.size() > 1) {
//存在离职和在职状态取在职状态
employeeSameIds = employeeSameIds.stream()
.filter(e -> UserStatusEnum.getNormalStatus().contains(e.getStatus()))
.collect(Collectors.toList());
if (employeeSameIds.size() != 1) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + "员工信息不存在或者存在多个员工");
2022-09-02 11:53:38 +08:00
excelComments.add(errorMessageMap);
} else {
employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 ? employeeSameIds.get(0).getEmployeeId() : null;
}
} else {
employeeId = employeeSameIds.get(0).getEmployeeId();
}
}
}
}
2022-09-02 11:53:38 +08:00
if (!isError){
List<Long> employeeIds = new ArrayList<>();
employeeIds.add(employeeId);
//如果福利核算信息查询不到唯一匹配数据,不支持导入
//根据员工id、个税扣缴义务人id、账单月份查询
2022-09-20 10:13:05 +08:00
//根据表头字段来区分正常缴纳和补缴两类数据
if (!headers.contains("补缴月份")) {
list = getInsuranceAccountDetailMapper().queryNormalList(billMonth, paymentOrganization, employeeIds.get(0));
2022-09-20 10:13:05 +08:00
} else {
list = getInsuranceAccountDetailMapper().querySupplementList(billMonth, paymentOrganization, employeeIds.get(0), supplementaryMonth);
}
if (list.isEmpty()) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员"));
excelComments.add(errorMessageMap);
} else if (list.size() > 1) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项"));
excelComments.add(errorMessageMap);
} else {
//拼装待更新数据
InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(list);
updateInsuranceAccountDetailList.add(handleInsuranceAccountDetail(list.get(0), map));
2022-09-02 11:53:38 +08:00
}
}
if (isError) {
failCount++;
errorDatas.add(map);
} else {
successCount++;
}
}
//将待更新列表加密
InsuranceAccountDetailPOEncrypt.encryptInsuranceAccountDetailPOList(updateInsuranceAccountDetailList);
//更新
for(InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) {
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 = encryptUtil.decrypt(batchPO, InsuranceAccountBatchPO.class);
//更新
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 = encryptUtil.encrypt(batchPO, InsuranceAccountBatchPO.class);
getInsuranceAccountBatchMapper().updateById(batchPO);
}
}
}
});
}
2022-09-02 11:53:38 +08:00
apidatas.put("successCount", successCount);
apidatas.put("errorCount", failCount);
apidatas.put("errorData", excelComments);
} finally {
IOUtils.closeQuietly(fileInputStream);
}
return apidatas;
}
2022-09-07 14:57:07 +08:00
/**
* 预览福利核算导入模板导入的数据
*/
@Override
public Map<String, Object> preview(InsuranceAcctImportParam param) {
//1、参数校验
String imageId = param.getImageId();
if (StringUtils.isBlank(imageId)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100593, "文件id为空"));
}
Map<String, Object> map = new HashMap<>();
InputStream fileInputStream = null;
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId));
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 XSSFWorkbook exportSupplyImportTemplate(InsuranceAcctDetailImportTemplateParam param) {
ValidUtil.doValidator(param);
// 必须选择导入模板所需的薪资项目(福利项)
if (CollectionUtils.isEmpty(param.getWelfareNames())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99019, "参数错误,请选择导入模板所需的福利项目核算项"));
}
// 模板表头(默认必带"个税扣缴义务人"、"姓名")
List<Object> headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"),
"部门",
SalaryI18nUtil.getI18nLabel(86186, "手机号"),
SalaryI18nUtil.getI18nLabel(86317, "工号"),
SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"),
"账单月份",
"补缴月份");
List<String> dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "taxAgentName", "billMonth", "supplementaryMonth");
// 查询福利核算项目
List<String> welfareNames = (List<String>) param.getWelfareNames();
headerList.addAll(welfareNames);
//查询当前已有的补缴数据
List<Map<String, Object>> resultMapList = getSupplyDataByBillMonth(param.getBillMonth(), param.getPaymentOrganization());
// excel导出的数据
List<List<Object>> rows = Lists.newArrayListWithExpectedSize(resultMapList.size());
rows.add(headerList);
for (Map<String, Object> map : resultMapList) {
List<Object> row = Lists.newArrayListWithExpectedSize(headerList.size());
for (String dataIndex : dataIndexList) {
row.add(map.getOrDefault(dataIndex, StringUtils.EMPTY));
}
rows.add(row);
}
String sheetName = "福利核算-补缴导入模板";
return ExcelUtil.genWorkbookV2(rows, sheetName);
}
/**
* 获取福利台账中的补缴数据
* @param billMonth 账单月份
* @param paymentOrganization 个税扣缴义务人id
* @return
*/
private List<Map<String, Object>> getSupplyDataByBillMonth(String billMonth, Long paymentOrganization) {
List<Map<String, Object>> resultList = new ArrayList<>();
2022-09-20 10:13:05 +08:00
DataCollectionEmployee employee = new DataCollectionEmployee();
TaxAgentPO taxAgentPO = taxAgentBiz.getById(paymentOrganization);
List<InsuranceAccountDetailPO> supplyDataList = getInsuranceAccountDetailMapper().querySupplementListByBillMonth(billMonth, paymentOrganization);
//过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员
List<InsuranceArchivesBaseInfoPO> baseInfoPOList = getInsuranceBaseInfoMapper().listAll();
List<Long> canAccountIds = baseInfoPOList.stream()
.filter(f->f.getPaymentOrganization().equals(paymentOrganization)
&& (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())))
.map(InsuranceArchivesBaseInfoPO::getEmployeeId)
.collect(Collectors.toList());
supplyDataList = supplyDataList.stream().filter(f -> canAccountIds.contains(f.getEmployeeId())).collect(Collectors.toList());
for(InsuranceAccountDetailPO po : supplyDataList) {
2022-09-20 10:13:05 +08:00
Map<String, Object> resultMap = new HashMap<>();
employee = employeeBiz.getEmployeeById(po.getEmployeeId());
2022-09-20 10:13:05 +08:00
resultMap.put("username", employee.getUsername());
resultMap.put("departmentName", employee.getDepartmentName());
resultMap.put("mobile", employee.getMobile());
resultMap.put("workcode", employee.getWorkcode());
resultMap.put("taxAgentName", taxAgentPO.getName());
resultMap.put("billMonth", billMonth);
resultMap.put("supplementaryMonth", po.getSupplementaryMonth());
resultList.add(resultMap);
}
return resultList;
}
/**
* 获取福利台账中的正常缴纳数据
* @param billMonth 账单月份
* @param paymentOrganization 个税扣缴义务人id
* @return
*/
private List<Map<String, Object>> getNormalDataByBillMonth(String billMonth, Long paymentOrganization) {
List<Map<String, Object>> resultList = new ArrayList<>();
DataCollectionEmployee employee = new DataCollectionEmployee();
TaxAgentPO taxAgentPO = taxAgentBiz.getById(paymentOrganization);
List<InsuranceAccountDetailPO> normalDataList = getInsuranceAccountDetailMapper().queryNormalListByBillMonth(billMonth, paymentOrganization);
//过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员
List<InsuranceArchivesBaseInfoPO> baseInfoPOList = getInsuranceBaseInfoMapper().listAll();
List<Long> canAccountIds = baseInfoPOList.stream()
.filter(f->f.getPaymentOrganization().equals(paymentOrganization)
&& (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())))
.map(InsuranceArchivesBaseInfoPO::getEmployeeId)
.collect(Collectors.toList());
normalDataList = normalDataList.stream().filter(f -> canAccountIds.contains(f.getEmployeeId())).collect(Collectors.toList());
for(InsuranceAccountDetailPO po : normalDataList) {
Map<String, Object> resultMap = new HashMap<>();
employee = employeeBiz.getEmployeeById(po.getEmployeeId());
resultMap.put("username", employee.getUsername());
resultMap.put("departmentName", employee.getDepartmentName());
resultMap.put("mobile", employee.getMobile());
resultMap.put("workcode", employee.getWorkcode());
resultMap.put("taxAgentName", taxAgentPO.getName());
resultMap.put("billMonth", billMonth);
resultList.add(resultMap);
}
return resultList;
}
2022-09-02 11:53:38 +08:00
/**
* 将更新的数据设置到老的insuranceAccountDetailPO对象中
*/
private InsuranceAccountDetailPO handleInsuranceAccountDetail(InsuranceAccountDetailPO insuranceAccountDetailPO, Map<String, Object> baseMap) {
2022-09-02 11:53:38 +08:00
//组装json数据,格式Map<String, Object>
Map<String, String> socialPerMap = new HashMap<>();
Map<String, String> fundPerMap = new HashMap<>();
Map<String, String> otherPerMap = new HashMap<>();
Map<String, String> socialComMap = new HashMap<>();
Map<String, String> fundComMap = new HashMap<>();
Map<String, String> otherComMap = new HashMap<>();
2022-09-02 11:53:38 +08:00
//筛选出福利核算项
Map<String, Object> toDealMap =
baseMap.entrySet().stream()
.filter(map -> !"姓名".equals(map.getKey())
&& !"部门".equals(map.getKey())
&& !"手机号".equals(map.getKey())
&& !"个税扣缴义务人".equals(map.getKey())
&& !"账单月份".equals(map.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
for(Map.Entry<String, Object> entry : toDealMap.entrySet()) {
2022-09-02 11:53:38 +08:00
//判断元素是否属于福利类
String keyName = entry.getKey();
//获取元素名后缀,方便之后判断“个人”或“单位”
String payScope = keyName.substring(keyName.length() - 2);
2022-09-02 11:53:38 +08:00
//获取福利类型
Integer welfareType;
List<ICategoryPO> categoryPOList = siCategoryBiz.listByName(entry.getKey().substring(0, keyName.length() - 2));
2022-09-02 11:53:38 +08:00
if (categoryPOList.size() == 1) {
ICategoryPO iCategoryPO = categoryPOList.get(0);
welfareType = iCategoryPO.getWelfareType();
2022-09-02 11:53:38 +08:00
if ("个人".equals(payScope)) {
switch (welfareType) {
case 1:
socialPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
2022-09-02 11:53:38 +08:00
break;
case 2:
fundPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
2022-09-02 11:53:38 +08:00
break;
case 3:
otherPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
2022-09-02 11:53:38 +08:00
break;
default:
throw new SalaryRunTimeException("福利类型不存在");
2022-09-02 11:53:38 +08:00
}
} else if ("单位".equals(payScope)) {
switch (welfareType) {
case 1:
socialComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
2022-09-02 11:53:38 +08:00
break;
case 2:
fundComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
2022-09-02 11:53:38 +08:00
break;
case 3:
otherComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
2022-09-02 11:53:38 +08:00
break;
default:
throw new SalaryRunTimeException("福利类型不存在");
2022-09-02 11:53:38 +08:00
}
}
}
}
//组装新的insuranceAccountDetailPO对象数据
if (!socialPerMap.isEmpty()) {
//对比新旧json中数据并输出最终json
checkJsonMap(socialPerMap, insuranceAccountDetailPO.getSocialPerJson());
insuranceAccountDetailPO.setSocialPerJson(JSON.toJSONString(socialPerMap));
}
if (!socialComMap.isEmpty()) {
checkJsonMap(socialComMap, insuranceAccountDetailPO.getSocialComJson());
insuranceAccountDetailPO.setSocialComJson(JSON.toJSONString(socialComMap));
}
if (!fundPerMap.isEmpty()) {
checkJsonMap(fundPerMap, insuranceAccountDetailPO.getFundPerJson());
insuranceAccountDetailPO.setFundPerJson(JSON.toJSONString(fundPerMap));
}
if (!fundComMap.isEmpty()) {
checkJsonMap(fundComMap, insuranceAccountDetailPO.getFundComJson());
insuranceAccountDetailPO.setFundComJson(JSON.toJSONString(fundComMap));
}
if (!otherPerMap.isEmpty()) {
checkJsonMap(otherPerMap, insuranceAccountDetailPO.getOtherPerJson());
insuranceAccountDetailPO.setOtherPerJson(JSON.toJSONString(otherPerMap));
}
if (!otherComMap.isEmpty()) {
checkJsonMap(otherComMap, insuranceAccountDetailPO.getOtherComJson());
insuranceAccountDetailPO.setOtherComJson(JSON.toJSONString(otherComMap));
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("个人合计", "").toString())) {
insuranceAccountDetailPO.setPerSum(baseMap.get("个人合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("社保个人合计", "").toString())) {
insuranceAccountDetailPO.setSocialPerSum(baseMap.get("社保个人合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金个人合计", "").toString())) {
insuranceAccountDetailPO.setFundPerSum(baseMap.get("公积金个人合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利个人合计", "").toString())) {
insuranceAccountDetailPO.setOtherPerSum(baseMap.get("其他福利个人合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("单位合计", "").toString())) {
insuranceAccountDetailPO.setComSum(baseMap.get("单位合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("社保单位合计", "").toString())) {
insuranceAccountDetailPO.setSocialComSum(baseMap.get("社保单位合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金单位合计", "").toString())) {
insuranceAccountDetailPO.setFundComSum(baseMap.get("公积金单位合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利单位合计", "").toString())) {
insuranceAccountDetailPO.setOtherComSum(baseMap.get("其他福利单位合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("账单月份", "").toString())) {
insuranceAccountDetailPO.setBillMonth(baseMap.get("账单月份").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("社保合计", "").toString())) {
insuranceAccountDetailPO.setSocialSum(baseMap.get("社保合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金合计", "").toString())) {
insuranceAccountDetailPO.setFundSum(baseMap.get("公积金合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利合计", "").toString())) {
insuranceAccountDetailPO.setOtherSum(baseMap.get("其他福利合计").toString());
}
if (!StringUtils.isEmpty(baseMap.getOrDefault("合计", "").toString())) {
insuranceAccountDetailPO.setTotal(baseMap.get("合计").toString());
}
2022-09-20 10:13:05 +08:00
//如果导入的时补缴数据,还会包含补缴月份
if (!StringUtils.isEmpty(baseMap.getOrDefault("补缴月份", "").toString())) {
insuranceAccountDetailPO.setSupplementaryMonth(baseMap.get("补缴月份").toString());
}
insuranceAccountDetailPO.setUpdateTime(new Date());
return insuranceAccountDetailPO;
}
/**
* 对比新旧两份数据并更新数据
*/
private Map<String, String> checkJsonMap(Map<String, String> newMap, String oldJson) {
Map<String, String> oldMap = JSON.parseObject(oldJson, HashMap.class);
//校验newMap中的value值是否为整数或者小数
for(Map.Entry<String, String> newEntry : newMap.entrySet()) {
String newValue = newEntry.getValue();
int l = newValue.length();
if (newValue.length() > 0 && !isNumeric(newValue)) {
throw new SalaryRunTimeException("请检查导入Excel中个人或单位对应的福利项数值是否为整数或小数");
}
}
if (oldMap == null) {
return newMap;
}
//保留oldMap无变动数据更新newMap已变动数据
for (Map.Entry<String, String> oldEntry : oldMap.entrySet()) {
if (!newMap.containsKey(oldEntry.getKey())) {
newMap.put(oldEntry.getKey(), oldEntry.getValue());
} else if (newMap.containsKey(oldEntry.getKey()) && "".equals(newMap.get(oldEntry.getKey()))) {
newMap.put(oldEntry.getKey(), oldEntry.getValue());
}
}
return newMap;
2022-09-02 11:53:38 +08:00
}
/**
* 判断字符串是否为整数或者小数或者负数
*/
public static boolean isNumeric(String str){
// Pattern pattern = Pattern.compile("[0-9]*\\.?[0-9]+");
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
2022-09-02 11:53:38 +08:00
/**
* 校验福利核算的账单月份输入格式是否正确
*/
public boolean checkBillMonth(String billMonth) {
//校验内容billMonth的长度是否为7、年月连接符是否为“-”
String connector;
2022-09-02 11:53:38 +08:00
if(billMonth.length() == 7){
connector = billMonth.substring(4,5);
return "-".equals(connector);
} else {
return false;
}
}
/**
* 导出福利核算-线下对比导入模板
*/
@Override
public XSSFWorkbook exportComparisonWelfareTemplate(InsuranceAcctDetailImportTemplateParam param) {
List<ICategoryPO> listAll = MapperProxyFactory.getProxy(ICategoryMapper.class).listAll();
List<ICategoryPO> socialWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 1).collect(Collectors.toList());
List<ICategoryPO> fundWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 2).collect(Collectors.toList());
List<ICategoryPO> otherWelfareList = listAll.stream().filter(e -> e.getWelfareType() == 3).collect(Collectors.toList());
List<Object> headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"),
SalaryI18nUtil.getI18nLabel(86185, "部门"),
SalaryI18nUtil.getI18nLabel(86186, "手机号"),
SalaryI18nUtil.getI18nLabel(86317, "工号"),
SalaryI18nUtil.getI18nLabel(86187, "员工状态"),
SalaryI18nUtil.getI18nLabel(100377, "数据来源"),
SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人"));
headerList.add(SalaryI18nUtil.getI18nLabel(91324, "社保账号"));
headerList.add(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"));
// "失业保险申报基数"
// "生育保险申报基数"
// "养老保险申报基数"
// "医疗保险申报基数"
// "工伤保险申报基数"
for (ICategoryPO po : socialWelfareList) {
headerList.add(po.getInsuranceName() + "申报基数");
}
headerList.add(SalaryI18nUtil.getI18nLabel(91486, "公积金账号"));
headerList.add(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"));
//组装公积金基数
for (ICategoryPO po : fundWelfareList) {
headerList.add(po.getInsuranceName() + "申报基数");
}
headerList.add(SalaryI18nUtil.getI18nLabel(91487, "补充公积金账号"));
headerList.add(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"));
//组装其他福利基数
for (ICategoryPO po : otherWelfareList) {
headerList.add(po.getInsuranceName() + "申报基数");
}
//社保个人(生育保险个人、工伤保险个人、失业保险个人、养老保险个人、医疗保险个人)
for (ICategoryPO po : socialWelfareList) {
headerList.add(po.getInsuranceName() + "个人");
}
headerList.add(SalaryI18nUtil.getI18nLabel(100388, "社保个人合计"));
//住房公积金个人、补充住房公积金个人
for (ICategoryPO po : fundWelfareList) {
headerList.add(po.getInsuranceName() + "个人");
}
headerList.add(SalaryI18nUtil.getI18nLabel(100390, "公积金个人合计"));
//其他个人(比如企业年金个人)
for (ICategoryPO po : otherWelfareList) {
headerList.add(po.getInsuranceName() + "个人");
}
headerList.add(SalaryI18nUtil.getI18nLabel(100392, "其他福利个人合计"));
headerList.add(SalaryI18nUtil.getI18nLabel(100393, "个人合计"));
//社保单位(生育保险单位、工伤保险单位、失业保险单位、养老保险单位、医疗保险单位)
for (ICategoryPO po : socialWelfareList) {
headerList.add(po.getInsuranceName() + "单位");
}
headerList.add(SalaryI18nUtil.getI18nLabel(100394, "社保单位合计"));
//住房公积金单位、补充住房公积金单位
for (ICategoryPO po : fundWelfareList) {
headerList.add(po.getInsuranceName() + "单位");
}
headerList.add(SalaryI18nUtil.getI18nLabel(100395, "公积金单位合计"));
//其他单位(比如企业年金单位)
for (ICategoryPO po : otherWelfareList) {
headerList.add(po.getInsuranceName() + "单位");
}
headerList.add(SalaryI18nUtil.getI18nLabel(100396, "其他福利单位合计"));
headerList.add(SalaryI18nUtil.getI18nLabel(100397, "单位合计"));
headerList.add(SalaryI18nUtil.getI18nLabel(100398, "社保合计"));
headerList.add(SalaryI18nUtil.getI18nLabel(100399, "公积金合计"));
headerList.add(SalaryI18nUtil.getI18nLabel(100400, "其他福利合计"));
headerList.add(SalaryI18nUtil.getI18nLabel(93278, "合计"));
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
String sheetName = "福利核算-线下对比导入模板";
return ExcelUtil.genWorkbookV2(rows, sheetName);
}
/**
* 将通过福利核算-线下对比导入模板导入的数据更新到hrsa_excel_bill_detail表中
*/
@Override
public Map<String, Object> importExcelInsuranceDetail(ExcelInsuranceImportParam importParam) {
Map<String, Object> apidatas = new HashMap<String, Object>();
EmployBiz employBiz = new EmployBiz();
//查询对于人员信息导入筛选的全局配置
SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode");
String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0";
//检验参数
//excel文件id
String imageId = Util.null2String(importParam.getImageId());
if (StringUtils.isBlank(imageId)) {
throw new SalaryRunTimeException("文件不存在");
}
// 获取租户下所有的人员
List<DataCollectionEmployee> salaryEmployees = employBiz.listEmployee();
// 失败的数量
int failCount = 0;
// 成功的数量
int successCount = 0;
InputStream fileInputStream = null;
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(importParam.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
// 错误提示信息
List<Map> excelComments = Lists.newArrayList();
// 存在错误的那行数据
List<Map<String, Object>> errorDatas = Lists.newArrayList();
// 表头
List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
// 处理数值
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
if (CollectionUtils.isEmpty(headers)) {
throw new SalaryRunTimeException("表头为空");
}
if (CollectionUtils.isEmpty(data)) {
throw new SalaryRunTimeException("无数据");
}
String billMonth = importParam.getBillMonth();
//存储待更新的InsuranceAccountDetailPO数据
List<ExcelInsuranceDetailPO> addCompareList = new ArrayList<>();
//记录待删除hrsa_excel_bill_detail.id
List<Long> idList = new ArrayList<>();
//遍历excel表具体数据
for (int i = 0; i < data.size(); i++) {
String row = "" + (i + 2) + "";
boolean isError = false;
Map<String, Object> map = data.get(i);
Long employeeId = 0L;
List<ExcelInsuranceDetailPO> list = new ArrayList<>();
String taxAgentName = (String) map.getOrDefault("个税扣缴义务人", "");
Long paymentOrganization = 0L;
List<TaxAgentPO> taxAgentPoList = getTaxAgentMapper().listByName(taxAgentName);
if (taxAgentPoList.size() == 1) {
paymentOrganization = taxAgentPoList.get(0).getId();
} else {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人")));
excelComments.add(errorMessageMap);
}
//遍历表头
for (int j = 0; j < headers.size(); j++) {
String header = headers.get(j);
String dataKey = header;
if (dataKey == null) {
continue;
}
String dataValue = (String) map.getOrDefault(dataKey.toString(), "");
String deparmentName = (String) map.getOrDefault("部门", "");
String mobile = (String) map.getOrDefault("手机号", "");
String workcode = (String) map.getOrDefault("工号", "");
if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) {
//当人员信息导入筛选的全局配置为"0"时,姓名才是必填项
if (StringUtils.isEmpty(dataValue) && "0".equals(confValue)) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"));
excelComments.add(errorMessageMap);
} else {
//筛选导入人员信息可以在人力资源池中匹配到的人员信息
List<DataCollectionEmployee> employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, dataValue, deparmentName, mobile, workcode, null);
if (CollectionUtils.isEmpty(employeeSameIds)) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"));
excelComments.add(errorMessageMap);
} else if (employeeSameIds.size() > 1) {
//存在离职和在职状态取在职状态
employeeSameIds = employeeSameIds.stream()
.filter(e -> UserStatusEnum.getNormalStatus().contains(e.getStatus()))
.collect(Collectors.toList());
if (employeeSameIds.size() != 1) {
isError = true;
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + "员工信息不存在或者存在多个员工");
excelComments.add(errorMessageMap);
} else {
employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 ? employeeSameIds.get(0).getEmployeeId() : null;
}
} else {
employeeId = employeeSameIds.get(0).getEmployeeId();
}
}
}
}
if (!isError){
List<Long> employeeIds = new ArrayList<>();
employeeIds.add(employeeId);
//根据员工id、个税扣缴义务人id、账单月份查询如果当前对比表中存在数据则记录为待删除数据
list = getExcelInsuranceDetailMapper().queryCompareList(billMonth, paymentOrganization, employeeIds.get(0));
if (!list.isEmpty()) {
List<Long> ids = list.stream().map(ExcelInsuranceDetailPO::getId)
.collect(Collectors.toList());
idList.addAll(ids);
}
//拼装待更新数据
addCompareList.add(handleExcelInsuranceDetail(billMonth, employeeId, paymentOrganization, map));
}
if (isError) {
failCount++;
errorDatas.add(map);
} else {
successCount++;
}
}
//将待更新列表加密
ExcelInsuranceDetailPOEncrypt.encryptInsuranceAccountDetailPOList(addCompareList);
//删除
if (idList.size() > 0) {
getExcelInsuranceDetailMapper().batchDelByIds(idList);
}
//新增
getExcelInsuranceDetailMapper().batchSave(addCompareList);
apidatas.put("successCount", successCount);
apidatas.put("errorCount", failCount);
apidatas.put("errorData", excelComments);
} finally {
IOUtils.closeQuietly(fileInputStream);
}
return apidatas;
}
/**
* 将excel导入的数据行组装成ExcelInsuranceDetailPO对象
* @param billMonth 对比的账单月份
* @param baseMap excel导入的对比数据
*/
private ExcelInsuranceDetailPO handleExcelInsuranceDetail(String billMonth, Long employeeId, Long paymentOrganization, Map<String, Object> baseMap) {
ExcelInsuranceDetailPO excelInsuranceDetailPO = new ExcelInsuranceDetailPO();
excelInsuranceDetailPO.setId(IdGenerator.generate());
//组装json数据,格式Map<String, Object>
Map<String, String> socialPerMap = new HashMap<>();
Map<String, String> fundPerMap = new HashMap<>();
Map<String, String> otherPerMap = new HashMap<>();
Map<String, String> socialComMap = new HashMap<>();
Map<String, String> fundComMap = new HashMap<>();
Map<String, String> otherComMap = new HashMap<>();
//组装福利基数
Map<String, String> socialPaymentBaseMap = new HashMap<>();
Map<String, String> fundPaymentBaseMap = new HashMap<>();
Map<String, String> otherPaymentBaseMap = new HashMap<>();
//筛选出福利核算项
Map<String, Object> toDealMap =
baseMap.entrySet().stream()
.filter(map -> !"姓名".equals(map.getKey())
&& !"部门".equals(map.getKey())
&& !"手机号".equals(map.getKey())
&& !"个税扣缴义务人".equals(map.getKey())
&& !"员工状态".equals(map.getKey())
&& !"数据来源".equals(map.getKey())
&& !"工号".equals(map.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
for(Map.Entry<String, Object> entry : toDealMap.entrySet()) {
//判断元素是否属于福利类
String keyName = entry.getKey();
//获取元素名后缀,方便之后判断“个人”或“单位”或者“基数”
String payScope = keyName.substring(keyName.length() - 2);
//获取福利类型
Integer welfareType;
//根据元素名后缀,区分截取内容
String targetWelfareName;
if ("基数".equals(payScope)) {
targetWelfareName = entry.getKey().substring(0, keyName.length() - 4);
} else {
targetWelfareName = entry.getKey().substring(0, keyName.length() - 2);
}
List<ICategoryPO> categoryPOList = siCategoryBiz.listByName(targetWelfareName);
if (categoryPOList.size() == 1) {
ICategoryPO iCategoryPO = categoryPOList.get(0);
welfareType = iCategoryPO.getWelfareType();
switch (payScope) {
case "个人":
switch (welfareType) {
case 1:
socialPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
case 2:
fundPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
case 3:
otherPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
default:
throw new SalaryRunTimeException("福利类型不存在");
}
break;
case "单位":
switch (welfareType) {
case 1:
socialComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
case 2:
fundComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
case 3:
otherComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
default:
throw new SalaryRunTimeException("福利类型不存在");
}
break;
case "基数":
switch (welfareType) {
case 1:
socialPaymentBaseMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
case 2:
fundPaymentBaseMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
case 3:
otherPaymentBaseMap.put(iCategoryPO.getId().toString(), entry.getValue().toString());
break;
default:
throw new SalaryRunTimeException("福利类型不存在");
}
break;
}
}
}
//设置社保个人和公司缴纳明细
excelInsuranceDetailPO.setSocialPerJson(JSON.toJSONString(socialPerMap));
excelInsuranceDetailPO.setSocialComJson(JSON.toJSONString(socialComMap));
//设置公积金个人和公司缴纳明细
excelInsuranceDetailPO.setFundPerJson(JSON.toJSONString(fundPerMap));
excelInsuranceDetailPO.setFundComJson(JSON.toJSONString(fundComMap));
//设置其他福利个人和公司缴纳明细
excelInsuranceDetailPO.setOtherPerJson(JSON.toJSONString(otherPerMap));
excelInsuranceDetailPO.setOtherComJson(JSON.toJSONString(otherComMap));
//设置社保、公积金、其他福利缴纳基数
excelInsuranceDetailPO.setSocialPaymentBaseString(JSON.toJSONString(socialPaymentBaseMap));
excelInsuranceDetailPO.setFundPaymentBaseString(JSON.toJSONString(fundPaymentBaseMap));
excelInsuranceDetailPO.setOtherPaymentBaseString(JSON.toJSONString(otherPaymentBaseMap));
//组装新的insuranceAccountDetailPO对象数据
excelInsuranceDetailPO.setEmployeeId(employeeId);
excelInsuranceDetailPO.setBillMonth(billMonth);
excelInsuranceDetailPO.setBillStatus(1);
excelInsuranceDetailPO.setPaymentStatus(0);
excelInsuranceDetailPO.setResourceFrom(1);
excelInsuranceDetailPO.setSocialAccount(baseMap.getOrDefault("社保账号", "").toString());
if (baseMap.getOrDefault("社保方案名称", "") != null) {
List<InsuranceSchemePO> socialSchemeList = getInsuranceSchemeMapper().listByName(baseMap.get("社保方案名称").toString());
if (socialSchemeList.size() == 1) {
//设置社保方案id
excelInsuranceDetailPO.setSocialSchemeId(socialSchemeList.get(0).getId());
}
}
excelInsuranceDetailPO.setFundAccount(baseMap.getOrDefault("公积金账号", "").toString());
excelInsuranceDetailPO.setSupplementFundAccount(baseMap.getOrDefault("补充公积金账号", "").toString());
if (baseMap.getOrDefault("公积金方案名称", "") != null) {
List<InsuranceSchemePO> fundSchemeList = getInsuranceSchemeMapper().listByName(baseMap.get("公积金方案名称").toString());
if (fundSchemeList.size() == 1) {
//设置公积金方案id
excelInsuranceDetailPO.setFundSchemeId(fundSchemeList.get(0).getId());
}
}
if (baseMap.getOrDefault("其他福利方案名称", "") != null) {
List<InsuranceSchemePO> otherSchemeList = getInsuranceSchemeMapper().listByName(baseMap.get("其他福利方案名称").toString());
if (otherSchemeList.size() == 1) {
//其他福利方案id
excelInsuranceDetailPO.setOtherSchemeId(otherSchemeList.get(0).getId());
}
}
excelInsuranceDetailPO.setSocialPerSum(baseMap.getOrDefault("社保个人合计", "").toString());
excelInsuranceDetailPO.setFundPerSum(baseMap.getOrDefault("公积金个人合计", "").toString());
excelInsuranceDetailPO.setOtherPerSum(baseMap.getOrDefault("其他福利个人合计", "").toString());
excelInsuranceDetailPO.setPerSum(baseMap.getOrDefault("个人合计", "").toString());
excelInsuranceDetailPO.setSocialComSum(baseMap.getOrDefault("社保单位合计", "").toString());
excelInsuranceDetailPO.setFundComSum(baseMap.getOrDefault("公积金单位合计", "").toString());
excelInsuranceDetailPO.setOtherComSum(baseMap.getOrDefault("其他福利单位合计", "").toString());
excelInsuranceDetailPO.setComSum(baseMap.getOrDefault("单位合计", "").toString());
excelInsuranceDetailPO.setSocialSum(baseMap.getOrDefault("社保合计", "").toString());
excelInsuranceDetailPO.setFundSum(baseMap.getOrDefault("公积金合计", "").toString());
excelInsuranceDetailPO.setOtherSum(baseMap.getOrDefault("其他福利合计", "").toString());
excelInsuranceDetailPO.setTotal(baseMap.getOrDefault("合计", "").toString());
excelInsuranceDetailPO.setCreator((long) user.getUID());
excelInsuranceDetailPO.setCreateTime(new Date());
excelInsuranceDetailPO.setUpdateTime(new Date());
excelInsuranceDetailPO.setDeleteType(0);
excelInsuranceDetailPO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY);
excelInsuranceDetailPO.setPaymentOrganization(paymentOrganization);
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 = encryptUtil.decrypt(batchPO, InsuranceAccountBatchPO.class);
//更新
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 = encryptUtil.encrypt(batchPO, InsuranceAccountBatchPO.class);
getInsuranceAccountBatchMapper().updateById(batchPO);
}
}
}
});
}
/**
* 将通过id获取InsuranceAccountDetailPO中的社保公积金其他福利个人和公司缴纳数据
*/
@Override
public Map<String, Object> getPaymentById(Long id) {
InsuranceAccountDetailPO insuranceAccountDetailPO = getInsuranceAccountDetailMapper().getById(id);
if (insuranceAccountDetailPO == null) {
throw new SalaryRunTimeException("该条核算数据不存在!");
}
InsuranceAccountDetailPOEncrypt.decryptItem(insuranceAccountDetailPO);
String socialPerJson = insuranceAccountDetailPO.getSocialPerJson();
String socialComJson = insuranceAccountDetailPO.getSocialComJson();
String fundPerJson = insuranceAccountDetailPO.getFundPerJson();
String fundComJson = insuranceAccountDetailPO.getFundComJson();
String otherPerJson = insuranceAccountDetailPO.getOtherPerJson();
String otherComJson = insuranceAccountDetailPO.getOtherComJson();
Map<String, String> dataMap = new HashMap<>();
List<SearchConditionGroup> addGroups = new ArrayList<>();
getPaymentGroup(socialPerJson, "个人", "社保", dataMap, addGroups);
getPaymentGroup(socialComJson, "公司", "社保", dataMap, addGroups);
getPaymentGroup(fundPerJson, "个人", "公积金", dataMap, addGroups);
getPaymentGroup(fundComJson, "公司", "公积金", dataMap, addGroups);
getPaymentGroup(otherPerJson, "个人", "其他福利", dataMap, addGroups);
getPaymentGroup(otherComJson, "公司", "其他福利", dataMap, addGroups);
Map<String, Object> resultMap = new HashMap<>();
// resultMap.put("data", dataMap);
// resultMap.put("items", addGroups);
List<Map<String, String>> perList = new ArrayList<>();
List<Map<String, String>> comList = new ArrayList<>();
for (SearchConditionGroup group : addGroups) {
if (group.getItems() != null && group.getItems().size() > 0) {
for (SearchConditionItem item : group.getItems()) {
Map<String, String> map = new HashMap<>();
String[] domkey = item.getDomkey();
String insuranceId = domkey[0].substring(3);
if (group.getTitle().contains("个人")) {
map.put("title", group.getTitle());
map.put("paymentScope", "个人");
map.put("insuranceName", item.getLabel());
map.put("insuranceId", insuranceId);
map.put("insuranceValue", dataMap.get(domkey[0]));
perList.add(map);
} else if (group.getTitle().contains("公司")) {
map.put("title", group.getTitle());
map.put("paymentScope", "公司");
map.put("insuranceName", item.getLabel());
map.put("insuranceId", insuranceId);
map.put("insuranceValue", dataMap.get(domkey[0]));
comList.add(map);
}
}
}
}
List<Map<String, String>> resultList = new ArrayList<>();
resultList.addAll(perList);
resultList.addAll(comList);
resultMap.put("data", resultList);
return resultMap;
}
public void getPaymentGroup(String baseJson, String groupType, String welfareType, Map<String, String> dataMap, List<SearchConditionGroup> addGroups) {
if (StringUtils.isBlank(baseJson)) {
addGroups.add(new SearchConditionGroup(welfareType + groupType +"缴纳", true, null));
return;
}
String groupPrefix = "个人".equals(groupType) ? "per" : "com";
Map<String, String> toDealMap = JSON.parseObject(baseJson, new HashMap<String, String>().getClass());
Map<String, String> baseJsonMap = new HashMap<>();
List<SearchConditionItem> inputItems = new ArrayList<>();
for (Map.Entry<String, String> entry : toDealMap.entrySet()) {
//获取福利项信息
ICategoryPO iCategoryPO = siCategoryBiz.getByID(Long.valueOf(entry.getKey()));
if (iCategoryPO != null) {
String name = groupPrefix + iCategoryPO.getId().toString();
String label = iCategoryPO.getInsuranceName();
inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, label, name));
}
baseJsonMap.put(groupPrefix + entry.getKey(), entry.getValue());
}
dataMap.putAll(baseJsonMap);
addGroups.add(new SearchConditionGroup(welfareType + groupType +"缴纳", true, inputItems));
}
/**
* 编辑InsuranceAccountDetailPO中的社保公积金其他福利个人和公司缴纳数据
*/
@Override
public void editAccount(EditAccountDetailParam param) {
InsuranceAccountDetailPO insuranceAccountDetailPO = getInsuranceAccountDetailMapper().getById(param.getId());
if (insuranceAccountDetailPO == null) {
throw new SalaryRunTimeException("该条核算数据不存在!");
}
InsuranceAccountDetailPOEncrypt.decryptItem(insuranceAccountDetailPO);
accountSocialByData(insuranceAccountDetailPO, param);
accountFundByData(insuranceAccountDetailPO, param);
accountOtherByData(insuranceAccountDetailPO, param);
account(insuranceAccountDetailPO);
InsuranceAccountDetailPOEncrypt.encryptItem(insuranceAccountDetailPO);
getInsuranceAccountDetailMapper().updateById(insuranceAccountDetailPO);
//刷新_bill_batch表中的统计信息
refreshBillBatch(insuranceAccountDetailPO.getPaymentOrganization(), insuranceAccountDetailPO.getBillMonth());
}
public void accountFundByData(InsuranceAccountDetailPO insuranceAccountDetailPO, EditAccountDetailParam baseParam) {
//公积金个人
if (StringUtils.isNotBlank(baseParam.getFundPerJson())) {
List<BigDecimal> fundPer = new ArrayList<>();
HashMap<String, String> fundPerson = JSON.parseObject(baseParam.getFundPerJson(), new HashMap<String, String>().getClass());
fundPerson.forEach((k, v) -> {
BigDecimal result = new BigDecimal(v);
fundPer.add(result);
});
insuranceAccountDetailPO.setFundPerJson(baseParam.getFundPerJson());
BigDecimal fundPerSum = new BigDecimal("0");
for (BigDecimal bigDecimal : fundPer) {
fundPerSum = fundPerSum.add(bigDecimal);
}
insuranceAccountDetailPO.setFundPerSum(fundPerSum.toPlainString());
}
//公积金单位
if (StringUtils.isNotBlank(baseParam.getFundComJson())) {
List<BigDecimal> fundCom = new ArrayList<>();
HashMap<String, String> fundComMap = JSON.parseObject(baseParam.getFundComJson(), new HashMap<String, String>().getClass());
fundComMap.forEach((k, v) -> {
BigDecimal result = new BigDecimal(v);
fundCom.add(result);
});
insuranceAccountDetailPO.setFundComJson(baseParam.getFundComJson());
BigDecimal fundComSum = new BigDecimal("0");
for (BigDecimal bigDecimal : fundCom) {
fundComSum = fundComSum.add(bigDecimal);
}
insuranceAccountDetailPO.setFundComSum(fundComSum.toPlainString());
}
}
public void accountOtherByData(InsuranceAccountDetailPO insuranceAccountDetailPO, EditAccountDetailParam baseParam) {
//其他福利个人
if (StringUtils.isNotBlank(baseParam.getOtherPerJson())) {
List<BigDecimal> otherPer = new ArrayList<>();
HashMap<String, String> otherPerMap = JSON.parseObject(baseParam.getOtherPerJson(), new HashMap<String, String>().getClass());
otherPerMap.forEach((k, v) -> {
BigDecimal result = new BigDecimal(v);
otherPer.add(result);
});
insuranceAccountDetailPO.setOtherPerJson(baseParam.getOtherPerJson());
BigDecimal otherPerSum = new BigDecimal("0");
for (BigDecimal bigDecimal : otherPer) {
otherPerSum = otherPerSum.add(bigDecimal);
}
insuranceAccountDetailPO.setOtherPerSum(otherPerSum.toPlainString());
}
//其他福利单位
if (StringUtils.isNotBlank(baseParam.getOtherComJson())) {
List<BigDecimal> otherCom = new ArrayList<>();
HashMap<String, String> otherComMap = JSON.parseObject(baseParam.getOtherComJson(), new HashMap<String, String>().getClass());
otherComMap.forEach((k, v) -> {
BigDecimal result = new BigDecimal(v);
otherCom.add(result);
});
insuranceAccountDetailPO.setOtherComJson(baseParam.getOtherComJson());
BigDecimal otherComSum = new BigDecimal("0");
for (BigDecimal bigDecimal : otherCom) {
otherComSum = otherComSum.add(bigDecimal);
}
insuranceAccountDetailPO.setOtherComSum(otherComSum.toPlainString());
}
}
public void accountSocialByData(InsuranceAccountDetailPO insuranceAccountDetailPO, EditAccountDetailParam baseParam) {
//社保个人
if (StringUtils.isNotBlank(baseParam.getSocialPerJson())) {
List<BigDecimal> socialPer = new ArrayList<>();
HashMap<String, String> archivesPerson = JSON.parseObject(baseParam.getSocialPerJson(), new HashMap<String, String>().getClass());
archivesPerson.forEach((k, v) -> {
BigDecimal result = new BigDecimal(v);
socialPer.add(result);
});
insuranceAccountDetailPO.setSocialPerJson(baseParam.getSocialPerJson());
BigDecimal socialPerSum = new BigDecimal("0");
for (BigDecimal bigDecimal : socialPer) {
socialPerSum = socialPerSum.add(bigDecimal);
}
insuranceAccountDetailPO.setSocialPerSum(socialPerSum.toPlainString());
}
//社保单位
if (StringUtils.isNotBlank(baseParam.getSocialComJson())) {
List<BigDecimal> socialCom = new ArrayList<>();
HashMap<String, String> archivesCom = JSON.parseObject(baseParam.getSocialComJson(), new HashMap<String, String>().getClass());
archivesCom.forEach((k, v) -> {
BigDecimal result = new BigDecimal(v);
socialCom.add(result);
});
insuranceAccountDetailPO.setSocialComJson(baseParam.getSocialComJson());
BigDecimal socialComSum = new BigDecimal("0");
for (BigDecimal bigDecimal : socialCom) {
socialComSum = socialComSum.add(bigDecimal);
}
insuranceAccountDetailPO.setSocialComSum(socialComSum.toPlainString());
}
}
public InsuranceAccountDetailPO account(InsuranceAccountDetailPO insuranceAccountDetailPO) {
//个人合计
BigDecimal socialPerson =
StringUtils.isBlank(insuranceAccountDetailPO.getSocialPerSum()) ? new BigDecimal("0") : new BigDecimal(insuranceAccountDetailPO.getSocialPerSum());
BigDecimal fundPerson =
StringUtils.isBlank(insuranceAccountDetailPO.getFundPerSum()) ? new BigDecimal("0") : new BigDecimal(insuranceAccountDetailPO.getFundPerSum());
BigDecimal otherPerson =
StringUtils.isBlank(insuranceAccountDetailPO.getOtherPerSum()) ? new BigDecimal("0") : new BigDecimal(insuranceAccountDetailPO.getOtherPerSum());
BigDecimal perSum = socialPerson.add(fundPerson).add(otherPerson);
insuranceAccountDetailPO.setPerSum(perSum.toPlainString());
//单位合计
BigDecimal socialCom =
StringUtils.isBlank(insuranceAccountDetailPO.getSocialComSum()) ? new BigDecimal("0") : new BigDecimal(insuranceAccountDetailPO.getSocialComSum());
BigDecimal fundCom = StringUtils.isBlank(insuranceAccountDetailPO.getFundComSum()) ? new BigDecimal("0") : new BigDecimal(insuranceAccountDetailPO.getFundComSum());
BigDecimal otherCom =
StringUtils.isBlank(insuranceAccountDetailPO.getOtherComSum()) ? new BigDecimal("0") : new BigDecimal(insuranceAccountDetailPO.getOtherComSum());
BigDecimal comSum = socialCom.add(fundCom).add(otherCom);
insuranceAccountDetailPO.setComSum(comSum.toPlainString());
//社保合计
insuranceAccountDetailPO.setSocialSum(socialPerson.add(socialCom).toPlainString());
//公积金合计
insuranceAccountDetailPO.setFundSum(fundPerson.add(fundCom).toPlainString());
//其他福利合计
insuranceAccountDetailPO.setOtherSum(otherPerson.add(otherCom).toPlainString());
//合计
insuranceAccountDetailPO.setTotal(perSum.add(comSum).toPlainString());
return insuranceAccountDetailPO;
}
2022-04-11 19:07:35 +08:00
}