diff --git a/src/com/engine/salary/constant/SalaryItemConstant.java b/src/com/engine/salary/constant/SalaryItemConstant.java
index 26bac736b..a1f0d9a1b 100644
--- a/src/com/engine/salary/constant/SalaryItemConstant.java
+++ b/src/com/engine/salary/constant/SalaryItemConstant.java
@@ -25,5 +25,10 @@ public class SalaryItemConstant {
*/
public static final String RESULT_EXPORT_FIELD_SIGN="_salaryAcctResultExportFieldSign";
+ /**
+ * 个税申报在线对比缓存表头字段key
+ */
+ public static final String TAX_DECLARE_CONTRAST_FIELD_SIGN="_taxDeclareContrastFieldSign";
+
}
diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxReportColumnDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxReportColumnDTO.java
new file mode 100644
index 000000000..aa55a89f0
--- /dev/null
+++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxReportColumnDTO.java
@@ -0,0 +1,37 @@
+package com.engine.salary.entity.taxdeclaration.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 个税申报表表头
+ *
Copyright: Copyright (c) 2023
+ * Company: 泛微软件
+ *
+ * @author qiantao
+ * @version 1.0
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TaxReportColumnDTO {
+
+ /**
+ * 主键id
+ */
+ private Long id;
+
+ /**
+ * 申报表的列名
+ */
+ private String reportColumnName;
+
+ /**
+ * 申报表的列索引
+ */
+ private String reportColumnDataIndex;
+
+}
diff --git a/src/com/engine/salary/entity/taxdeclaration/param/ContrastQueryParam.java b/src/com/engine/salary/entity/taxdeclaration/param/ContrastQueryParam.java
index e1a24429e..7fa470450 100644
--- a/src/com/engine/salary/entity/taxdeclaration/param/ContrastQueryParam.java
+++ b/src/com/engine/salary/entity/taxdeclaration/param/ContrastQueryParam.java
@@ -3,6 +3,8 @@ package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.common.BaseQueryParam;
import lombok.Data;
+import java.util.List;
+
/**
* 对比查询
* Copyright: Copyright (c) 2023
@@ -28,4 +30,9 @@ public class ContrastQueryParam extends BaseQueryParam {
* 是否只显示差异项
*/
private boolean onlyShowDiffItem;
+
+ /**
+ * 筛选对比项目
+ */
+ private List columns;
}
diff --git a/src/com/engine/salary/service/TaxDeclarationValueService.java b/src/com/engine/salary/service/TaxDeclarationValueService.java
index 89de2d361..8fabdd5d7 100644
--- a/src/com/engine/salary/service/TaxDeclarationValueService.java
+++ b/src/com/engine/salary/service/TaxDeclarationValueService.java
@@ -1,6 +1,7 @@
package com.engine.salary.service;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO;
+import com.engine.salary.entity.taxdeclaration.dto.TaxReportColumnDTO;
import com.engine.salary.entity.taxdeclaration.param.ContrastQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam;
@@ -8,6 +9,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO;
import com.engine.salary.util.page.PageInfo;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.Collection;
import java.util.List;
@@ -94,10 +96,27 @@ public interface TaxDeclarationValueService {
*/
Map contrast(ContrastQueryParam param);
+ /**
+ * 在线对比表头列表
+ * @param param
+ */
+ Map> contrastHeaderList(ContrastQueryParam param);
+
+ /**
+ * 缓存在线对比表头列表
+ * @param columnIndex
+ */
+ void cacheContrastHeader(List columnIndex);
+
+ /**
+ * 导出在线对比
+ */
+ XSSFWorkbook exportContrast(ContrastQueryParam param);
/**
* 根据主键删除
* @param deleteId
*/
void deleteById(Long deleteId);
+
}
diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java
index 913dfdf7b..9465f88c8 100644
--- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java
+++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java
@@ -1,10 +1,12 @@
package com.engine.salary.service.impl;
import cn.hutool.core.util.NumberUtil;
+import com.cloudstore.dev.api.util.Util_DataCache;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
+import com.engine.salary.constant.SalaryItemConstant;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
@@ -12,6 +14,7 @@ import com.engine.salary.entity.extemp.po.ExtEmpPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationValueList;
import com.engine.salary.entity.taxdeclaration.dto.ContrastListDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO;
+import com.engine.salary.entity.taxdeclaration.dto.TaxReportColumnDTO;
import com.engine.salary.entity.taxdeclaration.param.ContrastQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam;
@@ -33,15 +36,17 @@ import com.engine.salary.service.*;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryEnumUtil;
+import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
+import com.engine.salary.util.excel.ExcelUtilPlus;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.engine.salary.util.db.IdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.general.Util;
import weaver.hrm.User;
@@ -321,6 +326,22 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
// 查询个税申报表表头
IncomeCategoryEnum incomeCategoryEnum = SalaryEnumUtil.enumMatchByValue(taxDeclaration.getIncomeCategory(), IncomeCategoryEnum.class);
List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum);
+ // 筛选表头
+ // 获取缓存中保存的设置
+ String cacheKey = user.getUID() + SalaryItemConstant.TAX_DECLARE_CONTRAST_FIELD_SIGN;
+ String cacheValue = (String) Util_DataCache.getObjVal(cacheKey);
+ List selectedItems = JsonUtil.parseList(cacheValue, String.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, String.class);
+ if (CollectionUtils.isNotEmpty(selectedItems)) {
+ Map columnMap = SalaryEntityUtil.convert2Map(taxReportColumns, TaxReportColumnPO::getReportColumnDataIndex);
+ List finalColumn = new ArrayList<>();
+ selectedItems.stream().forEach(index -> {
+ TaxReportColumnPO c = columnMap.get(index);
+ if (c!=null) {
+ finalColumn.add(c);
+ }
+ });
+ taxReportColumns = finalColumn;
+ }
List columns = SalaryEntityUtil.properties(taxReportColumns, TaxReportColumnPO::getReportColumnName, Collectors.toList());
// 人员id
Set employeeIds = SalaryEntityUtil.properties(taxDeclarationValues, TaxDeclarationValuePO::getEmployeeId);
@@ -370,6 +391,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
for (Map local : localList) {
AtomicBoolean hasDiff = new AtomicBoolean(false);
Map result = new HashMap<>();
+ result.put("工号", local.get("jobNum"));
result.put("姓名", local.get("姓名"));
result.put("证件类型", local.get("证件类型"));
result.put("证件号码", local.get("证件号码"));
@@ -413,6 +435,72 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
return resultList;
}
+ @Override
+ public Map> contrastHeaderList(ContrastQueryParam param) {
+ Map> resultMap = new HashMap<>();
+ TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId());
+ if (taxDeclaration == null) {
+ throw new SalaryRunTimeException("无申报表");
+ }
+ // 查询个税申报表表头
+ IncomeCategoryEnum incomeCategoryEnum = SalaryEnumUtil.enumMatchByValue(taxDeclaration.getIncomeCategory(), IncomeCategoryEnum.class);
+ List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum);
+ List defaultDtoList = new ArrayList<>();
+ taxReportColumns.stream().forEach(po -> {defaultDtoList.add(TaxReportColumnDTO.builder().id(po.getId()).reportColumnName(po.getReportColumnName()).reportColumnDataIndex(po.getReportColumnDataIndex()).build());});
+ resultMap.put("defaultList",defaultDtoList);
+ // 获取缓存中保存的设置
+ String cacheKey = user.getUID() + SalaryItemConstant.TAX_DECLARE_CONTRAST_FIELD_SIGN;
+ String cacheValue = (String) Util_DataCache.getObjVal(cacheKey);
+ List selectedItems = JsonUtil.parseList(cacheValue, String.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, String.class);
+ if (CollectionUtils.isEmpty(selectedItems)) {
+ // 默认全选
+ resultMap.put("selectedList", defaultDtoList);
+ resultMap.put("unSelectedList", Collections.emptyList());
+ } else {
+ Map columnMap = SalaryEntityUtil.convert2Map(defaultDtoList, TaxReportColumnDTO::getReportColumnDataIndex);
+ List selectedColumn = new ArrayList<>();
+ selectedItems.stream().forEach(index -> {
+ TaxReportColumnDTO taxReportColumnDTO = columnMap.get(index);
+ if (taxReportColumnDTO != null) {
+ // 已选择的项目
+ selectedColumn.add(taxReportColumnDTO);
+ }
+ });
+ // 过滤出未选择的项目
+ List unSelectedList = defaultDtoList.stream().filter(po -> !selectedItems.contains(po.getReportColumnDataIndex())).collect(Collectors.toList());
+ resultMap.put("selectedList", selectedColumn);
+ resultMap.put("unSelectedList", unSelectedList);
+ }
+
+ return resultMap;
+ }
+
+ @Override
+ public void cacheContrastHeader(List columnIndex) {
+ String cacheKey = user.getUID() + SalaryItemConstant.TAX_DECLARE_CONTRAST_FIELD_SIGN;
+ Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(columnIndex));
+ }
+
+ @Override
+ public XSSFWorkbook exportContrast(ContrastQueryParam param) {
+ param.setPageSize(1000000000);
+ param.setCurrent(1);
+ // 获取线下对比结果
+ Map contrastMap = contrast(param);
+ List header = (List)contrastMap.get("columns");
+ PageInfo