From 0a54fe5f80b2abeb58a3e78f31864979161f402c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 14 Dec 2023 10:35:10 +0800 Subject: [PATCH 01/26] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TaxDeclareRecordDetailSaveParam.java | 64 +++++++++++++++++++ .../taxdeclaration/po/TaxReportColumnPO.java | 28 ++++---- .../impl/TaxDeclareRecordServiceImpl.java | 10 ++- .../salary/web/TaxDeclarationController.java | 31 ++++++++- .../wrapper/TaxDeclareRecordWrapper.java | 40 ++++++++++-- 5 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java new file mode 100644 index 000000000..7744819ba --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java @@ -0,0 +1,64 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.annotation.TableTitle; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.util.Map; + +/** + * 个税申报明细保存 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +public class TaxDeclareRecordDetailSaveParam { + + //主键id + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + //个税申报记录id") + private Long taxDeclareRecordId; + + //个税申报表id") + private Long taxDeclarationId; + + //人员id + @JsonSerialize(using = ToStringSerializer.class) + private Long employeeId; + private Integer employeeType; + + @SalaryTableColumn( + text = "工号", width = "10%", column = "jobNum" + ) + @TableTitle(title ="工号",dataIndex = "jobNum",key = "jobNum") + private String jobNum; + + @SalaryTableColumn( + text = "姓名", width = "10%", column = "username" + ) + @TableTitle(title ="姓名",dataIndex = "username",key = "username") + private String username; + + @SalaryTableColumn( + text = "证件类型", width = "10%", column = "cardType" + ) + @TableTitle(title ="证件类型",dataIndex = "cardType",key = "cardType") + private String cardType; + + @SalaryTableColumn( + text = "证件号码", width = "10%", column = "cardNum" + ) + @TableTitle(title ="证件号码",dataIndex = "cardNum",key = "cardNum") + private String cardNum; + + private Map taxReportColumnValues; + + +} diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxReportColumnPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxReportColumnPO.java index 5e824dc48..a6591e714 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxReportColumnPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxReportColumnPO.java @@ -20,34 +20,34 @@ import java.util.Date; @Builder @AllArgsConstructor @NoArgsConstructor -//hrsa_tax_report_column") +//hrsa_tax_report_column public class TaxReportColumnPO { - //name = "主键id") + //name = 主键id private Long id; - //name = "报表类型") + //name = 报表类型 private String taxReportType; - //name = "所得项目") + //name = 所得项目 private String incomeCategory; - //name = "申报表的列名") + //name = 申报表的列名 private String reportColumnName; - //name = "申报表的列名多语言标签") + //name = 申报表的列名多语言标签 private Integer reportColumnLabel; - //name = "申报表的列索引") + //name = 申报表的列索引 private String reportColumnDataIndex; - //name = "数值类型") + //name = 数值类型 private String dataType; - //name = "个税对接时的参数key") + //name = 个税对接时的参数key private String requestParamKey; - //name = "租户key", ignore = true) + //name = 租户key private String tenantKey; - //name = "创建人id", ignore = true) + //name = 创建人id private Long creator; - //name = "是否删除", ignore = true) + //name = 是否删除 private Integer deleteType; - //name = "创建时间", ignore = true) + //name = 创建时间 private Date createTime; - //name = "更新时间", ignore = true) + //name = 更新时间 private Date updateTime; Collection ids; diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index ac6829f00..23606e23e 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -414,7 +414,15 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 薪资核算结果 Set salaryAcctEmployeeIdSet = SalaryEntityUtil.properties(incomeCategoryEntry.getValue(), SalaryAcctEmployeePO::getId); List> resultValues = salaryAcctEmployeeIdSet.stream().map(salaryAcctResultValueMap::get).filter(Objects::nonNull).collect(Collectors.toList()); - TaxDeclareContext taxDeclareContext = new TaxDeclareContext().setSalaryAcctRecordMap(salaryAcctRecordMap).setSalaryAcctEmployees(incomeCategoryEntry.getValue()).setSalaryAcctResultValues(salaryAcctResultValues).setTaxDeclaration(taxDeclaration).setSalarySobTaxReportRuleMap(salarySobTaxReportRuleMap).setSalarySobAddUpRuleMap(salarySobAddUpRuleMap).setTaxReportColumns(taxReportColumnMap.get(incomeCategoryEntry.getKey())).setSalaryItems(salaryItems); + TaxDeclareContext taxDeclareContext = new TaxDeclareContext() + .setSalaryAcctRecordMap(salaryAcctRecordMap) + .setSalaryAcctEmployees(incomeCategoryEntry.getValue()) + .setSalaryAcctResultValues(salaryAcctResultValues) + .setTaxDeclaration(taxDeclaration) + .setSalarySobTaxReportRuleMap(salarySobTaxReportRuleMap) + .setSalarySobAddUpRuleMap(salarySobAddUpRuleMap) + .setTaxReportColumns(taxReportColumnMap.get(incomeCategoryEntry.getKey())) + .setSalaryItems(salaryItems); TaxDeclarationStrategy taxDeclarationStrategy = new TaxDeclarationCommon(); TaxDeclarationGenerateResult generateResult = taxDeclarationStrategy.generate(taxDeclareContext, (long) user.getUID()); taxDeclarationValues.addAll(generateResult.getTaxDeclarationValues()); diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index f3e0a89e5..64fba69e2 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -229,7 +229,7 @@ public class TaxDeclarationController { try { User user = HrmUserVarify.getUser(request, response); - XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(id ,requestId); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(id, requestId); String fileName = "申报内置算税结果-" + LocalDate.now(); try { fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); @@ -334,6 +334,35 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::refreshData, taxDeclareRecordParam.getTaxDeclareRecordId()); } + /** + * 新增表单 + * + * @param incomeCategory + * @return + */ + @GET + @Path("/getAddForm") + @Produces(MediaType.APPLICATION_JSON) + public String getAddForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "IncomeCategoryEnum") IncomeCategoryEnum incomeCategory) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getAddForm, incomeCategory); + } + + /** + * 新增 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/add") + @Produces(MediaType.APPLICATION_JSON) + public String add(@Context HttpServletRequest request, @Context HttpServletResponse response,TaxDeclareRecordDetailSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::add, param); + } + /** * 个税申报表详情列表 * diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index edd3900df..96c8e6ee6 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -3,13 +3,11 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; +import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.dto.*; -import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.*; import com.engine.salary.entity.taxdeclaration.po.*; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; @@ -89,6 +87,11 @@ public class TaxDeclareRecordWrapper extends Service { return ServiceUtil.getService(TaxDeclareFailServiceImpl.class, user); } + private TaxReportColumnService getTaxReportColumnService(User user) { + return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user); + } + + /** * 个税申报记录列表 * @@ -463,11 +466,11 @@ public class TaxDeclareRecordWrapper extends Service { public Object getDeclareTaxResultFeedback(Long id) { - return getTaxDeclareRecordService(user).getDeclareTaxResultFeedback(id); + return getTaxDeclareRecordService(user).getDeclareTaxResultFeedback(id); } - public XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id,String requestId) { + public XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id, String requestId) { return getTaxDeclareRecordService(user).exportGetDeclareTaxResultFeedback(id, requestId); } @@ -660,4 +663,29 @@ public class TaxDeclareRecordWrapper extends Service { return getTaxDeclarationExcelService(user).exportEmployee4Fail(queryParam); } + public List getAddForm(IncomeCategoryEnum incomeCategoryEnum) { + // 查询个税申报表列 + List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum); + return taxReportColumns; + } + + public void add(TaxDeclareRecordDetailSaveParam param) { + + TaxDeclarationValuePO build = TaxDeclarationValuePO.builder() + .id(IdGenerator.generate()) + .taxDeclarationId(param.getTaxDeclarationId()) + .taxDeclareRecordId(param.getTaxDeclareRecordId()) + .employeeId(param.getEmployeeId()) + .employeeType(param.getEmployeeType()) + .resultValue(param.getTaxReportColumnValues()) + .createTime(new Date()) + .updateTime(new Date()) + .creator((long) user.getUID()) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + List objects = new ArrayList<>(); + objects.add(build); + getTaxDeclarationValueService(user).batchSave(objects); + } } From e97a35f158c77fb089a9d770cc54e4076714ea90 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 14 Dec 2023 15:57:55 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E8=A1=A5=E5=8F=91?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1=E6=9D=BF=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=B7=B2=E5=8F=91=E8=A1=A5=E5=8F=91=E9=A1=B9=E7=9B=AEfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java index 893b0d55e..cd7af96ba 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java @@ -167,6 +167,8 @@ public class SalaryTemplateBO { .id(String.valueOf(e.getSalaryItemId())) .salaryItemId(String.valueOf(e.getSalaryItemId())) .name(e.getName()) + .salaryItemShowName(e.getName()) + .originName(e.getName()) .sortedIndex(e.getSortedIndex()) .build() ); From d9c952e80c66280f502b4033ec391e862a4329bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 14 Dec 2023 17:55:48 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=A1=A8=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=96=B0=E5=A2=9E=E3=80=81=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/EmployeeDeclareListQueryParam.java | 1 + .../bo/TaxDeclarationDetailBO.java | 26 ++++- .../dto/TaxDeclareRecordDetailFormDTO.java | 76 +++++++++++++++ .../TaxDeclareRecordDetailFormParam.java | 21 ++++ .../TaxDeclareRecordDetailSaveParam.java | 32 +------ .../employeedeclare/EmployeeDeclareMapper.xml | 3 + .../service/TaxDeclarationValueService.java | 8 ++ .../impl/TaxDeclarationValueServiceImpl.java | 57 +++++++++++ .../salary/web/TaxDeclarationController.java | 61 ++++++++---- .../wrapper/TaxDeclareRecordWrapper.java | 95 +++++++++++++++---- 10 files changed, 309 insertions(+), 71 deletions(-) create mode 100644 src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java create mode 100644 src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailFormParam.java diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareListQueryParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareListQueryParam.java index e569ecbf1..27222c08f 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareListQueryParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareListQueryParam.java @@ -48,6 +48,7 @@ public class EmployeeDeclareListQueryParam extends BaseQueryParam { // 员工姓名/编号 private String keyword; + private Long employeeId; // 部门 private Collection departmentIds; diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationDetailBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationDetailBO.java index 81010fb7b..5b8454a82 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationDetailBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationDetailBO.java @@ -2,11 +2,9 @@ package com.engine.salary.entity.taxdeclaration.bo; import com.engine.salary.constant.TaxDeclarationDataIndexConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationAnnualListDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationEmployeeDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationWageListDTO; +import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationDetailPO; +import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -15,6 +13,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import java.util.*; +import java.util.stream.Collectors; /** * 个税申报表详情 @@ -177,4 +176,23 @@ public class TaxDeclarationDetailBO { } return taxDeclarationLaborListDTOS; } + + + public static List convert2ListTaxReportColumn(List pos) { + if (CollectionUtils.isEmpty(pos)) { + return Collections.emptyList(); + } + + List collect = pos.stream().map(po -> { + TaxDeclareRecordDetailFormDTO.TaxReportColumn taxReportColumn = new TaxDeclareRecordDetailFormDTO.TaxReportColumn(); + taxReportColumn.setReportColumnName(po.getReportColumnName()); + taxReportColumn.setReportColumnDataIndex(po.getReportColumnDataIndex()); + taxReportColumn.setTaxReportType(po.getTaxReportType()); + taxReportColumn.setIncomeCategory(po.getIncomeCategory()); + taxReportColumn.setDataType(po.getDataType()); + return taxReportColumn; + }).collect(Collectors.toList()); + + return collect; + } } diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java new file mode 100644 index 000000000..a94811684 --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java @@ -0,0 +1,76 @@ +package com.engine.salary.entity.taxdeclaration.dto; + +import com.engine.salary.annotation.TableTitle; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * 个税申报明细新增表单 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxDeclareRecordDetailFormDTO { + + /** + * 个税申报表id + */ + private Long taxDeclarationId; + + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") + private String jobNum; + + @TableTitle(title = "姓名", dataIndex = "username", key = "username") + private String username; + + @TableTitle(title = "证件类型", dataIndex = "cardType", key = "cardType") + private String cardType; + + @TableTitle(title = "证件号码", dataIndex = "cardNum", key = "cardNum") + private String cardNum; + + /** + * 收入所得项目 + */ + private String incomeCategory; + + /** + * 人员报送下拉选择 + */ + private List employeeDeclares; + + /** + * 当前申报类型可编辑字段 + */ + private List taxReportColumns; + private Map resultValue; + + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class TaxReportColumn { + //报表类型 + private String taxReportType; + //所得项目 + private String incomeCategory; + //申报表列索引 + private String reportColumnDataIndex ; + //申报表的列名 + private String reportColumnName; + //数值类型 + private String dataType; + } +} diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailFormParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailFormParam.java new file mode 100644 index 000000000..3386119bf --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailFormParam.java @@ -0,0 +1,21 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import lombok.Data; + +/** + * 个税申报明细保存 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +public class TaxDeclareRecordDetailFormParam { + + /** + * 个税申报表id + */ + private Long taxDeclarationId; + +} diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java index 7744819ba..0f60decd9 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordDetailSaveParam.java @@ -1,7 +1,5 @@ package com.engine.salary.entity.taxdeclaration.param; -import com.engine.salary.annotation.SalaryTableColumn; -import com.engine.salary.annotation.TableTitle; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -23,10 +21,7 @@ public class TaxDeclareRecordDetailSaveParam { @JsonSerialize(using = ToStringSerializer.class) private Long id; - //个税申报记录id") - private Long taxDeclareRecordId; - - //个税申报表id") + //个税申报表id private Long taxDeclarationId; //人员id @@ -34,31 +29,6 @@ public class TaxDeclareRecordDetailSaveParam { private Long employeeId; private Integer employeeType; - @SalaryTableColumn( - text = "工号", width = "10%", column = "jobNum" - ) - @TableTitle(title ="工号",dataIndex = "jobNum",key = "jobNum") - private String jobNum; - - @SalaryTableColumn( - text = "姓名", width = "10%", column = "username" - ) - @TableTitle(title ="姓名",dataIndex = "username",key = "username") - private String username; - - @SalaryTableColumn( - text = "证件类型", width = "10%", column = "cardType" - ) - @TableTitle(title ="证件类型",dataIndex = "cardType",key = "cardType") - private String cardType; - - @SalaryTableColumn( - text = "证件号码", width = "10%", column = "cardNum" - ) - @TableTitle(title ="证件号码",dataIndex = "cardNum",key = "cardNum") - private String cardNum; - private Map taxReportColumnValues; - } diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml index 890181735..33e2deec0 100644 --- a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml @@ -838,6 +838,9 @@ AND declare_status = #{param.declareStatus.value} + + AND employee_id=#{param.employeeId} + AND employment_status = #{param.employmentStatus.value} diff --git a/src/com/engine/salary/service/TaxDeclarationValueService.java b/src/com/engine/salary/service/TaxDeclarationValueService.java index 8ec154857..ab129909c 100644 --- a/src/com/engine/salary/service/TaxDeclarationValueService.java +++ b/src/com/engine/salary/service/TaxDeclarationValueService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO; import com.engine.salary.util.page.PageInfo; @@ -58,10 +59,17 @@ public interface TaxDeclarationValueService { */ void batchSave(List taxDeclarationValues); + + void save(TaxDeclareRecordDetailSaveParam param); + void edit(TaxDeclareRecordDetailSaveParam param); + TaxDeclarationValuePO getById(Long id); + /** * 删除个税申报表明细 * * @param taxDeclareRecordIds */ void deleteByTaxDeclareRecordIds(Collection taxDeclareRecordIds); + + } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index f7aaf17c9..e45ba18f2 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -3,6 +3,7 @@ package com.engine.salary.service.impl; 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.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; @@ -10,11 +11,13 @@ import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationValueList; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO; import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper; import com.engine.salary.service.*; import com.engine.salary.util.JsonUtil; @@ -24,6 +27,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; +import dm.jdbc.util.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; @@ -63,6 +67,10 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user); } + private TaxDeclarationService getTaxDeclarationService(User user) { + return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); + } + @Override public PageInfo listPageByTaxDeclarationIds(TaxDeclarationValueListQueryParam queryParam, Collection taxDeclarationIds) { List taxDeclarationValuePOS = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build()); @@ -131,6 +139,55 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar } } + @Override + public void save(TaxDeclareRecordDetailSaveParam param) { + TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); + if(taxDeclaration==null){ + throw new SalaryRunTimeException("个税申报表不存在!"); + } + + TaxDeclarationValuePO po = TaxDeclarationValuePO.builder() + .id(IdGenerator.generate()) + .taxDeclarationId(param.getTaxDeclarationId()) + .taxDeclareRecordId(taxDeclaration.getTaxDeclareRecordId()) + .employeeId(param.getEmployeeId()) + .employeeType(param.getEmployeeType()) + .resultValue(param.getTaxReportColumnValues()) + .resultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues())) + .createTime(new Date()) + .updateTime(new Date()) + .creator((long) user.getUID()) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + encryptUtil.encrypt(po, TaxDeclarationValuePO.class); + + getTaxDeclarationValueMapper().insertIgnoreNull(po); + + } + + @Override + public void edit(TaxDeclareRecordDetailSaveParam param) { + TaxDeclarationValuePO po = getById(param.getId()); + po.setResultValue(param.getTaxReportColumnValues()); + po.setResultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues())); + po.setUpdateTime(new Date()); + encryptUtil.encrypt(po, TaxDeclarationValuePO.class); + getTaxDeclarationValueMapper().updateIgnoreNull(po); + } + + @Override + public TaxDeclarationValuePO getById(Long id) { + TaxDeclarationValuePO po = getTaxDeclarationValueMapper().getById(id); + if(po==null){ + throw new SalaryRunTimeException("个税申报明细不存在!"); + } + encryptUtil.decrypt(po,TaxDeclarationValuePO.class); + po.setResultValue(JsonUtil.parseMap(po.getResultValueJson(), String.class)); + + return po; + } + @Override public void deleteByTaxDeclareRecordIds(Collection taxDeclareRecordIds) { if (CollectionUtils.isEmpty(taxDeclareRecordIds)) { diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 64fba69e2..0d6ad1e9e 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -337,19 +337,20 @@ public class TaxDeclarationController { /** * 新增表单 * - * @param incomeCategory + * @param param * @return */ - @GET + @POST @Path("/getAddForm") @Produces(MediaType.APPLICATION_JSON) - public String getAddForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "IncomeCategoryEnum") IncomeCategoryEnum incomeCategory) { + public String getAddForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordDetailFormParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getAddForm, incomeCategory); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getAddForm, param); } /** * 新增 + * * @param request * @param response * @param param @@ -358,11 +359,45 @@ public class TaxDeclarationController { @POST @Path("/add") @Produces(MediaType.APPLICATION_JSON) - public String add(@Context HttpServletRequest request, @Context HttpServletResponse response,TaxDeclareRecordDetailSaveParam param) { + public String add(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordDetailSaveParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::add, param); } + + /** + * 编辑 + * + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/edit") + @Produces(MediaType.APPLICATION_JSON) + public String edit(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordDetailSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::edit, param); + } + + /** + * 获取详细详细 + * + * @param request + * @param response + * @param id + * @return + */ + @GET + @Path("/detailInfo") + @Produces(MediaType.APPLICATION_JSON) + public String edit(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::detailInfo, id); + } + + /** * 个税申报表详情列表 * @@ -407,9 +442,7 @@ public class TaxDeclarationController { }; response.setContentType("application/octet-stream"); - return Response.ok(output) - .header("Content-disposition", "attachment;filename=" + fileName) - .header("Cache-Control", "no-cache").build(); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } catch (Exception e) { log.error("个税申报表明细导出异常", e); throw e; @@ -544,9 +577,7 @@ public class TaxDeclarationController { }; response.setContentType("application/octet-stream"); - return Response.ok(output) - .header("Content-disposition", "attachment;filename=" + fileName) - .header("Cache-Control", "no-cache").build(); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } catch (Exception e) { log.error("未报送的人员导出异常", e); throw e; @@ -581,9 +612,7 @@ public class TaxDeclarationController { }; response.setContentType("application/octet-stream"); - return Response.ok(output) - .header("Content-disposition", "attachment;filename=" + fileName) - .header("Cache-Control", "no-cache").build(); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } catch (Exception e) { log.error("缺少申报数据的人员导出异常", e); throw e; @@ -617,9 +646,7 @@ public class TaxDeclarationController { }; response.setContentType("application/octet-stream"); - return Response.ok(output) - .header("Content-disposition", "attachment;filename=" + fileName) - .header("Cache-Control", "no-cache").build(); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } catch (Exception e) { log.error("申报失败人员导出异常", e); throw e; diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 96c8e6ee6..17b58d8e1 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -3,12 +3,17 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; -import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareListQueryParam; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationDetailBO; import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.param.*; import com.engine.salary.entity.taxdeclaration.po.*; +import com.engine.salary.enums.employeedeclare.CardTypeEnum; +import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; +import com.engine.salary.enums.employeedeclare.EmploymentStatusEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareTypeEnum; @@ -91,6 +96,10 @@ public class TaxDeclareRecordWrapper extends Service { return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user); } + private EmployeeDeclareService getEmployeeDeclareService(User user) { + return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user); + } + /** * 个税申报记录列表 @@ -663,29 +672,77 @@ public class TaxDeclareRecordWrapper extends Service { return getTaxDeclarationExcelService(user).exportEmployee4Fail(queryParam); } - public List getAddForm(IncomeCategoryEnum incomeCategoryEnum) { + public TaxDeclareRecordDetailFormDTO getAddForm(TaxDeclareRecordDetailFormParam param) { + TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); // 查询个税申报表列 - List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum); - return taxReportColumns; + List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory())); + //当前税款所属期报送成功且状态正常的人员 + List employeeDeclarePOS = getEmployeeDeclareService(user).listByParam( + EmployeeDeclareListQueryParam + .builder() + .taxCycle(taxDeclaration.getTaxCycle()) + .taxAgentId(taxDeclaration.getTaxAgentId()) + .declareStatus(DeclareStatusEnum.DECLARE_SUCCESS) + .employmentStatus(EmploymentStatusEnum.NORMAL) + .build() + ); + + //过滤申报表中已存在的人员 + List taxDeclarationValuePOS = getTaxDeclarationValueService(user).listByTaxDeclarationIds(Collections.singletonList(param.getTaxDeclarationId())); + Set empIds = SalaryEntityUtil.properties(taxDeclarationValuePOS, TaxDeclarationValuePO::getEmployeeId); + + employeeDeclarePOS = employeeDeclarePOS.stream().filter(emp -> !empIds.contains(emp.getEmployeeId())).collect(Collectors.toList()); + + return TaxDeclareRecordDetailFormDTO.builder() + .taxReportColumns(TaxDeclarationDetailBO.convert2ListTaxReportColumn(taxReportColumns)) + .employeeDeclares(employeeDeclarePOS) + .taxDeclarationId(taxDeclaration.getTaxAgentId()) + .build(); } + /** + * 新增 + * @param param + */ public void add(TaxDeclareRecordDetailSaveParam param) { + getTaxDeclarationValueService(user).save(param); + } - TaxDeclarationValuePO build = TaxDeclarationValuePO.builder() - .id(IdGenerator.generate()) - .taxDeclarationId(param.getTaxDeclarationId()) - .taxDeclareRecordId(param.getTaxDeclareRecordId()) - .employeeId(param.getEmployeeId()) - .employeeType(param.getEmployeeType()) - .resultValue(param.getTaxReportColumnValues()) - .createTime(new Date()) - .updateTime(new Date()) - .creator((long) user.getUID()) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + /** + * 编辑 + * @param param + */ + public void edit(TaxDeclareRecordDetailSaveParam param) { + getTaxDeclarationValueService(user).edit(param); + } + + public TaxDeclareRecordDetailFormDTO detailInfo(Long id) { + TaxDeclarationValuePO declarationValuePO = getTaxDeclarationValueService(user).getById(id); + TaxDeclarationPO taxDeclarationPO = getTaxDeclarationService(user).getById(declarationValuePO.getTaxDeclarationId()); + + List employeeDeclarePOS = getEmployeeDeclareService(user).listByParam( + EmployeeDeclareListQueryParam + .builder() + .taxCycle(taxDeclarationPO.getTaxCycle()) + .taxAgentId(taxDeclarationPO.getTaxAgentId()) + .employeeId(declarationValuePO.getEmployeeId()) + .build() + ); + + if (CollectionUtils.isEmpty(employeeDeclarePOS)) { + throw new SalaryRunTimeException("当前人员未报送!"); + } + EmployeeDeclarePO employeeDeclarePO = employeeDeclarePOS.get(0); + // 查询个税申报表列 + List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory())); + return TaxDeclareRecordDetailFormDTO.builder() + .incomeCategory(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getDefaultLabel()) + .cardNum(employeeDeclarePO.getCardNum()) + .cardType(SalaryEnumUtil.enumMatchByValue(employeeDeclarePO.getCardType(), CardTypeEnum.class).getDefaultLabel()) + .username(employeeDeclarePO.getEmployeeName()) + .jobNum(employeeDeclarePO.getJobNum()) + .taxReportColumns(TaxDeclarationDetailBO.convert2ListTaxReportColumn(taxReportColumns)) + .resultValue(declarationValuePO.getResultValue()) .build(); - List objects = new ArrayList<>(); - objects.add(build); - getTaxDeclarationValueService(user).batchSave(objects); } } From 4f8606b00ee4311c09848fa62f183b56f6fa9940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 16 Dec 2023 12:35:24 +0800 Subject: [PATCH 04/26] =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/wrapper/SalaryStatisticsReportWrapper.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index ce270b1fa..86b7aeb7d 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -216,6 +216,7 @@ public class SalaryStatisticsReportWrapper extends Service { /** * 复制薪资账套 + * * @param id */ public void duplicate(Long id) { @@ -322,7 +323,7 @@ public class SalaryStatisticsReportWrapper extends Service { //报表中缓存的条件 salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { - return getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); + return getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); } } @@ -346,7 +347,7 @@ public class SalaryStatisticsReportWrapper extends Service { getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_IDS, salaryReportIds + "," + id); getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id, salaryReportConditions + "," + paramMd5); - getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5, resultMap); + getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5, resultMap); return resultMap; From bda3d7080bee22cb7fab3b869b54840066c4e6a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 16 Dec 2023 12:36:56 +0800 Subject: [PATCH 05/26] =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/service/impl/SalaryStatisticsReportServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 4bb650f92..3f9745f11 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -497,7 +497,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Arrays.asList(salaryReportConditions.split(",")).forEach(paramMd5 -> { if (StringUtils.isNotBlank(paramMd5)) { //条件对应的结果 - getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + paramMd5); + getSalaryCacheService(user).remove(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); } } ); From e8223a832bb0c89038a2f3b56811fd88a365abdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 16 Dec 2023 12:40:33 +0800 Subject: [PATCH 06/26] =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/wrapper/SalaryStatisticsReportWrapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 86b7aeb7d..508877028 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -345,6 +345,7 @@ public class SalaryStatisticsReportWrapper extends Service { resultMap.put("reportId", id); + //设置报表缓存 getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_IDS, salaryReportIds + "," + id); getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id, salaryReportConditions + "," + paramMd5); getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5, resultMap); From c581c8d74db7fa03dfd4472307d7d1363653a70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 20 Dec 2023 17:21:46 +0800 Subject: [PATCH 07/26] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E7=94=B3=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/TaxDeclarationCommon.java | 5 +- .../enums/salarysob/IncomeCategoryEnum.java | 140 ++++- .../GetDeclareTaxResultFeedbackResponse.java | 523 ++++++++++-------- .../salary/service/TaxDeclarationService.java | 4 +- .../impl/TaxDeclarationServiceImpl.java | 15 +- .../impl/TaxDeclareRecordServiceImpl.java | 10 +- .../engine/salary/util/excel/ExcelUtil.java | 65 +++ 7 files changed, 490 insertions(+), 272 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java index 88192ff3e..904e638e4 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java @@ -19,6 +19,7 @@ import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import dm.jdbc.util.IdGenerator; +import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; import java.math.BigDecimal; @@ -63,8 +64,7 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { SalarySobTaxReportRulePO salarySobTaxReportRule = taxDeclareContext.getSalarySobTaxReportRuleMap() .get(lastSalaryAcctEmployee.getSalarySobId() + "-" + taxReportColumn.getReportColumnDataIndex()); List salaryAcctResultValue = salaryAcctResultValueMap.get(lastSalaryAcctEmployee.getId()); - String defaultValue = Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0" : ""; - String value = defaultValue; + String value = ""; if (salarySobTaxReportRule != null && salaryAcctResultValue != null) { value = salaryAcctResultValue.stream() .filter(result -> result.getSalaryItemId().equals(salarySobTaxReportRule.getSalaryItemId())) @@ -72,6 +72,7 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { .orElse(new SalaryAcctResultPO()) .getResultValue(); } + value = StringUtils.isNotBlank(value) ? value : Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""; valueMap.put(taxReportColumn.getReportColumnDataIndex(), value); } TaxDeclarationValuePO taxDeclarationValue = TaxDeclarationValuePO.builder() diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 762b3e581..71009b4e6 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -1,13 +1,12 @@ package com.engine.salary.enums.salarysob; import com.engine.salary.enums.BaseEnum; +import com.engine.salary.remote.tax.response.employee.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * 应税项目 @@ -20,19 +19,123 @@ import java.util.Objects; public enum IncomeCategoryEnum implements BaseEnum { // todo 多语言 - WAGES_AND_SALARIES(1, "0101", "正常工资薪金", 160487), - REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", 160488), - ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", 160489), - COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", 181936), - COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", 181937), - INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", 181938), - ANNUITY_RECEIPT(110, "0110", "年金领取", 181939), - INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", 181940), - INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", 181942), - REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", 181943), - REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", 175330), - REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", 181944), - ROYALTIES(600, "0600", "特许权使用费所得", 181945), + WAGES_AND_SALARIES(1, "0101", "正常工资薪金", 160487) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", 160488) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", 160489) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", 181936) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", 181937) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", 181938) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + ANNUITY_RECEIPT(110, "0110", "年金领取", 181939) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", 181940) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", 181942) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", 181943) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", 175330) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", 181944) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, + ROYALTIES(600, "0600", "特许权使用费所得", 181945) { + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, ; @@ -51,6 +154,8 @@ public enum IncomeCategoryEnum implements BaseEnum { this.labelId = labelId; } + public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + @Override public Integer getValue() { return value; @@ -79,6 +184,7 @@ public enum IncomeCategoryEnum implements BaseEnum { } return null; } + public static List parseByValue(Collection values) { if (CollectionUtils.isEmpty(values)) { return Collections.emptyList(); diff --git a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java index 47f9c42fe..1313ca083 100644 --- a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java @@ -58,10 +58,11 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { // * 限售股所得 必填:是 见限售股所得计算结果 // */ // private 对象 xsgsd; -// /** -// * 人员申报失败列表 必填:是 参考人员代报结果对象 -// */ -// private 数组 rysbsblb; + + /** + * 人员申报失败列表 必填:是 参考人员代报结果对象 + */ + private List rysbsblb; @Data public static class zhsd { @@ -73,66 +74,66 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { * 正常工资薪金算税结果对象 参考综合所得算税结果对象 */ private zcgzxj zcgzxj; -// /** -// * 全年一次性奖金收入算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 qnycxjjsslb; -// /** -// * 稿酬所得算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 gcsdlb; -// /** -// * 一般劳务报酬算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 lwbclb; -// /** -// * 解除劳动合同一次性补偿金列表 参考综合所得算税结果对象 -// */ -// private 对象 jcldhtycxbcjlb; -// /** -// * 保险营销员薪金算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 bxyxy; -// /** -// * 证券经纪人薪金算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 zqjjr; -// /** -// * 特许权算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 txq; -// /** -// * 个人股权激励结果对象 参考综合所得算税结果对象 -// */ -// private 对象 grgqjl; -// /** -// * 企业年金结果对象 参考综合所得算税结果对象 -// */ -// private 对象 qynj; -// /** -// * 内退一次性补偿金 参考综合所得算税结果对象 -// */ -// private 对象 ntycxbcjlb; -// /** -// * 其他连续劳务报酬 参考综合所得算税结果对象 -// */ -// private 对象 qtlxlwbc; -// /** -// * 其他非连续劳务报酬 参考综合所得算税结果对象 -// */ -// private 对象 qtflxlwbc; -// /** -// * 提前退休一次性补贴 参考综合所得算税结果对象 -// */ -// private 对象 tqtxycxbt; -// /** -// * 央企负责人绩效薪金延期兑现收入和任期奖励 参考综合所得算税结果对象 -// */ -// private 对象 yqfzrsrhjl; -// /** -// * 法律援助劳务报酬 参考综合所得算税结果对象 -// */ -// private 对象 flyzlwbclb; + /** + * 全年一次性奖金收入算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj qnycxjjsslb; + /** + * 稿酬所得算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj gcsdlb; + /** + * 一般劳务报酬算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj lwbclb; + /** + * 解除劳动合同一次性补偿金列表 参考综合所得算税结果对象 + */ + private zcgzxj jcldhtycxbcjlb; + /** + * 保险营销员薪金算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj bxyxy; + /** + * 证券经纪人薪金算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj zqjjr; + /** + * 特许权算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj txq; + /** + * 个人股权激励结果对象 参考综合所得算税结果对象 + */ + private zcgzxj grgqjl; + /** + * 企业年金结果对象 参考综合所得算税结果对象 + */ + private zcgzxj qynj; + /** + * 内退一次性补偿金 参考综合所得算税结果对象 + */ + private zcgzxj ntycxbcjlb; + /** + * 其他连续劳务报酬 参考综合所得算税结果对象 + */ + private zcgzxj qtlxlwbc; + /** + * 其他非连续劳务报酬 参考综合所得算税结果对象 + */ + private zcgzxj qtflxlwbc; + /** + * 提前退休一次性补贴 参考综合所得算税结果对象 + */ + private zcgzxj tqtxycxbt; + /** + * 央企负责人绩效薪金延期兑现收入和任期奖励 参考综合所得算税结果对象 + */ + private zcgzxj yqfzrsrhjl; + /** + * 法律援助劳务报酬 参考综合所得算税结果对象 + */ + private zcgzxj flyzlwbclb; /** @@ -234,7 +235,6 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { /** * 是否明细申报 必填:否 是或者否 */ - @SalaryTableColumn(text = "是否明细申报", width = "10%", column = "sfmxsb") private String sfmxsb; /** * 姓名 必填:null 如果是汇总申报返回空 @@ -264,133 +264,143 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { /** * 当期收入额 必填:是 不填写默认为0 */ - @SalaryTableColumn(text = "当期收入额", width = "10%", column = "sre") + @SalaryTableColumn(text = "本期收入", width = "10%", column = "sre") private BigDecimal sre; /** * 当期免税收入 必填:null */ - @SalaryTableColumn(text = "当期免税收入", width = "10%", column = "mssd") + @SalaryTableColumn(text = "本期免税收入", width = "10%", column = "mssd") private BigDecimal mssd; /** * 基本养老保险 必填:null */ - @SalaryTableColumn(text = "基本养老保险", width = "10%", column = "jbylaobxf") + @SalaryTableColumn(text = "本期基本养老保险费", width = "10%", column = "jbylaobxf") private BigDecimal jbylaobxf; /** * 基本医疗保险 必填:null */ - @SalaryTableColumn(text = "基本医疗保险", width = "10%", column = "jbylbxf") + @SalaryTableColumn(text = "本期基本医疗保险费", width = "10%", column = "jbylbxf") private BigDecimal jbylbxf; /** * 失业保险 必填:null */ - @SalaryTableColumn(text = "失业保险", width = "10%", column = "sybxf") + @SalaryTableColumn(text = "本期失业保险费", width = "10%", column = "sybxf") private BigDecimal sybxf; /** * 住房公积金 必填:null */ - @SalaryTableColumn(text = "住房公积金", width = "10%", column = "zfgjj") + @SalaryTableColumn(text = "本期住房公积金", width = "10%", column = "zfgjj") private BigDecimal zfgjj; - /** - * 子女教育支出 必填:null - */ - @SalaryTableColumn(text = "子女教育支出", width = "10%", column = "znjyzc") - private BigDecimal znjyzc; - /** - * 赡养老人支出 必填:null - */ - @SalaryTableColumn(text = "赡养老人支出", width = "10%", column = "sylrzc") - private BigDecimal sylrzc; - /** - * 住房贷款利息支出 必填:null - */ - @SalaryTableColumn(text = "住房贷款利息支出", width = "10%", column = "zfdklxzc") - private BigDecimal zfdklxzc; - /** - * 住房租金支出 必填:null - */ - @SalaryTableColumn(text = "住房租金支出", width = "10%", column = "zfzjzc") - private BigDecimal zfzjzc; - /** - * 继续教育支出 必填:null - */ - @SalaryTableColumn(text = "继续教育支出", width = "10%", column = "jxjyzc") - private BigDecimal jxjyzc; - /** - * 非学历继续教育支出 必填:null - */ - @SalaryTableColumn(text = "非学历继续教育支出", width = "10%", column = "fxljxjyzc") - private BigDecimal fxljxjyzc; - /** - * 3岁以下婴幼儿照护支出 必填:null - */ - @SalaryTableColumn(text = "3岁以下婴幼儿照护支出", width = "10%", column = "yyezhzc") - private BigDecimal yyezhzc; + /** * 年金 必填:null */ - @SalaryTableColumn(text = "年金", width = "10%", column = "nj") + @SalaryTableColumn(text = "本期企业(职业)年金", width = "10%", column = "nj") private BigDecimal nj; + /** * 商业健康保险 必填:null */ - @SalaryTableColumn(text = "商业健康保险", width = "10%", column = "syjkbx") + @SalaryTableColumn(text = "本期商业健康保险费", width = "10%", column = "syjkbx") private BigDecimal syjkbx; /** * 税延养老保险 必填:null */ - @SalaryTableColumn(text = "税延养老保险", width = "10%", column = "syylbx") + @SalaryTableColumn(text = "本期税延养老保险费", width = "10%", column = "syylbx") private BigDecimal syylbx; /** * 其他 必填:null 按法律规定可以在税前扣除的项目 */ - @SalaryTableColumn(text = "其他", width = "10%", column = "qt") + @SalaryTableColumn(text = "本期其他扣除(其他)", width = "10%", column = "qt") private BigDecimal qt; + /** - * 准予扣除的捐赠额 必填:null + * 累计收入额 必填:null */ - @SalaryTableColumn(text = "准予扣除的捐赠额", width = "10%", column = "zykcjze") - private BigDecimal zykcjze; + @SalaryTableColumn(text = "累计收入额", width = "10%", column = "ljsre") + private BigDecimal ljsre; /** - * 减免税额 必填:null + * 累计免税收入额 必填:null */ - @SalaryTableColumn(text = "减免税额", width = "10%", column = "jmse") - private BigDecimal jmse; + @SalaryTableColumn(text = "累计免税收入", width = "10%", column = "ljmssd") + private BigDecimal ljmssd; + /** - * 备注 必填:null + * 累计减除费用额 必填:null 正常工资薪金累计减除费用 对应保险营销员、证券经纪人累计费用 */ - @SalaryTableColumn(text = "备注", width = "10%", column = "bz") - private String bz; + @SalaryTableColumn(text = "累计减除费用", width = "10%", column = "ljjcfye") + private BigDecimal ljjcfye; + /** - * 减除费用 必填:null 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + * 累计专项扣除额 必填:null 三险一金合计 */ - @SalaryTableColumn(text = "减除费用", width = "10%", column = "jcfy") - private BigDecimal jcfy; + @SalaryTableColumn(text = "累计专项扣除", width = "10%", column = "ljzxkce") + private BigDecimal ljzxkce; + /** - * 其他扣除合计 必填:null + * 累计子女教育支出 必填:null */ - @SalaryTableColumn(text = "其他扣除合计", width = "10%", column = "qtckhj") - private BigDecimal qtckhj; + @SalaryTableColumn(text = "累计子女教育支出扣除", width = "10%", column = "ljznjyzc") + private BigDecimal ljznjyzc; /** - * 应纳税所得额 必填:null 正常工资薪金返回Null + * 累计继续教育支出 必填:null */ - @SalaryTableColumn(text = "应纳税所得额", width = "10%", column = "ynssde") - private BigDecimal ynssde; + @SalaryTableColumn(text = "累计继续教育支出扣除", width = "10%", column = "ljjxjyzc") + private BigDecimal ljjxjyzc; /** - * 应纳税额 必填:null 正常工资薪金返回Null + * 累计非学历继续教育支持 必填:null */ - @SalaryTableColumn(text = "应纳税额", width = "10%", column = "ynse") - private BigDecimal ynse; + private BigDecimal ljfxljxjyzc; /** - * 已缴税额 必填:null 正常工资薪金返回Null + * 累计学历继续教育支持 必填:null */ - @SalaryTableColumn(text = "已缴税额", width = "10%", column = "ykjse") - private BigDecimal ykjse; + private BigDecimal ljxljxjyzc; /** - * 应扣缴税额 必填:null 正常工资薪金返回Null + * 累计住房租金支出 必填:null */ - @SalaryTableColumn(text = "应扣缴税额", width = "10%", column = "yingkjse") - private BigDecimal yingkjse; + @SalaryTableColumn(text = "累计住房租金支出扣除", width = "10%", column = "ljzfzjzc") + private BigDecimal ljzfzjzc; + /** + * 累计房屋贷款支出 必填:null + */ + @SalaryTableColumn(text = "累计房屋贷款支出扣除", width = "10%", column = "ljzfdklxzc") + private BigDecimal ljzfdklxzc; + /** + * 累计赡养老人支出 必填:null + */ + @SalaryTableColumn(text = "累计赡养老人支出扣除", width = "10%", column = "ljsylrzc") + private BigDecimal ljsylrzc; + /** + * 累计3岁以下婴幼儿照护支出 必填:null + */ + @SalaryTableColumn(text = "累计3岁以下婴幼儿照护", width = "10%", column = "ljyyezhzc") + private BigDecimal ljyyezhzc; + + + /** + * 累计个人养老金 必填:null + */ + @SalaryTableColumn(text = "累计个人养老金", width = "10%", column = "ljgrylj") + private BigDecimal ljgrylj; + + /** + * 累计其他扣除额 必填:null + */ + @SalaryTableColumn(text = "累计其他扣除", width = "10%", column = "ljqtkce") + private BigDecimal ljqtkce; + + /** + * 累计准予扣除的捐赠额 必填:null + */ + @SalaryTableColumn(text = "累计准予扣除的捐赠", width = "10%", column = "ljzykcjze") + private BigDecimal ljzykcjze; + + /** + * 累计应纳税所得额 必填:null + */ + @SalaryTableColumn(text = "累计应纳税所得额", width = "10%", column = "ljynssde") + private BigDecimal ljynssde; + /** * 税率 必填:null */ @@ -401,81 +411,19 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { */ @SalaryTableColumn(text = "速算扣除数", width = "10%", column = "sskcs") private BigDecimal sskcs; - /** - * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 - */ - @SalaryTableColumn(text = "所得项目名称", width = "10%", column = "sdxm") - private String sdxm; - /** - * 应补退税额 必填:null 应补退税额=累计应扣缴税额-累计已缴税额 - */ - @SalaryTableColumn(text = "应补退税额", width = "10%", column = "ybtse") - private BigDecimal ybtse; - /** - * 累计收入额 必填:null - */ - @SalaryTableColumn(text = "累计收入额", width = "10%", column = "ljsre") - private BigDecimal ljsre; - /** - * 累计免税收入额 必填:null - */ - @SalaryTableColumn(text = "累计免税收入额", width = "10%", column = "ljmssd") - private BigDecimal ljmssd; - /** - * 累计专项扣除额 必填:null 三险一金合计 - */ - @SalaryTableColumn(text = "累计专项扣除额", width = "10%", column = "ljzxkce") - private BigDecimal ljzxkce; - /** - * 累计专项附加扣除额 必填:null 专项附加合计 - */ - @SalaryTableColumn(text = "累计专项附加扣除额", width = "10%", column = "ljzxfjkce") - private BigDecimal ljzxfjkce; - /** - * 累计其他扣除额 必填:null - */ - @SalaryTableColumn(text = "累计其他扣除额", width = "10%", column = "ljqtkce") - private BigDecimal ljqtkce; - /** - * 累计减免税额 必填:null - */ - @SalaryTableColumn(text = "累计减免税额", width = "10%", column = "ljjmse") - private BigDecimal ljjmse; - /** - * 累计减除费用额 必填:null 正常工资薪金累计减除费用 对应保险营销员、证券经纪人累计费用 - */ - @SalaryTableColumn(text = "累计减除费用额", width = "10%", column = "ljjcfye") - private BigDecimal ljjcfye; - /** - * 累计月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - @SalaryTableColumn(text = "累计月减除费用", width = "10%", column = "ljyjcfy") - private BigDecimal ljyjcfy; - /** - * 允许扣除税费 必填:null 保险营销员、证券经纪人 - */ - @SalaryTableColumn(text = "允许扣除税费", width = "10%", column = "yxkcsf") - private BigDecimal yxkcsf; - /** - * 展业成本 必填:null 保险营销员、证券经纪人 - */ - @SalaryTableColumn(text = "展业成本", width = "10%", column = "zycb") - private BigDecimal zycb; - /** - * 月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - @SalaryTableColumn(text = "月减除费用", width = "10%", column = "yjcfy") - private BigDecimal yjcfy; - /** - * 累计应纳税所得额 必填:null - */ - @SalaryTableColumn(text = "累计应纳税所得额", width = "10%", column = "ljynssde") - private BigDecimal ljynssde; + /** * 累计应纳税额 必填:null */ @SalaryTableColumn(text = "累计应纳税额", width = "10%", column = "ljynse") private BigDecimal ljynse; + + /** + * 累计减免税额 必填:null + */ + @SalaryTableColumn(text = "累计减免税额", width = "10%", column = "ljjmse") + private BigDecimal ljjmse; + /** * 累计应扣缴税额 必填:null 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 */ @@ -487,59 +435,114 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { @SalaryTableColumn(text = "累计已缴税额", width = "10%", column = "ljykjse") private BigDecimal ljykjse; /** - * 累计子女教育支出 必填:null + * 已缴税额 必填:null 正常工资薪金返回Null */ - @SalaryTableColumn(text = "累计子女教育支出", width = "10%", column = "ljznjyzc") - private BigDecimal ljznjyzc; + @SalaryTableColumn(text = "已缴税额", width = "10%", column = "ykjse") + private BigDecimal ykjse; + /** - * 累计继续教育支出 必填:null + * 累计专项附加扣除额 必填:null 专项附加合计 */ - @SalaryTableColumn(text = "累计继续教育支出", width = "10%", column = "ljjxjyzc") - private BigDecimal ljjxjyzc; + @SalaryTableColumn(text = "累计专项附加扣除额", width = "10%", column = "ljzxfjkce") + private BigDecimal ljzxfjkce; + /** - * 累计非学历继续教育支持 必填:null + * 应补退税额 必填:null 应补退税额=累计应扣缴税额-累计已缴税额 */ - @SalaryTableColumn(text = "累计非学历继续教育支持", width = "10%", column = "ljfxljxjyzc") - private BigDecimal ljfxljxjyzc; + @SalaryTableColumn(text = "应补退税额", width = "10%", column = "ybtse") + private BigDecimal ybtse; + /** - * 累计学历继续教育支持 必填:null + * 备注 必填:null */ - @SalaryTableColumn(text = "累计学历继续教育支持", width = "10%", column = "ljxljxjyzc") - private BigDecimal ljxljxjyzc; + @SalaryTableColumn(text = "备注", width = "10%", column = "bz") + private String bz; + /** - * 累计住房租金支出 必填:null + * 子女教育支出 必填:null */ - @SalaryTableColumn(text = "累计住房租金支出", width = "10%", column = "ljzfzjzc") - private BigDecimal ljzfzjzc; + private BigDecimal znjyzc; /** - * 累计房屋贷款支出 必填:null + * 赡养老人支出 必填:null */ - @SalaryTableColumn(text = "累计房屋贷款支出", width = "10%", column = "ljzfdklxzc") - private BigDecimal ljzfdklxzc; + private BigDecimal sylrzc; /** - * 累计赡养老人支出 必填:null + * 住房贷款利息支出 必填:null */ - @SalaryTableColumn(text = "累计赡养老人支出", width = "10%", column = "ljsylrzc") - private BigDecimal ljsylrzc; + private BigDecimal zfdklxzc; /** - * 累计3岁以下婴幼儿照护支出 必填:null + * 住房租金支出 必填:null */ - @SalaryTableColumn(text = "累计3岁以下婴幼儿照护支出", width = "10%", column = "ljyyezhzc") - private BigDecimal ljyyezhzc; + private BigDecimal zfzjzc; /** - * 累计准予扣除的捐赠额 必填:null + * 继续教育支出 必填:null */ - @SalaryTableColumn(text = "累计准予扣除的捐赠额", width = "10%", column = "ljzykcjze") - private BigDecimal ljzykcjze; + private BigDecimal jxjyzc; /** - * 累计个人养老金 必填:null + * 非学历继续教育支出 必填:null */ - @SalaryTableColumn(text = "累计个人养老金", width = "10%", column = "ljgrylj") - private BigDecimal ljgrylj; + private BigDecimal fxljxjyzc; + /** + * 3岁以下婴幼儿照护支出 必填:null + */ + private BigDecimal yyezhzc; + + /** + * 准予扣除的捐赠额 必填:null + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:null + */ + private BigDecimal jmse; + + /** + * 减除费用 必填:null 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + */ + private BigDecimal jcfy; + /** + * 其他扣除合计 必填:null + */ + private BigDecimal qtckhj; + /** + * 应纳税所得额 必填:null 正常工资薪金返回Null + */ + private BigDecimal ynssde; + /** + * 应纳税额 必填:null 正常工资薪金返回Null + */ + private BigDecimal ynse; + + /** + * 应扣缴税额 必填:null 正常工资薪金返回Null + */ + private BigDecimal yingkjse; + + /** + * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 + */ + private String sdxm; + + /** + * 累计月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal ljyjcfy; + /** + * 允许扣除税费 必填:null 保险营销员、证券经纪人 + */ + private BigDecimal yxkcsf; + /** + * 展业成本 必填:null 保险营销员、证券经纪人 + */ + private BigDecimal zycb; + /** + * 月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal yjcfy; + /** * 累计个人养老金校验码 必填:null */ - @SalaryTableColumn(text = "累计个人养老金校验码", width = "10%", column = "ljgryljjym") private String ljgryljjym; /** * 企业上月是否已申报 必填:null 仅在两个月算税场景时使用,当前月分为N月: @@ -547,34 +550,28 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { * 1表示N-1月(上月)已申报 * 2表示N-2月(上上个月)未申报 */ - @SalaryTableColumn(text = "企业上月是否已申报", width = "10%", column = "qysysfysb") private String qysysfysb; /** * 员工在税局累计已扣缴的税额 必填:null 当前月分为N,如果N-1(上月)已申报,则返回N-1月员工在税局累计已扣缴的税额; * 如果N-1月未申报,则返回N-2月工在税局累计已扣缴的税额; */ - @SalaryTableColumn(text = "员工在税局累计已扣缴的税额", width = "10%", column = "ygzsjljykjse") private BigDecimal ygzsjljykjse; /** * 本月已累计扣除税额 必填:null 针对一月多次算税的场景字段 */ - @SalaryTableColumn(text = "本月已累计扣除税额", width = "10%", column = "byyljkjse") private BigDecimal byyljkjse; /** * 本次应扣缴税额 必填:null 针对一月多次算税的场景字段,本次应扣缴税额=本月应扣缴税额-本月已累计税额 */ - @SalaryTableColumn(text = "本次应扣缴税额", width = "10%", column = "bcykjse") private BigDecimal bcykjse; /** * 分摊年度数 必填:null */ - @SalaryTableColumn(text = "分摊年度数", width = "10%", column = "ftnds") private Integer ftnds; /** * 年减除费用 必填:null 默认为60000 */ - @SalaryTableColumn(text = "年减除费用", width = "10%", column = "njcfy") private BigDecimal njcfy; } @@ -622,6 +619,44 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { } + /** + * 4.4.1.3.1.1人员代报结果对象 + */ + @Data + public static class rydbjgdx { + /** + * 人员ID + */ + private Integer ygid; + /** + * 人员名称 + */ + private String xm; + /** + * 证件类型 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 + */ + private String zzhm; + /** + * 错误码 + */ + private String cwm; + /** + * 错误信息 + */ + private String cwxx; + /** + * 所得税的code + */ + private String sdxmdm; + /** + * 所得税的名称 + */ + private String sdxmmc; + } } diff --git a/src/com/engine/salary/service/TaxDeclarationService.java b/src/com/engine/salary/service/TaxDeclarationService.java index 2731904a5..cb12aae30 100644 --- a/src/com/engine/salary/service/TaxDeclarationService.java +++ b/src/com/engine/salary/service/TaxDeclarationService.java @@ -23,6 +23,8 @@ public interface TaxDeclarationService { */ List listByTaxCycleAndTaxAgentIds(YearMonth salaryMonth, Collection taxAgentIds); + List listByTaxDeclareRecordId(Long taxDeclareRecordId); + PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam); List countByTaxDeclarationId(Collection taxAgentIds); @@ -33,7 +35,6 @@ public interface TaxDeclarationService { /** * 删除个税申报表 - * */ void delete(SalaryAcctRecordPO salaryAcctRecordPO); @@ -48,6 +49,7 @@ public interface TaxDeclarationService { /** * 撤回个税申报单 + * * @param taxDeclarationId */ void withDrawTaxDeclaration(Long taxDeclarationId); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index 987eacf58..3c8391812 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -94,6 +94,15 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration return taxDeclarationPOS; } + @Override + public List listByTaxDeclareRecordId(Long taxDeclareRecordId) { + if (Objects.isNull(taxDeclareRecordId)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + TaxDeclarationPO po = TaxDeclarationPO.builder().taxDeclareRecordId(taxDeclareRecordId).build(); + return getTaxDeclarationMapper().listSome(po); + } + @Override public PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam) { long currentEmployeeId = user.getUID(); @@ -205,7 +214,7 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration // 无薪资核算结果,不允许生成个税申报表 if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); } Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId); @@ -214,14 +223,14 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())); if (notArchived) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); } // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 Date taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle(); boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); if (differentTaxCycle) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); } // 查询薪资账套 Set salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 23606e23e..f84035722 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -35,6 +35,7 @@ import com.engine.salary.entity.taxdeclaration.response.DeclareTaxResponse; import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; import com.engine.salary.enums.taxdeclaration.*; @@ -942,12 +943,11 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? taxDeclareRecord.getRequestId() : requestId); - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); - // 需要导出的数据 - List> excelSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, sscglb); - - return ExcelUtil.genWorkbookV2(excelSheetData, "申报内置算税结果"); + Map>> map = new HashMap<>(); + List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e->e.parseGetDeclareTaxResultFeedbackResponse(map,declareTaxResultFeedbackResponse)); + return ExcelUtil.genWorkbookV2(map); } diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index b9a0c5d2c..f0ac59837 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -272,6 +272,71 @@ public class ExcelUtil { return workbook; } + public static XSSFWorkbook genWorkbookV2(Map>> map) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + map.entrySet().forEach(en->{ + + String sheetName = en.getKey(); + List> rowList = en.getValue(); + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + } + } + }); + + return workbook; + } + public static XSSFWorkbook genWorkbook(ExcelSheetData excelSheetData) { List> list = new ArrayList<>(); list.add(excelSheetData.getHeaders()); From e67cb5bf83df94cfc5238d478e1ba62e42dfa382 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 25 Dec 2023 16:31:36 +0800 Subject: [PATCH 08/26] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E6=89=A3=E7=BC=B4?= =?UTF-8?q?=E4=B9=89=E5=8A=A1=E4=BA=BAlike=E5=88=86=E6=88=903=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/taxagent/TaxAgentMapper.xml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml index 84e424805..b39f69b49 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml @@ -38,6 +38,31 @@ + + + + AND id IN + + #{id} + + + + AND name like '%'||#{param.name}||'%' + + + + + + AND id IN + + #{id} + + + + AND name like '%'+#{param.name}+'%' + + + diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.java b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.java index 1515f916c..fc5d0415f 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.java +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.java @@ -120,4 +120,9 @@ public interface TaxDeclarationValueMapper { */ void batchInsert(@Param("collection") Collection taxDeclarationValues); + + List queryNotWagesEmpIds(@Param("taxDeclareRecordId")Long taxDeclareRecordId); + + List queryWagesEmpIds(@Param("taxDeclareRecordId")Long taxDeclareRecordId); + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml index dfcaecaf1..5935df30e 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml @@ -428,4 +428,24 @@ + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/TaxDeclarationService.java b/src/com/engine/salary/service/TaxDeclarationService.java index cb12aae30..91b38c3eb 100644 --- a/src/com/engine/salary/service/TaxDeclarationService.java +++ b/src/com/engine/salary/service/TaxDeclarationService.java @@ -24,6 +24,7 @@ public interface TaxDeclarationService { List listByTaxCycleAndTaxAgentIds(YearMonth salaryMonth, Collection taxAgentIds); List listByTaxDeclareRecordId(Long taxDeclareRecordId); + List listByTaxDeclareRecordId(Long taxDeclareRecordId,Integer incomeCategory); PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam); diff --git a/src/com/engine/salary/service/TaxDeclarationValueService.java b/src/com/engine/salary/service/TaxDeclarationValueService.java index ab129909c..70bd6f729 100644 --- a/src/com/engine/salary/service/TaxDeclarationValueService.java +++ b/src/com/engine/salary/service/TaxDeclarationValueService.java @@ -5,6 +5,7 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQuer import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam; 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 java.util.Collection; @@ -71,5 +72,12 @@ public interface TaxDeclarationValueService { */ void deleteByTaxDeclareRecordIds(Collection taxDeclareRecordIds); + /** + * 因为单独申报年终奖不可行 + * 需要补充正常工资薪金的申报,按0申报 + * @param po + */ + void autoAddWagesDeclare(TaxDeclareRecordPO po); + } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index 3c8391812..d69513ae0 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -102,6 +102,15 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration TaxDeclarationPO po = TaxDeclarationPO.builder().taxDeclareRecordId(taxDeclareRecordId).build(); return getTaxDeclarationMapper().listSome(po); } + @Override + public List listByTaxDeclareRecordId(Long taxDeclareRecordId,Integer incomeCategory) { + if (Objects.isNull(taxDeclareRecordId)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + TaxDeclarationPO po = TaxDeclarationPO.builder().taxDeclareRecordId(taxDeclareRecordId).incomeCategory(incomeCategory).build(); + return getTaxDeclarationMapper().listSome(po); + } + @Override public PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam) { diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index e45ba18f2..b8633e57b 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -14,9 +14,13 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQuer import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam; 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.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.enums.taxdeclaration.SourceEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper; import com.engine.salary.service.*; @@ -27,6 +31,7 @@ import com.engine.salary.util.db.MapperProxyFactory; 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 dm.jdbc.util.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -142,7 +147,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar @Override public void save(TaxDeclareRecordDetailSaveParam param) { TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); - if(taxDeclaration==null){ + if (taxDeclaration == null) { throw new SalaryRunTimeException("个税申报表不存在!"); } @@ -156,6 +161,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar .resultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues())) .createTime(new Date()) .updateTime(new Date()) + .source(SourceEnum.ADD.getValue()) .creator((long) user.getUID()) .deleteType(0) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) @@ -172,6 +178,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar po.setResultValue(param.getTaxReportColumnValues()); po.setResultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues())); po.setUpdateTime(new Date()); + po.setSource(SourceEnum.EDIT.getValue()); encryptUtil.encrypt(po, TaxDeclarationValuePO.class); getTaxDeclarationValueMapper().updateIgnoreNull(po); } @@ -179,10 +186,10 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar @Override public TaxDeclarationValuePO getById(Long id) { TaxDeclarationValuePO po = getTaxDeclarationValueMapper().getById(id); - if(po==null){ + if (po == null) { throw new SalaryRunTimeException("个税申报明细不存在!"); } - encryptUtil.decrypt(po,TaxDeclarationValuePO.class); + encryptUtil.decrypt(po, TaxDeclarationValuePO.class); po.setResultValue(JsonUtil.parseMap(po.getResultValueJson(), String.class)); return po; @@ -207,4 +214,84 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar }); return taxDeclarationValues; } + + + @Override + public void autoAddWagesDeclare(TaxDeclareRecordPO taxDeclareRecord) { + + Long taxDeclareRecordId = taxDeclareRecord.getId(); + Date now = new Date(); + + //非正常薪资的人员 + List notWagesEmpIds = getTaxDeclarationValueMapper().queryNotWagesEmpIds(taxDeclareRecordId); + if (CollectionUtils.isEmpty(notWagesEmpIds)) { + return; + } + + //正常薪资人员 + List wagesEmpIds = getTaxDeclarationValueMapper().queryWagesEmpIds(taxDeclareRecordId); + + //比较差异 + List autoAddIds = notWagesEmpIds.stream().filter(id -> !wagesEmpIds.contains(id)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(autoAddIds)) { + return; + } + + //正常薪资的表头 + List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES); + Map valueMap = Maps.newHashMap(); + for (TaxReportColumnPO taxReportColumn : taxReportColumns) { + String value = Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""; + valueMap.put(taxReportColumn.getReportColumnDataIndex(), value); + } + + //当前申报表是否含正常申报 + List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(taxDeclareRecordId, IncomeCategoryEnum.WAGES_AND_SALARIES.getValue()); + TaxDeclarationPO taxDeclarationPO; + if (CollectionUtils.isNotEmpty(list)) { + if (list.size() > 1) { + throw new SalaryRunTimeException("存在多条正常工资薪金申报表数据"); + } + taxDeclarationPO = list.get(0); + } else { + taxDeclarationPO = TaxDeclarationPO + .builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(taxDeclareRecordId) + .incomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES.getValue()) + .taxAgentId(taxDeclareRecord.getTaxAgentId()) + .salaryMonth(taxDeclareRecord.getSalaryMonth()) + .taxCycle(taxDeclareRecord.getTaxCycle()) + .description(taxDeclareRecord.getRemark()) + .controlView(0) + .creator((long) user.getUID()) + .createTime(now) + .updateTime(now) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + List taxList = new ArrayList<>(); + getTaxDeclarationService(user).saveBatch(taxList); + } + + //组装数据,自动补足 + List autoAddValuePOs = autoAddIds.stream().map((empId -> { + TaxDeclarationValuePO taxDeclarationValue = TaxDeclarationValuePO.builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(taxDeclarationPO.getTaxDeclareRecordId()) + .taxDeclarationId(taxDeclarationPO.getId()) + .employeeType(0) + .employeeId(empId) + .resultValue(valueMap) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .creator((long) user.getUID()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(now) + .updateTime(now) + .source(SourceEnum.AUTO.getValue()) + .build(); + return taxDeclarationValue; + })).collect(Collectors.toList()); + batchSave(autoAddValuePOs); + } } diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index f84035722..06a8da778 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -376,6 +376,9 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } + //艾志正常工资薪金补足年终奖人员 + getTaxDeclarationValueService(user).autoAddWagesDeclare(taxDeclareRecord); + //更新核算记录状态 getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED); } @@ -946,7 +949,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe Map>> map = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); - list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e->e.parseGetDeclareTaxResultFeedbackResponse(map,declareTaxResultFeedbackResponse)); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); return ExcelUtil.genWorkbookV2(map); } From 7e561527ac4ce7c1f7cea16c80e0832c1cae31e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 27 Dec 2023 17:35:16 +0800 Subject: [PATCH 14/26] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E8=96=AA=E9=87=91=E7=9A=84=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/TaxDeclareRecordServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 06a8da778..f68dee7eb 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -376,7 +376,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } - //艾志正常工资薪金补足年终奖人员 + //补充正常工资薪金的申报人员 getTaxDeclarationValueService(user).autoAddWagesDeclare(taxDeclareRecord); //更新核算记录状态 From 1c499ffd94ed04593d3c029e5a57362029b6d025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 09:39:09 +0800 Subject: [PATCH 15/26] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E8=96=AA=E9=87=91=E7=9A=84=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202312270703.sql | 3 ++ resource/sqlupgrade/GS/sql202312270703.sql | 3 ++ resource/sqlupgrade/JC/sql202312270703.sql | 3 ++ resource/sqlupgrade/Mysql/sql202312270703.sql | 1 + .../sqlupgrade/Oracle/sql202312270703.sql | 2 ++ resource/sqlupgrade/PG/sql202312270703.sql | 1 + .../sqlupgrade/SQLServer/sql202312270703.sql | 2 ++ resource/sqlupgrade/ST/sql202312270703.sql | 3 ++ .../dto/TaxDeclareRecordDetailFormDTO.java | 11 ++++++ .../taxdeclaration/po/TaxDeclareRecordPO.java | 2 ++ .../TaxDeclarationValueMapper.xml | 35 +++++++++++++++---- .../wrapper/TaxDeclareRecordWrapper.java | 7 +++- 12 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202312270703.sql create mode 100644 resource/sqlupgrade/GS/sql202312270703.sql create mode 100644 resource/sqlupgrade/JC/sql202312270703.sql create mode 100644 resource/sqlupgrade/Mysql/sql202312270703.sql create mode 100644 resource/sqlupgrade/Oracle/sql202312270703.sql create mode 100644 resource/sqlupgrade/PG/sql202312270703.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202312270703.sql create mode 100644 resource/sqlupgrade/ST/sql202312270703.sql diff --git a/resource/sqlupgrade/DM/sql202312270703.sql b/resource/sqlupgrade/DM/sql202312270703.sql new file mode 100644 index 000000000..fa59157ed --- /dev/null +++ b/resource/sqlupgrade/DM/sql202312270703.sql @@ -0,0 +1,3 @@ +update hrsa_tax_declaration_value set source = 0; +/ + diff --git a/resource/sqlupgrade/GS/sql202312270703.sql b/resource/sqlupgrade/GS/sql202312270703.sql new file mode 100644 index 000000000..fa59157ed --- /dev/null +++ b/resource/sqlupgrade/GS/sql202312270703.sql @@ -0,0 +1,3 @@ +update hrsa_tax_declaration_value set source = 0; +/ + diff --git a/resource/sqlupgrade/JC/sql202312270703.sql b/resource/sqlupgrade/JC/sql202312270703.sql new file mode 100644 index 000000000..fa59157ed --- /dev/null +++ b/resource/sqlupgrade/JC/sql202312270703.sql @@ -0,0 +1,3 @@ +update hrsa_tax_declaration_value set source = 0; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202312270703.sql b/resource/sqlupgrade/Mysql/sql202312270703.sql new file mode 100644 index 000000000..099b6ab58 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202312270703.sql @@ -0,0 +1 @@ +update hrsa_tax_declaration_value set source = 0; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202312270703.sql b/resource/sqlupgrade/Oracle/sql202312270703.sql new file mode 100644 index 000000000..e2477f553 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202312270703.sql @@ -0,0 +1,2 @@ +update hrsa_tax_declaration_value set source = 0; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202312270703.sql b/resource/sqlupgrade/PG/sql202312270703.sql new file mode 100644 index 000000000..099b6ab58 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202312270703.sql @@ -0,0 +1 @@ +update hrsa_tax_declaration_value set source = 0; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202312270703.sql b/resource/sqlupgrade/SQLServer/sql202312270703.sql new file mode 100644 index 000000000..0384f9313 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202312270703.sql @@ -0,0 +1,2 @@ +update hrsa_tax_declaration_value set source = 0 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202312270703.sql b/resource/sqlupgrade/ST/sql202312270703.sql new file mode 100644 index 000000000..fa59157ed --- /dev/null +++ b/resource/sqlupgrade/ST/sql202312270703.sql @@ -0,0 +1,3 @@ +update hrsa_tax_declaration_value set source = 0; +/ + diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java index a94811684..04e7d0bff 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclareRecordDetailFormDTO.java @@ -2,6 +2,8 @@ package com.engine.salary.entity.taxdeclaration.dto; import com.engine.salary.annotation.TableTitle; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -29,6 +31,15 @@ public class TaxDeclareRecordDetailFormDTO { */ private Long taxDeclarationId; + //主键id + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + //人员id + @JsonSerialize(using = ToStringSerializer.class) + private Long employeeId; + private Integer employeeType; + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") private String jobNum; diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java index 6664f1985..8a88a15ee 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxdeclaration.po; +import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -50,6 +51,7 @@ public class TaxDeclareRecordPO implements Serializable { private Integer taxDeclareType; /** * 申报状态 + * @see TaxDeclareStatusEnum */ private Integer taxDeclareStatus; /** diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml index 5935df30e..5eba618cb 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationValueMapper.xml @@ -13,6 +13,7 @@ + @@ -30,6 +31,7 @@ , t.employee_type , t.employee_id , t.result_value_json + , t.source @@ -88,6 +90,9 @@ AND result_value_json = #{resultValueJson} + + AND source = #{source} + AND id IN @@ -142,6 +147,9 @@ result_value_json, + + source, + @@ -177,6 +185,9 @@ #{resultValueJson}, + + #{source}, + @@ -195,7 +206,8 @@ tax_declaration_id, employee_type, employee_id, - result_value_json + result_value_json, + source ) VALUES ( @@ -210,7 +222,8 @@ #{item.taxDeclarationId}, #{item.employeeType}, #{item.employeeId}, - #{item.resultValueJson} + #{item.resultValueJson}, + #{item.source} ) @@ -228,7 +241,8 @@ tax_declaration_id, employee_type, employee_id, - result_value_json + result_value_json, + source ) @@ -243,7 +257,8 @@ #{item.taxDeclarationId,jdbcType=DOUBLE}, #{item.employeeType,jdbcType=INTEGER}, #{item.employeeId,jdbcType=DOUBLE}, - #{item.resultValueJson,jdbcType=VARCHAR} + #{item.resultValueJson,jdbcType=VARCHAR}, + #{item.source,jdbcType=INTEGER} from dual @@ -262,7 +277,8 @@ tax_declaration_id, employee_type, employee_id, - result_value_json + result_value_json, + source ) VALUES ( @@ -276,7 +292,8 @@ #{item.taxDeclarationId}, #{item.employeeType}, #{item.employeeId}, - #{item.resultValueJson} + #{item.resultValueJson}, + #{item.source} ) @@ -295,6 +312,7 @@ employee_type=#{employeeType}, employee_id=#{employeeId}, result_value_json=#{resultValueJson}, + source=#{source}, WHERE id = #{id} AND delete_type = 0 @@ -334,6 +352,9 @@ result_value_json=#{resultValueJson}, + + source=#{source}, + WHERE id = #{id} AND delete_type = 0 @@ -434,7 +455,7 @@ left join hrsa_tax_declaration_value b on a.id = b.tax_declaration_id where a.delete_type = 0 and b.delete_type = 0 - and a.income_category ]]> 1 + and a.income_category = 2 and a.tax_declare_record_id = #{taxDeclareRecordId} diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 17b58d8e1..28bcde42e 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -735,7 +735,12 @@ public class TaxDeclareRecordWrapper extends Service { EmployeeDeclarePO employeeDeclarePO = employeeDeclarePOS.get(0); // 查询个税申报表列 List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory())); - return TaxDeclareRecordDetailFormDTO.builder() + return TaxDeclareRecordDetailFormDTO + .builder() + .id(id) + .employeeId(employeeDeclarePO.getEmployeeId()) + .employeeType(employeeDeclarePO.getEmployeeType()) + .taxDeclarationId(taxDeclarationPO.getId()) .incomeCategory(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getDefaultLabel()) .cardNum(employeeDeclarePO.getCardNum()) .cardType(SalaryEnumUtil.enumMatchByValue(employeeDeclarePO.getCardType(), CardTypeEnum.class).getDefaultLabel()) From 0f4d92f302ada3258313c769b734aa5f310b7741 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 28 Dec 2023 10:10:08 +0800 Subject: [PATCH 16/26] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=8A=A5=E9=80=81=E8=BA=AB=E4=BB=BD=E4=B8=AD=E5=8F=B7=E8=BD=AC?= =?UTF-8?q?=E4=B8=BA=E5=A4=A7=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/EmployeeDeclareExcelServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java index 4352be9cf..4bfb84b78 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java @@ -267,7 +267,8 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件号码格式不正确")); errorData.add(errorMessageMap); } else { - employeeDeclareExcel.setCardNum(dataValue); + // 身份证号全部转为大写 + employeeDeclareExcel.setCardNum(dataValue.toUpperCase()); employeeDeclareExcel.setGender(SalaryCardUtil.judgeGender(dataValue).getValue().toString()); employeeDeclareExcel.setBirthday(SalaryCardUtil.judgeBirthday(dataValue).toString()); } From 2befcfd1f2585e6103152ac5c5495c845656b11e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 11:08:53 +0800 Subject: [PATCH 17/26] =?UTF-8?q?pg=E8=84=9A=E6=9C=AC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/PG/sql202206090403.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resource/sqlupgrade/PG/sql202206090403.sql b/resource/sqlupgrade/PG/sql202206090403.sql index 679a8cc59..8f5d32f79 100644 --- a/resource/sqlupgrade/PG/sql202206090403.sql +++ b/resource/sqlupgrade/PG/sql202206090403.sql @@ -1,3 +1,3 @@ -ALTER TABLE hrsa_tax_declaration ADD COLUMN income_category int NOT NULL ; +ALTER TABLE hrsa_tax_declaration ADD COLUMN income_category int ; -ALTER TABLE hrsa_tax_declaration_detail ADD COLUMN employee_type int NOT NULL ; \ No newline at end of file +ALTER TABLE hrsa_tax_declaration_detail ADD COLUMN employee_type int ; \ No newline at end of file From 4e0a5b4b7f9936e1ac71f3432ab6c6eec848db86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 14:09:34 +0800 Subject: [PATCH 18/26] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=86=85=E7=BD=AE?= =?UTF-8?q?=E7=AE=97=E7=A8=8E=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeclareTaxResultFeedbackQueryParam.java | 18 ++++++++++++++++ .../taxdeclaration/po/TaxDeclareRecordPO.java | 4 ++++ .../taxdeclaration/TaxDeclareRecordMapper.xml | 21 +++++++++++++++++++ .../service/TaxDeclareRecordService.java | 3 ++- .../impl/TaxDeclareRecordServiceImpl.java | 10 ++++++--- .../salary/web/TaxDeclarationController.java | 6 +++--- .../wrapper/TaxDeclareRecordWrapper.java | 4 ++-- 7 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java diff --git a/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java b/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java new file mode 100644 index 000000000..7ce6c69c7 --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java @@ -0,0 +1,18 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class DeclareTaxResultFeedbackQueryParam { + Long id; + + String requestId; +} diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java index 8a88a15ee..e65fff3d7 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java @@ -62,6 +62,10 @@ public class TaxDeclareRecordPO implements Serializable { * 请求的requestId */ private String requestId; + /** + * 申报的requestId,用于下载申报过程 + */ + private String declareRequestId; /** * 备注 */ diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareRecordMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareRecordMapper.xml index 7edc1e580..c6b660859 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareRecordMapper.xml +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareRecordMapper.xml @@ -13,6 +13,7 @@ + @@ -38,6 +39,7 @@ , t.tax_cycle , t.remark , t.request_id + , t.declare_request_id , t.tax_declare_type , t.tax_declare_status , t.display_update_icon @@ -105,6 +107,9 @@ AND request_id = #{requestId} + + AND declare_request_id = #{declareRequestId} + AND tax_declare_type = #{taxDeclareType} @@ -189,6 +194,9 @@ request_id, + + declare_request_id, + tax_declare_type, @@ -248,6 +256,9 @@ #{requestId}, + + #{declareRequestId}, + #{taxDeclareType}, @@ -291,6 +302,7 @@ tax_cycle, remark, request_id, + declare_request_id, tax_declare_type, tax_declare_status, display_update_icon, @@ -314,6 +326,7 @@ #{item.taxCycle}, #{item.remark}, #{item.requestId}, + #{item.declareRequestId}, #{item.taxDeclareType}, #{item.taxDeclareStatus}, #{item.displayUpdateIcon}, @@ -340,6 +353,7 @@ tax_cycle, remark, request_id, + declare_request_id, tax_declare_type, tax_declare_status, display_update_icon, @@ -363,6 +377,7 @@ #{item.taxCycle,jdbcType=DATE}, #{item.remark,jdbcType=VARCHAR}, #{item.requestId,jdbcType=DOUBLE}, + #{item.declareRequestId,jdbcType=VARCHAR}, #{item.taxDeclareType,jdbcType=INTEGER}, #{item.taxDeclareStatus,jdbcType=INTEGER}, #{item.displayUpdateIcon,jdbcType=INTEGER}, @@ -390,6 +405,7 @@ tax_cycle, remark, request_id, + declare_request_id, tax_declare_type, tax_declare_status, display_update_icon, @@ -412,6 +428,7 @@ #{item.taxCycle}, #{item.remark}, #{item.requestId}, + #{item.declareRequestId}, #{item.taxDeclareType}, #{item.taxDeclareStatus}, #{item.displayUpdateIcon}, @@ -438,6 +455,7 @@ tax_cycle=#{taxCycle}, remark=#{remark}, request_id=#{requestId}, + declare_request_id=#{declareRequestId}, tax_declare_type=#{taxDeclareType}, tax_declare_status=#{taxDeclareStatus}, display_update_icon=#{displayUpdateIcon}, @@ -485,6 +503,9 @@ request_id=#{requestId}, + + declare_request_id=#{declareRequestId}, + tax_declare_type=#{taxDeclareType}, diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index a294e259d..aac9db48d 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.common.YearMonthRange; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationRateDTO; +import com.engine.salary.entity.taxdeclaration.param.DeclareTaxResultFeedbackQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; @@ -140,7 +141,7 @@ public interface TaxDeclareRecordService { */ Object getDeclareTaxResultFeedback(Long id); - XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id,String requestId); + XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param); /** * 作废 * diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index f68dee7eb..8fe875eb2 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -26,6 +26,7 @@ import com.engine.salary.entity.taxapiflow.po.TaxDeclarationApiFlowRecordPO; import com.engine.salary.entity.taxdeclaration.bo.*; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationRateDTO; import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.DeclareTaxResultFeedbackQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.*; @@ -772,6 +773,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 申报类型 taxDeclareRecord.setTaxPayAmount(Util.null2String(declareTaxFeedbackResponse.getBody().get("ykjse"))); taxDeclareRecord.setPersonNum(Integer.parseInt(Optional.ofNullable(declareTaxFeedbackResponse.getBody().get("nsrc")).orElse("0").toString())); + taxDeclareRecord.setDeclareRequestId(taxDeclareRecord.getRequestId()); taxDeclareRecord.setRequestId(""); taxDeclareRecord.setUpdateTime(new Date()); BigDecimal purePaidAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPurePaidAmount()); @@ -936,16 +938,18 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); - return declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getRequestId()); + return declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getDeclareRequestId()); } @Override - public XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id, String requestId) { + public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { + Long id = param.getId(); + String requestId = param.getRequestId(); TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); - GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? taxDeclareRecord.getRequestId() : requestId); + GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? taxDeclareRecord.getDeclareRequestId() : requestId); Map>> map = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 0d6ad1e9e..e4746208c 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -222,14 +222,14 @@ public class TaxDeclarationController { * * @return */ - @GET + @POST @Path("/exportGetDeclareTaxResultFeedback") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportGetDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id, @QueryParam(value = "requestId") String requestId) { + public Response exportGetDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DeclareTaxResultFeedbackQueryParam param) { try { User user = HrmUserVarify.getUser(request, response); - XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(id, requestId); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(param); String fileName = "申报内置算税结果-" + LocalDate.now(); try { fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 62e2ed562..18c81327d 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -477,8 +477,8 @@ public class TaxDeclareRecordWrapper extends Service { } - public XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id, String requestId) { - return getTaxDeclareRecordService(user).exportGetDeclareTaxResultFeedback(id, requestId); + public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { + return getTaxDeclareRecordService(user).exportGetDeclareTaxResultFeedback(param); } /** From fefb8264c88963f4e1375f27b4667419b0764a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 15:36:27 +0800 Subject: [PATCH 19/26] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/AbnormalEmployeeListDTO.java | 6 ++++ .../dto/FailEmployeeListDTO.java | 16 +++++++--- .../impl/TaxDeclarationExcelServiceImpl.java | 8 ++--- .../impl/TaxDeclarationValueServiceImpl.java | 18 +++++++++-- .../impl/TaxDeclareRecordServiceImpl.java | 6 ++++ .../salary/web/TaxDeclarationController.java | 31 +++++++++++++++++++ 6 files changed, 74 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/AbnormalEmployeeListDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/AbnormalEmployeeListDTO.java index 7970724c7..88f0400cd 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/AbnormalEmployeeListDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/AbnormalEmployeeListDTO.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.taxdeclaration.dto; import com.engine.salary.annotation.TableTitle; import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; +import com.engine.salary.util.excel.ExcelHead; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -32,18 +33,22 @@ public class AbnormalEmployeeListDTO { //姓名") @TableTitle(title = "姓名",dataIndex = "employeeName",key = "employeeName") + @ExcelHead(title = "姓名",dataIndex = "employeeName") private String employeeName; //工号") @TableTitle(title = "工号",dataIndex = "jobNum",key = "jobNum") + @ExcelHead(title = "工号",dataIndex = "jobNum") private String jobNum; //证件类型") @TableTitle(title = "证件类型",dataIndex = "cardType",key = "cardType") + @ExcelHead(title = "证件类型",dataIndex = "cardType") private String cardType; //证件号码") @TableTitle(title = "证件号码",dataIndex = "cardNum",key = "cardNum") + @ExcelHead(title = "证件号码",dataIndex = "cardNum") private String cardNum; //报送状态") @@ -51,5 +56,6 @@ public class AbnormalEmployeeListDTO { //报送状态") @TableTitle(title = "报送状态",dataIndex = "declareStatusDesc",key = "declareStatusDesc") + @ExcelHead(title = "报送状态",dataIndex = "declareStatusDesc") private String declareStatusDesc; } diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/FailEmployeeListDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/FailEmployeeListDTO.java index 7d2ae71d2..a6e79e5ec 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/FailEmployeeListDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/FailEmployeeListDTO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.taxdeclaration.dto; import com.engine.salary.annotation.TableTitle; +import com.engine.salary.util.excel.ExcelHead; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -23,7 +24,8 @@ public class FailEmployeeListDTO { private Long id; //姓名 - @TableTitle(title = "姓名",dataIndex = "employeeName",key = "employeeName") + @TableTitle(title = "姓名", dataIndex = "employeeName", key = "employeeName") + @ExcelHead(title = "姓名", dataIndex = "employeeName") private String employeeName; //个税扣缴义务人id @@ -31,18 +33,22 @@ public class FailEmployeeListDTO { private Long taxAgentId; //个税扣缴义务人名称 - @TableTitle(title = "个税扣缴义务人名称",dataIndex = "taxAgentName",key = "taxAgentName") + @TableTitle(title = "个税扣缴义务人名称", dataIndex = "taxAgentName", key = "taxAgentName") + @ExcelHead(title = "个税扣缴义务人名称", dataIndex = "taxAgentName") private String taxAgentName; //证件号码 - @TableTitle(title = "证件号码",dataIndex = "cardNum",key = "cardNum") + @TableTitle(title = "证件号码", dataIndex = "cardNum", key = "cardNum") + @ExcelHead(title = "证件号码", dataIndex = "cardNum") private String cardNum; //失败原因 - @TableTitle(title = "失败原因",dataIndex = "errorMsg",key = "errorMsg") + @TableTitle(title = "失败原因", dataIndex = "errorMsg", key = "errorMsg") + @ExcelHead(title = "失败原因", dataIndex = "errorMsg") private String errorMsg; //所得项目 - @TableTitle(title = "所得项目",dataIndex = "incomeCategory",key = "incomeCategory") + @TableTitle(title = "所得项目", dataIndex = "incomeCategory", key = "incomeCategory") + @ExcelHead(title = "所得项目", dataIndex = "incomeCategory") private String incomeCategory; } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index 72597d4f2..6382be9b4 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -3,7 +3,6 @@ package com.engine.salary.service.impl; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.entity.taxdeclaration.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.taxdeclaration.dto.FailEmployeeListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; @@ -13,6 +12,7 @@ import com.engine.salary.entity.taxdeclaration.po.*; import com.engine.salary.service.*; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.excel.ExcelHead; import com.engine.salary.util.excel.ExcelSheetData; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; @@ -168,11 +168,11 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar private void parseHeader(Class clazz, List headerList, List dataIndexList) { Field[] declaredFields = clazz.getDeclaredFields(); for (Field declaredField : declaredFields) { - if (!declaredField.isAnnotationPresent(SalaryTableColumn.class)) { + if (!declaredField.isAnnotationPresent(ExcelHead.class)) { continue; } - SalaryTableColumn annotation = declaredField.getAnnotation(SalaryTableColumn.class); - headerList.add(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.text())); + ExcelHead annotation = declaredField.getAnnotation(ExcelHead.class); + headerList.add(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.title())); dataIndexList.add(declaredField.getName()); } } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index b8633e57b..b5ddd14b4 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -23,6 +23,7 @@ import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.taxdeclaration.SourceEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper; +import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.service.*; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -56,6 +57,10 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar return MapperProxyFactory.getProxy(TaxDeclarationValueMapper.class); } + private TaxDeclareRecordMapper getTaxDeclareRecordMapper() { + return MapperProxyFactory.getProxy(TaxDeclareRecordMapper.class); + } + private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } @@ -151,10 +156,16 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar throw new SalaryRunTimeException("个税申报表不存在!"); } + Long taxDeclareRecordId = taxDeclaration.getTaxDeclareRecordId(); + TaxDeclareRecordPO declareRecordPO = getTaxDeclareRecordMapper().getById(taxDeclareRecordId); + if (declareRecordPO == null) { + throw new SalaryRunTimeException("个税申报记录不存在!"); + } + TaxDeclarationValuePO po = TaxDeclarationValuePO.builder() .id(IdGenerator.generate()) .taxDeclarationId(param.getTaxDeclarationId()) - .taxDeclareRecordId(taxDeclaration.getTaxDeclareRecordId()) + .taxDeclareRecordId(taxDeclareRecordId) .employeeId(param.getEmployeeId()) .employeeType(param.getEmployeeType()) .resultValue(param.getTaxReportColumnValues()) @@ -167,9 +178,12 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); encryptUtil.encrypt(po, TaxDeclarationValuePO.class); - getTaxDeclarationValueMapper().insertIgnoreNull(po); + //新增年终奖 + if (IncomeCategoryEnum.ONETIME_ANNUAL_BONUS.getValue().equals(taxDeclaration.getIncomeCategory())) { + autoAddWagesDeclare(declareRecordPO); + } } @Override diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 8fe875eb2..7f388cf8f 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -309,6 +309,12 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } + //补充正常工资薪金的申报人员 + newTaxDeclareRecords.forEach(taxDeclareRecordPO -> { + getTaxDeclarationValueService(user).autoAddWagesDeclare(taxDeclareRecordPO); + }); + + //更新核算记录状态 getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED); // // 记录日志 diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index e4746208c..b6963b187 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -653,4 +653,35 @@ public class TaxDeclarationController { } } +// @POST +// @Path("/downloadTemplate") +// @Produces(MediaType.APPLICATION_OCTET_STREAM) +// public Response getAll(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody DownloadTemplateParam param) { +// try { +// User user = HrmUserVarify.getUser(request, response); +// +// +// XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).downloadTemplate(queryParam); +// +// String fileName = "往期累计情况导入模板" + LocalDate.now(); +// +// try { +// fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); +// } catch (UnsupportedEncodingException e) { +// log.error(e.getMessage(), e); +// } +// +// StreamingOutput output = outputStream -> { +// workbook.write(outputStream); +// outputStream.flush(); +// }; +// response.setContentType("application/octet-stream"); +// return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); +// +// } catch (Exception e) { +// log.error("往期累计情况导入模板导出异常", e); +// throw e; +// } +// } + } From 06fe3144ba995ac3b3d98792c0a27f28af2dae66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 15:37:01 +0800 Subject: [PATCH 20/26] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/util/excel/DataTypeEnum.java | 32 +++++++++++++++++++ .../engine/salary/util/excel/ExcelHead.java | 28 ++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/com/engine/salary/util/excel/DataTypeEnum.java create mode 100644 src/com/engine/salary/util/excel/ExcelHead.java diff --git a/src/com/engine/salary/util/excel/DataTypeEnum.java b/src/com/engine/salary/util/excel/DataTypeEnum.java new file mode 100644 index 000000000..15e845cd9 --- /dev/null +++ b/src/com/engine/salary/util/excel/DataTypeEnum.java @@ -0,0 +1,32 @@ +package com.engine.salary.util.excel; + +import java.util.Arrays; +import java.util.Objects; + +public enum DataTypeEnum { + string("string", "字符类型"), + number("string", "数字类型"), + date("string", "日期类型"); + + private String value; + private String name; + + DataTypeEnum(String value, String name) { + this.value = value; + this.name = name; + } + + public String getValue() { + return value; + } + + public String getName() { + return name; + } + + + public static DataTypeEnum parseByValue(String value) { + return Arrays.stream(DataTypeEnum.values()).filter(typeEnum -> Objects.equals(typeEnum.getValue(), value)).findFirst().orElse(null); + } + +} diff --git a/src/com/engine/salary/util/excel/ExcelHead.java b/src/com/engine/salary/util/excel/ExcelHead.java new file mode 100644 index 000000000..cec7da51d --- /dev/null +++ b/src/com/engine/salary/util/excel/ExcelHead.java @@ -0,0 +1,28 @@ +package com.engine.salary.util.excel; + +import java.lang.annotation.*; + +/** + * 数据列表表头 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ExcelHead { + + String title() default ""; + + String dataIndex() default ""; + + DataTypeEnum dataType() default DataTypeEnum.string; + + int labelId() default -1; + + String width() default ""; + +} From 7e22711dcd684350c7006efbbc4ecbfa545ab9fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 15:47:05 +0800 Subject: [PATCH 21/26] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/TaxDeclarationAnnualListDTO.java | 11 +++++ .../dto/TaxDeclarationLaborListDTO.java | 40 +++++++++++++------ .../dto/TaxDeclarationWageListDTO.java | 26 ++++++++++++ .../impl/TaxDeclarationExcelServiceImpl.java | 28 ++----------- .../engine/salary/util/excel/ExcelUtil.java | 22 ++++++++++ 5 files changed, 89 insertions(+), 38 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationAnnualListDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationAnnualListDTO.java index 75b1b3191..696a3f9f7 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationAnnualListDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationAnnualListDTO.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.taxdeclaration.dto; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.annotation.TableTitle; +import com.engine.salary.util.excel.ExcelHead; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -31,59 +32,69 @@ public class TaxDeclarationAnnualListDTO { text = "工号", width = "10%", column = "jobNum" ) @TableTitle(title ="工号",dataIndex = "jobNum",key = "jobNum") + @ExcelHead(title ="工号",dataIndex = "jobNum") private String jobNum; @SalaryTableColumn( text = "姓名", width = "10%", column = "username" ) @TableTitle(title ="姓名",dataIndex = "username",key = "username") + @ExcelHead(title ="姓名",dataIndex = "username") private String username; @SalaryTableColumn( text = "证件类型", width = "10%", column = "cardType" ) @TableTitle(title ="证件类型",dataIndex = "cardType",key = "cardType") + @ExcelHead(title ="证件类型",dataIndex = "cardType") private String cardType; @SalaryTableColumn( text = "证件号码", width = "10%", column = "cardNum" ) @TableTitle(title ="证件号码",dataIndex = "cardNum",key = "cardNum") + @ExcelHead(title ="证件号码",dataIndex = "cardNum") private String cardNum; @SalaryTableColumn( text = "全年一次性奖金额", width = "10%", column = "annualIncome" ) @TableTitle(title ="全年一次性奖金额",dataIndex = "annualIncome",key = "annualIncome") + @ExcelHead(title ="全年一次性奖金额",dataIndex = "annualIncome") private String annualIncome; @SalaryTableColumn( text = "免税收入", width = "10%", column = "annualTaxFreeIncome" ) @TableTitle(title ="免税收入",dataIndex = "annualTaxFreeIncome",key = "annualTaxFreeIncome") + @ExcelHead(title ="免税收入",dataIndex = "annualTaxFreeIncome") private String annualTaxFreeIncome; @SalaryTableColumn( text = "其他", width = "10%", column = "annualOther" ) @TableTitle(title ="其他",dataIndex = "annualOther",key = "annualOther") + @ExcelHead(title ="其他",dataIndex = "annualOther") private String annualOther; @SalaryTableColumn( text = "准予扣除的捐赠额", width = "10%", column = "annualDonateTax" ) @TableTitle(title ="准予扣除的捐赠额",dataIndex = "annualDonateTax",key = "annualDonateTax") + @ExcelHead(title ="准予扣除的捐赠额",dataIndex = "annualDonateTax") private String annualDonateTax; @SalaryTableColumn( text = "减免税额", width = "10%", column = "annualTaxSavings" ) @TableTitle(title ="减免税额",dataIndex = "annualTaxSavings",key = "annualTaxSavings") + @ExcelHead(title ="减免税额",dataIndex = "annualTaxSavings") private String annualTaxSavings; @SalaryTableColumn( text = "备注", width = "10%", column = "annualRemark" ) @TableTitle(title ="备注",dataIndex = "annualRemark",key = "annualRemark") + @ExcelHead(title ="备注",dataIndex = "annualRemark") private String annualRemark; } diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationLaborListDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationLaborListDTO.java index 73872aa0a..ce03fd52c 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationLaborListDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationLaborListDTO.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.taxdeclaration.dto; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.annotation.TableTitle; +import com.engine.salary.util.excel.ExcelHead; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -30,78 +31,91 @@ public class TaxDeclarationLaborListDTO { @SalaryTableColumn( text = "工号", width = "10%", column = "jobNum" ) - @TableTitle(title ="工号",dataIndex = "jobNum",key = "jobNum") + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") + @ExcelHead(title = "工号", dataIndex = "jobNum") private String jobNum; @SalaryTableColumn( text = "姓名", width = "10%", column = "username" ) - @TableTitle(title ="姓名",dataIndex = "username",key = "username") + @TableTitle(title = "姓名", dataIndex = "username", key = "username") + @ExcelHead(title = "姓名", dataIndex = "username") private String username; @SalaryTableColumn( text = "证件类型", width = "10%", column = "cardType" ) - @TableTitle(title ="证件类型",dataIndex = "cardType",key = "cardType") + @TableTitle(title = "证件类型", dataIndex = "cardType", key = "cardType") + @ExcelHead(title = "证件类型", dataIndex = "cardType") private String cardType; @SalaryTableColumn( text = "证件号码", width = "10%", column = "cardNum" ) - @TableTitle(title ="证件号码",dataIndex = "cardNum",key = "cardNum") + @TableTitle(title = "证件号码", dataIndex = "cardNum", key = "cardNum") + @ExcelHead(title = "证件号码", dataIndex = "cardNum") private String cardNum; @SalaryTableColumn( text = "所得项目", width = "10%", column = "incomeItems" ) - @TableTitle(title ="所得项目",dataIndex = "incomeItems",key = "incomeItems") + @TableTitle(title = "所得项目", dataIndex = "incomeItems", key = "incomeItems") + @ExcelHead(title = "所得项目", dataIndex = "incomeItems") private String incomeItems; @SalaryTableColumn( text = "劳务收入", width = "10%", column = "laborIncome" ) - @TableTitle(title ="劳务收入",dataIndex = "laborIncome",key = "laborIncome") + @TableTitle(title = "劳务收入", dataIndex = "laborIncome", key = "laborIncome") + @ExcelHead(title = "劳务收入", dataIndex = "laborIncome") private String laborIncome; @SalaryTableColumn( text = "劳务免税收入", width = "10%", column = "laborTaxFreeIncome" ) - @TableTitle(title ="劳务免税收入",dataIndex = "laborTaxFreeIncome",key = "laborTaxFreeIncome") + @TableTitle(title = "劳务免税收入", dataIndex = "laborTaxFreeIncome", key = "laborTaxFreeIncome") + @ExcelHead(title = "劳务免税收入", dataIndex = "laborTaxFreeIncome") private String laborTaxFreeIncome; @SalaryTableColumn( text = "商业健康保险", width = "10%", column = "commercialHealthInsurance" ) - @TableTitle(title ="商业健康保险",dataIndex = "commercialHealthInsurance",key = "commercialHealthInsurance") + @TableTitle(title = "商业健康保险", dataIndex = "commercialHealthInsurance", key = "commercialHealthInsurance") + @ExcelHead(title = "商业健康保险", dataIndex = "commercialHealthInsurance") private String commercialHealthInsurance; @SalaryTableColumn( text = "税延养老保险", width = "10%", column = "taxDeferredEndowmentInsurance" ) - @TableTitle(title ="税延养老保险",dataIndex = "taxDeferredEndowmentInsurance",key = "taxDeferredEndowmentInsurance") + @TableTitle(title = "税延养老保险", dataIndex = "taxDeferredEndowmentInsurance", key = "taxDeferredEndowmentInsurance") + @ExcelHead(title = "税延养老保险", dataIndex = "taxDeferredEndowmentInsurance") private String taxDeferredEndowmentInsurance; @SalaryTableColumn( text = "其他", width = "10%", column = "other" ) - @TableTitle(title ="其他",dataIndex = "other",key = "other") + @TableTitle(title = "其他", dataIndex = "other", key = "other") + @ExcelHead(title = "其他", dataIndex = "other") private String other; @SalaryTableColumn( text = "准予扣除的捐赠额", width = "10%", column = "allowedDonation" ) - @TableTitle(title ="准予扣除的捐赠额",dataIndex = "allowedDonation",key = "allowedDonation") + @TableTitle(title = "准予扣除的捐赠额", dataIndex = "allowedDonation", key = "allowedDonation") + @ExcelHead(title = "准予扣除的捐赠额", dataIndex = "allowedDonation") private String allowedDonation; @SalaryTableColumn( text = "减免税额", width = "10%", column = "taxDeduction" ) - @TableTitle(title ="减免税额",dataIndex = "taxDeduction",key = "taxDeduction") + @TableTitle(title = "减免税额", dataIndex = "taxDeduction", key = "taxDeduction") + @ExcelHead(title = "减免税额", dataIndex = "taxDeduction") private String taxDeduction; @SalaryTableColumn( text = "备注", width = "10%", column = "description" ) - @TableTitle(title ="备注",dataIndex = "description",key = "description") + @TableTitle(title = "备注", dataIndex = "description", key = "description") + @ExcelHead(title = "备注", dataIndex = "description") private String description; } diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationWageListDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationWageListDTO.java index 3725aaf27..419f8f1e0 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationWageListDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationWageListDTO.java @@ -4,6 +4,7 @@ import com.cloudstore.eccom.pc.table.WeaTableType; import com.engine.salary.annotation.SalaryTable; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.annotation.TableTitle; +import com.engine.salary.util.excel.ExcelHead; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -35,101 +36,126 @@ public class TaxDeclarationWageListDTO { @SalaryTableColumn(text = "工号", width = "10%", column = "jobNum") @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") + @ExcelHead(title = "工号", dataIndex = "jobNum") private String jobNum; @SalaryTableColumn(text = "姓名", width = "10%", column = "username") @TableTitle(title = "姓名", dataIndex = "username", key = "username") + @ExcelHead(title = "姓名", dataIndex = "username") private String username; @SalaryTableColumn(text = "证件类型", width = "10%", column = "cardType") @TableTitle(title = "证件类型", dataIndex = "cardType", key = "cardType") + @ExcelHead(title = "证件类型", dataIndex = "cardType") private String cardType; @SalaryTableColumn(text = "证件号码", width = "10%", column = "cardNum") @TableTitle(title = "证件号码", dataIndex = "cardNum", key = "cardNum") + @ExcelHead(title = "证件号码", dataIndex = "cardNum") private String cardNum; @SalaryTableColumn(text = "本期收入", width = "10%", column = "income") @TableTitle(title = "本期收入", dataIndex = "income", key = "income") + @ExcelHead(title = "本期收入", dataIndex = "income") private String income; @SalaryTableColumn(text = "本期免税收入", width = "10%", column = "taxFreeIncome") @TableTitle(title = "本期免税收入", dataIndex = "taxFreeIncome", key = "taxFreeIncome") + @ExcelHead(title = "本期免税收入", dataIndex = "taxFreeIncome") private String taxFreeIncome; @SalaryTableColumn(text = "基本养老保险费", width = "10%", column = "endowmentInsurance") @TableTitle(title = "基本养老保险费", dataIndex = "endowmentInsurance", key = "endowmentInsurance") + @ExcelHead(title = "基本养老保险费", dataIndex = "endowmentInsurance") private String endowmentInsurance; @SalaryTableColumn(text = "基本医疗保险费", width = "10%", column = "medicalInsurance") @TableTitle(title = "基本医疗保险费", dataIndex = "medicalInsurance", key = "medicalInsurance") + @ExcelHead(title = "基本医疗保险费", dataIndex = "medicalInsurance") private String medicalInsurance; @SalaryTableColumn(text = "失业保险费", width = "10%", column = "unemploymentInsurance") @TableTitle(title = "失业保险费", dataIndex = "unemploymentInsurance", key = "unemploymentInsurance") + @ExcelHead(title = "失业保险费", dataIndex = "unemploymentInsurance") private String unemploymentInsurance; @SalaryTableColumn(text = "住房公积金", width = "10%", column = "housingProvidentFund") @TableTitle(title = "住房公积金", dataIndex = "housingProvidentFund", key = "housingProvidentFund") + @ExcelHead(title = "住房公积金", dataIndex = "housingProvidentFund") private String housingProvidentFund; @SalaryTableColumn(text = "累计子女教育", width = "10%", column = "addUpChildEducation") @TableTitle(title = "累计子女教育", dataIndex = "addUpChildEducation", key = "addUpChildEducation") + @ExcelHead(title = "累计子女教育", dataIndex = "addUpChildEducation") private String addUpChildEducation; @SalaryTableColumn(text = "累计住房贷款利息", width = "10%", column = "addUpHousingLoanInterest") @TableTitle(title = "累计住房贷款利息", dataIndex = "addUpHousingLoanInterest", key = "addUpHousingLoanInterest") + @ExcelHead(title = "累计住房贷款利息", dataIndex = "addUpHousingLoanInterest") private String addUpHousingLoanInterest; @SalaryTableColumn(text = "累计住房租金", width = "10%", column = "addUpHousingRent") @TableTitle(title = "累计住房租金", dataIndex = "addUpHousingRent", key = "addUpHousingRent") + @ExcelHead(title = "累计住房租金", dataIndex = "addUpHousingRent") private String addUpHousingRent; @SalaryTableColumn(text = "累计继续教育", width = "10%", column = "addUpContinuingEducation") @TableTitle(title = "累计继续教育", dataIndex = "addUpContinuingEducation", key = "addUpContinuingEducation") + @ExcelHead(title = "累计继续教育", dataIndex = "addUpContinuingEducation") private String addUpContinuingEducation; @SalaryTableColumn(text = "累计赡养老人", width = "10%", column = "addUpSupportElderly") @TableTitle(title = "累计赡养老人", dataIndex = "addUpSupportElderly", key = "addUpSupportElderly") + @ExcelHead(title = "累计赡养老人", dataIndex = "addUpSupportElderly") private String addUpSupportElderly; @SalaryTableColumn(text = "累计大病医疗", width = "10%", column = "addUpIllnessMedical") @TableTitle(title = "累计大病医疗", dataIndex = "addUpIllnessMedical", key = "addUpIllnessMedical") + @ExcelHead(title = "累计大病医疗", dataIndex = "addUpIllnessMedical") private String addUpIllnessMedical; @SalaryTableColumn(text = "累计3岁以下婴幼儿照护", width = "10%", column = "addUpInfantCare") @TableTitle(title = "累计3岁以下婴幼儿照护", dataIndex = "addUpInfantCare", key = "addUpInfantCare") + @ExcelHead(title = "累计3岁以下婴幼儿照护", dataIndex = "addUpInfantCare") private String addUpInfantCare; @SalaryTableColumn(text = "累计个人养老金", width = "10%", column = "addUpPrivatePension") @TableTitle(title = "累计个人养老金", dataIndex = "addUpPrivatePension", key = "addUpPrivatePension") + @ExcelHead(title = "累计个人养老金", dataIndex = "addUpPrivatePension") private String addUpPrivatePension; @SalaryTableColumn(text = "企业(职业)年金", width = "10%", column = "annuity") @TableTitle(title = "企业(职业)年金", dataIndex = "annuity", key = "annuity") + @ExcelHead(title = "企业(职业)年金", dataIndex = "annuity") private String annuity; @SalaryTableColumn(text = "商业健康保险", width = "10%", column = "commercialHealthInsurance") @TableTitle(title = "商业健康保险", dataIndex = "commercialHealthInsurance", key = "commercialHealthInsurance") + @ExcelHead(title = "商业健康保险", dataIndex = "commercialHealthInsurance") private String commercialHealthInsurance; @SalaryTableColumn(text = "税延养老保险", width = "10%", column = "taxDeferredEndowmentInsurance") @TableTitle(title = "税延养老保险", dataIndex = "taxDeferredEndowmentInsurance", key = "taxDeferredEndowmentInsurance") + @ExcelHead(title = "税延养老保险", dataIndex = "taxDeferredEndowmentInsurance") private String taxDeferredEndowmentInsurance; @SalaryTableColumn(text = "其他", width = "10%", column = "other") @TableTitle(title = "其他", dataIndex = "other", key = "other") + @ExcelHead(title = "其他", dataIndex = "other") private String other; @SalaryTableColumn(text = "准予扣除的捐赠额", width = "10%", column = "allowedDonation") @TableTitle(title = "准予扣除的捐赠额", dataIndex = "allowedDonation", key = "allowedDonation") + @ExcelHead(title = "准予扣除的捐赠额", dataIndex = "allowedDonation") private String allowedDonation; @SalaryTableColumn(text = "减免税额", width = "10%", column = "taxDeduction") @TableTitle(title = "减免税额", dataIndex = "taxDeduction", key = "taxDeduction") + @ExcelHead(title = "减免税额", dataIndex = "taxDeduction") private String taxDeduction; @SalaryTableColumn(text = "备注", width = "10%", column = "description") @TableTitle(title = "备注", dataIndex = "description", key = "description") + @ExcelHead(title = "备注", dataIndex = "description") private String description; } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index 957957790..c9eb8796a 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -2,7 +2,6 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationAnnualListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationWageListDTO; @@ -23,7 +22,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; import java.util.Objects; @@ -68,7 +66,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List dataIndexList = Lists.newArrayList(); if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.WAGES_AND_SALARIES.getValue())) { // 解析表头 - parseHeader(TaxDeclarationWageListDTO.class, headerList, dataIndexList); + ExcelUtil.parseHeader(TaxDeclarationWageListDTO.class, headerList, dataIndexList); rows.add(headerList); for (int i = 0; i < totalPages; i++) { TaxDeclarationDetailListQueryParam queryParam = new TaxDeclarationDetailListQueryParam(); @@ -89,7 +87,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar } if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.REMUNERATION_FOR_LABOR.getValue())) { // 解析表头 - parseHeader(TaxDeclarationLaborListDTO.class, headerList, dataIndexList); + ExcelUtil.parseHeader(TaxDeclarationLaborListDTO.class, headerList, dataIndexList); rows.add(headerList); for (int i = 0; i < totalPages; i++) { TaxDeclarationDetailListQueryParam queryParam = new TaxDeclarationDetailListQueryParam(); @@ -111,7 +109,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.ONETIME_ANNUAL_BONUS.getValue())) { // 解析表头 - parseHeader(TaxDeclarationAnnualListDTO.class, headerList, dataIndexList); + ExcelUtil.parseHeader(TaxDeclarationAnnualListDTO.class, headerList, dataIndexList); rows.add(headerList); for (int i = 0; i < totalPages; i++) { TaxDeclarationDetailListQueryParam queryParam = new TaxDeclarationDetailListQueryParam(); @@ -133,24 +131,4 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar return ExcelUtil.genWorkbookV2(rows, sheetName); } - - /** - * 解析表头 - * - * @param clazz - * @param headerList - * @param dataIndexList - * @param - */ - private void parseHeader(Class clazz, List headerList, List dataIndexList) { - Field[] declaredFields = clazz.getDeclaredFields(); - for (Field declaredField : declaredFields) { - if (!declaredField.isAnnotationPresent(SalaryTableColumn.class)) { - continue; - } - SalaryTableColumn annotation = declaredField.getAnnotation(SalaryTableColumn.class); - headerList.add(SalaryI18nUtil.getI18nLabel( annotation.labelId(), annotation.text())); - dataIndexList.add(declaredField.getName()); - } - } } diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index c50c11d2b..877714295 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -1,6 +1,7 @@ package com.engine.salary.util.excel; import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.FillPatternType; @@ -9,6 +10,7 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.usermodel.*; import java.awt.*; +import java.lang.reflect.Field; import java.util.Date; import java.util.List; @@ -267,4 +269,24 @@ public class ExcelUtil { } return workbook; } + + /** + * 解析表头 + * + * @param clazz + * @param headerList + * @param dataIndexList + * @param + */ + public static void parseHeader(Class clazz, List headerList, List dataIndexList) { + Field[] declaredFields = clazz.getDeclaredFields(); + for (Field declaredField : declaredFields) { + if (!declaredField.isAnnotationPresent(ExcelHead.class)) { + continue; + } + ExcelHead annotation = declaredField.getAnnotation(ExcelHead.class); + headerList.add(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.title())); + dataIndexList.add(declaredField.getName()); + } + } } From 622bd9ceb86030b53d05566ca5c432020c11ee98 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 28 Dec 2023 16:44:01 +0800 Subject: [PATCH 22/26] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=8A=A5=E9=80=81=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/employeedeclare/bo/EmployeeDeclareBO.java | 3 +-- .../mapper/employeedeclare/EmployeeDeclareMapper.xml | 5 ++--- .../service/impl/EmployeeDeclareExcelServiceImpl.java | 11 +++++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java index d3d91e5f8..48898d83d 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java @@ -3,7 +3,6 @@ package com.engine.salary.entity.employeedeclare.bo; import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareExcelDTO; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.enums.employeedeclare.CardTypeEnum; -import com.engine.salary.enums.employeedeclare.EmploymentTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -27,7 +26,7 @@ public class EmployeeDeclareBO { .cardType(dto.getCardType() == null ? null :CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue()) .cardNum(dto.getCardNum()) .employmentStatus(StringUtils.isBlank(dto.getEmploymentStatus()) ? null : new Integer(dto.getEmploymentStatus())) - .employmentType(EmploymentTypeEnum.getValueByDefaultLabel(dto.getEmploymentType())) + .employmentType(StringUtils.isBlank(dto.getEmploymentType()) ? null : new Integer(dto.getEmploymentType())) .employmentFirstYear(dto.getEmploymentFirstYear()) .mobile(dto.getMobile()) .employmentDate(StringUtils.isBlank(dto.getEmploymentDate()) ? null : SalaryDateUtil.stringToDate(dto.getEmploymentDate()) ) diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml index 890181735..335d8ed7c 100644 --- a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml @@ -452,8 +452,7 @@ update_time ) VALUES - ( - + ( #{item.birthday}, #{item.cardNum}, #{item.cardType}, @@ -486,8 +485,8 @@ #{item.taxCycle}, #{item.tenantKey}, #{item.updateTime} - ) + diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java index 4bfb84b78..520dcc68a 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java @@ -105,7 +105,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee row.add(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel()); row.add(employeeDeclare.getCardNum()); row.add(employmentStatusEnum == null ? "" : employmentStatusEnum.getDefaultLabel()); - row.add(employmentTypeEnum == null ? "" : employmentTypeEnum.getDefaultLabel()); + row.add(employmentTypeEnum == null ? EmploymentTypeEnum.EMPLOYEE.getDefaultLabel() : employmentTypeEnum.getDefaultLabel()); row.add(employeeDeclare.getEmploymentFirstYear()); row.add(employeeDeclare.getMobile()); row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getEmploymentDate())); @@ -327,6 +327,9 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee errorData.add(errorMessageMap); } } else { + if (StringUtils.isNotBlank(dataValue) && dataValue.length() >= 10) { + dataValue = dataValue.substring(0,10); + } if (!SalaryDateUtil.checkDay(dataValue)) { isError = true; Map errorMessageMap = Maps.newHashMap(); @@ -440,7 +443,8 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee } else { EmployeeDeclarePO newEmployeeDeclare = new EmployeeDeclarePO(); BeanUtils.copyProperties(employeeDeclare, newEmployeeDeclare); - BeanUtils.copyProperties(employeeDeclareExcel, newEmployeeDeclare); + EmployeeDeclarePO employeeDeclarePO = EmployeeDeclareBO.convert2PO(employeeDeclareExcel); + BeanUtils.copyProperties(employeeDeclarePO, newEmployeeDeclare, getNullPropertyNames(employeeDeclarePO)); newEmployeeDeclare.setNewEmployeeInfo(StringUtils.equals(employeeDeclare.toCompareString(), newEmployeeDeclare.toCompareString()) ? 0 : 1); newEmployeeDeclare.setUpdateTime(now); needUpdateEmployeeDeclares.add(newEmployeeDeclare); @@ -481,7 +485,6 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee if (isError) { failCount++; failRowIndex++; - errorData.add(map); continue; } successCount++; @@ -496,7 +499,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); - apidatas.put("errorNotice", errorData); + apidatas.put("errorData", errorData); // 发送导入回调信息 // salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets); From 463e56d2cf2020eb8d6977beec47fc31f24bab19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 18:12:38 +0800 Subject: [PATCH 23/26] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=94=B3=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/DownloadTemplateParam.java | 26 ++ .../service/TaxDeclarationExcelService.java | 15 ++ .../service/TaxDeclarationValueService.java | 2 + .../impl/TaxDeclarationExcelServiceImpl.java | 254 ++++++++++++++++-- .../impl/TaxDeclarationValueServiceImpl.java | 22 +- .../salary/web/TaxDeclarationController.java | 75 +++--- .../wrapper/TaxDeclareRecordWrapper.java | 12 + 7 files changed, 352 insertions(+), 54 deletions(-) create mode 100644 src/com/engine/salary/entity/taxdeclaration/param/DownloadTemplateParam.java diff --git a/src/com/engine/salary/entity/taxdeclaration/param/DownloadTemplateParam.java b/src/com/engine/salary/entity/taxdeclaration/param/DownloadTemplateParam.java new file mode 100644 index 000000000..d9371b3fd --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/DownloadTemplateParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DownloadTemplateParam { + /** + * 申报表id,下载模板 + */ + @DataCheck(require = true,message = "imageId为空") + Long taxDeclarationId; + + + + /** + * 导入文件id + */ + String imageId; +} diff --git a/src/com/engine/salary/service/TaxDeclarationExcelService.java b/src/com/engine/salary/service/TaxDeclarationExcelService.java index 15d6c81fd..e5e154fe7 100644 --- a/src/com/engine/salary/service/TaxDeclarationExcelService.java +++ b/src/com/engine/salary/service/TaxDeclarationExcelService.java @@ -1,9 +1,12 @@ package com.engine.salary.service; import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.DownloadTemplateParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.util.Map; + /** * 个税申报表导出 *

Copyright: Copyright (c) 2022

@@ -45,4 +48,16 @@ public interface TaxDeclarationExcelService { * @return */ XSSFWorkbook exportEmployee4Fail(AbnormalEmployeeListQueryParam queryParam); + + XSSFWorkbook downloadTemplate(DownloadTemplateParam param); + /** + * 预览 + */ + Map preview(DownloadTemplateParam importParam); + + /** + * 导入数据 + */ + Map importData(DownloadTemplateParam importParam); + } diff --git a/src/com/engine/salary/service/TaxDeclarationValueService.java b/src/com/engine/salary/service/TaxDeclarationValueService.java index 70bd6f729..969292efb 100644 --- a/src/com/engine/salary/service/TaxDeclarationValueService.java +++ b/src/com/engine/salary/service/TaxDeclarationValueService.java @@ -36,6 +36,7 @@ public interface TaxDeclarationValueService { * @return */ List listByTaxDeclarationIds(Collection taxDeclarationIds); + List listByTaxDeclarationId(Long taxDeclarationIds); /** * 查询个税申报表明细 @@ -59,6 +60,7 @@ public interface TaxDeclarationValueService { * @param taxDeclarationValues */ void batchSave(List taxDeclarationValues); + void batchEdit(List taxDeclarationValues); void save(TaxDeclareRecordDetailSaveParam param); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index 6382be9b4..8aac2c649 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -1,30 +1,53 @@ package com.engine.salary.service.impl; +import com.api.formmode.mybatis.util.SqlProxyHandle; 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.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.taxdeclaration.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.taxdeclaration.dto.FailEmployeeListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.DownloadTemplateParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; import com.engine.salary.entity.taxdeclaration.po.*; +import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.enums.taxdeclaration.SourceEnum; +import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.engine.salary.util.excel.ExcelHead; +import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSheetData; +import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import dm.jdbc.util.IdGenerator; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +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; import weaver.hrm.User; -import java.lang.reflect.Field; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; + +import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; /** * 个税申报表导出 @@ -57,6 +80,19 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar return ServiceUtil.getService(TaxDeclareFailServiceImpl.class, user); } + + private TaxReportColumnService getTaxReportColumnService(User user) { + return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user); + } + + private SalarySysConfMapper getSalarySysConfMapper() { + return SqlProxyHandle.getProxy(SalarySysConfMapper.class); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + @Override public XSSFWorkbook exportTaxDeclarationValue(TaxDeclarationValueListQueryParam queryParam) { // 查询个税申报表 @@ -140,7 +176,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar // 导出的表头 List headerList = Lists.newArrayList(); List dataIndexList = Lists.newArrayList(); - parseHeader(clazz, headerList, dataIndexList); + ExcelUtil.parseHeader(clazz, headerList, dataIndexList); // 导出的数据 List> rows = Lists.newArrayListWithExpectedSize(dtoList.size()); dtoList.forEach(dto -> { @@ -157,23 +193,195 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar return excelSheetData; } - /** - * 解析表头 - * - * @param clazz - * @param headerList - * @param dataIndexList - * @param - */ - private void parseHeader(Class clazz, List headerList, List dataIndexList) { - Field[] declaredFields = clazz.getDeclaredFields(); - for (Field declaredField : declaredFields) { - if (!declaredField.isAnnotationPresent(ExcelHead.class)) { - continue; - } - ExcelHead annotation = declaredField.getAnnotation(ExcelHead.class); - headerList.add(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.title())); - dataIndexList.add(declaredField.getName()); + @Override + public XSSFWorkbook downloadTemplate(DownloadTemplateParam param) { + TaxDeclarationPO declarationPO = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); + IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(declarationPO.getIncomeCategory()); + List taxReportColumnPOS = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum); + + + List heads = new ArrayList<>(); + heads.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); + heads.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); + heads.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); + heads.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); + heads.addAll(SalaryEntityUtil.properties(taxReportColumnPOS, TaxReportColumnPO::getReportColumnName, Collectors.toList())); + + List> rowList = new ArrayList<>(); + rowList.add(heads); + XSSFWorkbook book = ExcelUtil.genWorkbookV2(rowList, incomeCategoryEnum.getDefaultLabel()); + return book; + } + + @Override + public Map preview(DownloadTemplateParam importParam) { + //excel文件id + String imageId = Util.null2String(importParam.getImageId()); + Validate.notBlank(imageId, "imageId为空"); + + InputStream fileInputStream = null; + Map map = new HashMap<>(); + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(importParam.getImageId())); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + map.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); + map.put("list", ExcelParseHelper.parse2List(sheet, 1, 0)); + return map; + } finally { + IOUtils.closeQuietly(fileInputStream); } } + + @Override + public Map importData(DownloadTemplateParam param) { + //查询对于人员信息导入筛选的全局配置 + SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); + String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; + + + // 租户下所有的人员 + List salaryEmployees = getSalaryEmployeeService(user).listAllForReport(); + Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); + Map emps = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getEmployeeId); + + + TaxDeclarationPO declarationPO = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); + IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(declarationPO.getIncomeCategory()); + List taxReportColumnPOS = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum); + Map nameColumnMap = SalaryEntityUtil.convert2Map(taxReportColumnPOS, TaxReportColumnPO::getReportColumnName); + + List taxDeclarationValuePOS = getTaxDeclarationValueService(user).listByTaxDeclarationId(declarationPO.getId()); + Map empDeclarationValueMap = SalaryEntityUtil.convert2Map(taxDeclarationValuePOS, TaxDeclarationValuePO::getEmployeeId); + + // 索引(用于计算进度) + int index = 0; + // 失败的数量 + int failCount = 0; + // 成功的数量 + int successCount = 0; + Date now = new Date(); + + List addList = Lists.newArrayList(); + List editList = Lists.newArrayList(); + + + InputStream fileInputStream = null; + try { + + + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + + // 错误提示信息 + List excelComments = Lists.newArrayList(); + // 存在错误的那行数据 + List> errorDatas = Lists.newArrayList(); + // 表头 + List headers; + headers = ExcelSupport.getSheetHeader(sheet, 0); + List> data = ExcelParseHelper.parse2Map(sheet, 1, 0); + + if (CollectionUtils.isEmpty(headers)) { + throw new RuntimeException("表头为空"); + } + if (CollectionUtils.isEmpty(data)) { + throw new RuntimeException("无数据"); + } + for (int i = 0; i < data.size(); i++) { + + String row = "第" + (i + 2) + "行"; + + boolean isError = false; + Map map = data.get(i); + Long employeeId = 0L; + + String username = (String) map.getOrDefault("姓名", ""); + String deparmentName = (String) map.getOrDefault("部门", ""); + String mobile = (String) map.getOrDefault("手机号", ""); + String workcode = (String) map.getOrDefault("工号", ""); + + if (StringUtils.isEmpty(username) && "0".equals(confValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空")); + excelComments.add(errorMessageMap); + } else { + //筛选导入人员信息可以在人力资源池中匹配到的人员信息 + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, username, deparmentName, mobile, workcode, null); + + if (CollectionUtils.isEmpty(employeeSameIds)) { + isError = true; + Map 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 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) { + failCount++; + errorDatas.add(map); + continue; + } + + successCount++; + + Map valueMap = Maps.newHashMap(); + for (TaxReportColumnPO taxReportColumn : taxReportColumnPOS) { + Object value = map.get(taxReportColumn.getReportColumnName()); + valueMap.put(taxReportColumn.getReportColumnDataIndex(), value != null ? value.toString() : Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""); + } + + if (empDeclarationValueMap.containsKey(employeeId)) { + TaxDeclarationValuePO taxDeclarationValue =empDeclarationValueMap.get(employeeId); + taxDeclarationValue.setResultValue(valueMap); + taxDeclarationValue.setResultValueJson(JsonUtil.toJsonString(valueMap)); + taxDeclarationValue.setUpdateTime(new Date()); + taxDeclarationValue.setSource(SourceEnum.IMP.getValue()); + editList.add(taxDeclarationValue); + } else { + //新增 + TaxDeclarationValuePO taxDeclarationValue = TaxDeclarationValuePO.builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(declarationPO.getTaxDeclareRecordId()) + .taxDeclarationId(declarationPO.getId()) + .employeeType(EmployeeTypeEnum.ORGANIZATION.getValue()) + .employeeId(employeeId) + .resultValue(valueMap) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .creator(employeeId) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(now) + .updateTime(now) + .source(SourceEnum.IMP.getValue()) + .build(); + addList.add(taxDeclarationValue); + } + } + + getTaxDeclarationValueService(user).batchSave(addList); + getTaxDeclarationValueService(user).batchEdit(editList); + + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + + return null; + } + } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index b5ddd14b4..80e1c8209 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -94,6 +94,12 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar return decryptBatch(taxDeclarationValues); } + @Override + public List listByTaxDeclarationId(Long taxDeclarationId) { + List taxDeclarationValues = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationId(taxDeclarationId).build()); + return decryptBatch(taxDeclarationValues); + } + @Override public List listByTaxDeclarationIdsNoDecrypt(Collection taxDeclarationIds) { return getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build()); @@ -144,7 +150,21 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar List> partition = Lists.partition(taxDeclarationValues, 100); for (List subTaxDeclarationValues : partition) { subTaxDeclarationValues.forEach(getTaxDeclarationValueMapper()::insertIgnoreNull); -// getTaxDeclarationValueMapper().batchInsert(subTaxDeclarationValues); + } + } + } + + @Override + public void batchEdit(List taxDeclarationValues) { + if (CollectionUtils.isNotEmpty(taxDeclarationValues)) { + // 加密 + taxDeclarationValues.forEach(taxDeclarationValue -> + taxDeclarationValue.setResultValueJson(JsonUtil.toJsonString(taxDeclarationValue.getResultValue()))); + taxDeclarationValues = encryptUtil.encryptList(taxDeclarationValues, TaxDeclarationValuePO.class); + // 分批保存 + List> partition = Lists.partition(taxDeclarationValues, 100); + for (List subTaxDeclarationValues : partition) { + subTaxDeclarationValues.forEach(getTaxDeclarationValueMapper()::updateIgnoreNull); } } } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index b6963b187..dc61a0458 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -653,35 +653,50 @@ public class TaxDeclarationController { } } -// @POST -// @Path("/downloadTemplate") -// @Produces(MediaType.APPLICATION_OCTET_STREAM) -// public Response getAll(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody DownloadTemplateParam param) { -// try { -// User user = HrmUserVarify.getUser(request, response); -// -// -// XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).downloadTemplate(queryParam); -// -// String fileName = "往期累计情况导入模板" + LocalDate.now(); -// -// try { -// fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); -// } catch (UnsupportedEncodingException e) { -// log.error(e.getMessage(), e); -// } -// -// StreamingOutput output = outputStream -> { -// workbook.write(outputStream); -// outputStream.flush(); -// }; -// response.setContentType("application/octet-stream"); -// return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); -// -// } catch (Exception e) { -// log.error("往期累计情况导入模板导出异常", e); -// throw e; -// } -// } + @POST + @Path("/downloadTemplate") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response downloadTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DownloadTemplateParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).downloadTemplate(param); + + String fileName = "申报表导入模板" + LocalDate.now(); + + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + log.error(e.getMessage(), e); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + + } catch (Exception e) { + log.error("申报表导入模板导出异常", e); + throw e; + } + } + + @POST + @Path("/preview") + @Produces(MediaType.APPLICATION_JSON) + public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DownloadTemplateParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::preview, importParam); + } + + @POST + @Path("/importData") + @Produces(MediaType.APPLICATION_JSON) + public String importAddUpDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DownloadTemplateParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::importData, importParam); + } } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 18c81327d..fed3fbe32 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -755,4 +755,16 @@ public class TaxDeclareRecordWrapper extends Service { .resultValue(declarationValuePO.getResultValue()) .build(); } + + public XSSFWorkbook downloadTemplate(DownloadTemplateParam param) { + return getTaxDeclarationExcelService(user).downloadTemplate(param); + } + + public Map preview(DownloadTemplateParam param) { + return getTaxDeclarationExcelService(user).preview(param); + } + + public Map importData(DownloadTemplateParam param) { + return getTaxDeclarationExcelService(user).importData(param); + } } From df16be5dd732970acc1a46a91171ad190554e4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 18:45:52 +0800 Subject: [PATCH 24/26] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=94=B3=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TaxDeclarationExcelServiceImpl.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index 8aac2c649..a4ac55966 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -241,14 +241,12 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar // 租户下所有的人员 List salaryEmployees = getSalaryEmployeeService(user).listAllForReport(); - Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); - Map emps = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getEmployeeId); TaxDeclarationPO declarationPO = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(declarationPO.getIncomeCategory()); List taxReportColumnPOS = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum); - Map nameColumnMap = SalaryEntityUtil.convert2Map(taxReportColumnPOS, TaxReportColumnPO::getReportColumnName); + List taxReportColumnNames = SalaryEntityUtil.properties(taxReportColumnPOS, TaxReportColumnPO::getReportColumnName, Collectors.toList()); List taxDeclarationValuePOS = getTaxDeclarationValueService(user).listByTaxDeclarationId(declarationPO.getId()); Map empDeclarationValueMap = SalaryEntityUtil.convert2Map(taxDeclarationValuePOS, TaxDeclarationValuePO::getEmployeeId); @@ -268,7 +266,6 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar InputStream fileInputStream = null; try { - fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); @@ -277,8 +274,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar // 存在错误的那行数据 List> errorDatas = Lists.newArrayList(); // 表头 - List headers; - headers = ExcelSupport.getSheetHeader(sheet, 0); + List headers = ExcelSupport.getSheetHeader(sheet, 0); List> data = ExcelParseHelper.parse2Map(sheet, 1, 0); if (CollectionUtils.isEmpty(headers)) { @@ -287,6 +283,12 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar if (CollectionUtils.isEmpty(data)) { throw new RuntimeException("无数据"); } + + Optional first = taxReportColumnNames.stream().filter(name -> !headers.contains(name)).findFirst(); + if (first.isPresent()) { + throw new RuntimeException("申报模板异常,缺失" + first.get() + "列"); + } + for (int i = 0; i < data.size(); i++) { String row = "第" + (i + 2) + "行"; @@ -347,7 +349,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar } if (empDeclarationValueMap.containsKey(employeeId)) { - TaxDeclarationValuePO taxDeclarationValue =empDeclarationValueMap.get(employeeId); + TaxDeclarationValuePO taxDeclarationValue = empDeclarationValueMap.get(employeeId); taxDeclarationValue.setResultValue(valueMap); taxDeclarationValue.setResultValueJson(JsonUtil.toJsonString(valueMap)); taxDeclarationValue.setUpdateTime(new Date()); From 7c50e388674b17657fc3675ccc3760600a79cc67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 19:19:09 +0800 Subject: [PATCH 25/26] =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202312270603.sql | 5 +++++ resource/sqlupgrade/GS/sql202312270603.sql | 5 +++++ resource/sqlupgrade/JC/sql202312270603.sql | 5 +++++ resource/sqlupgrade/Mysql/sql202312270603.sql | 5 +++-- resource/sqlupgrade/Oracle/sql202312270603.sql | 5 +++++ resource/sqlupgrade/PG/sql202312270603.sql | 4 +++- resource/sqlupgrade/SQLServer/sql202312270603.sql | 3 +++ resource/sqlupgrade/ST/sql202312270603.sql | 5 +++++ 8 files changed, 34 insertions(+), 3 deletions(-) diff --git a/resource/sqlupgrade/DM/sql202312270603.sql b/resource/sqlupgrade/DM/sql202312270603.sql index 99adc68e5..f9aba2b22 100644 --- a/resource/sqlupgrade/DM/sql202312270603.sql +++ b/resource/sqlupgrade/DM/sql202312270603.sql @@ -3,3 +3,8 @@ ALTER TABLE hrsa_tax_declaration_value add ( ); / +ALTER TABLE declare_request_id add ( + declare_request_id varchar2(100) +); +/ + diff --git a/resource/sqlupgrade/GS/sql202312270603.sql b/resource/sqlupgrade/GS/sql202312270603.sql index 99adc68e5..f9aba2b22 100644 --- a/resource/sqlupgrade/GS/sql202312270603.sql +++ b/resource/sqlupgrade/GS/sql202312270603.sql @@ -3,3 +3,8 @@ ALTER TABLE hrsa_tax_declaration_value add ( ); / +ALTER TABLE declare_request_id add ( + declare_request_id varchar2(100) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202312270603.sql b/resource/sqlupgrade/JC/sql202312270603.sql index 99adc68e5..f9aba2b22 100644 --- a/resource/sqlupgrade/JC/sql202312270603.sql +++ b/resource/sqlupgrade/JC/sql202312270603.sql @@ -3,3 +3,8 @@ ALTER TABLE hrsa_tax_declaration_value add ( ); / +ALTER TABLE declare_request_id add ( + declare_request_id varchar2(100) +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202312270603.sql b/resource/sqlupgrade/Mysql/sql202312270603.sql index 3b1e70e48..52d95fada 100644 --- a/resource/sqlupgrade/Mysql/sql202312270603.sql +++ b/resource/sqlupgrade/Mysql/sql202312270603.sql @@ -1,2 +1,3 @@ -ALTER TABLE hrsa_tax_declaration_value -ADD COLUMN source int(0) NULL ; \ No newline at end of file +ALTER TABLE hrsa_tax_declaration_value ADD COLUMN source int(0) NULL ; + +ALTER TABLE hrsa_tax_declare_record ADD COLUMN declare_request_id varchar(100) NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202312270603.sql b/resource/sqlupgrade/Oracle/sql202312270603.sql index 3865d0084..4aea94ab0 100644 --- a/resource/sqlupgrade/Oracle/sql202312270603.sql +++ b/resource/sqlupgrade/Oracle/sql202312270603.sql @@ -1,4 +1,9 @@ ALTER TABLE hrsa_tax_declaration_value add ( source number ) +/ + +ALTER TABLE declare_request_id add ( + declare_request_id varchar2(100) +) / \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202312270603.sql b/resource/sqlupgrade/PG/sql202312270603.sql index 2c6535f86..42b0d9089 100644 --- a/resource/sqlupgrade/PG/sql202312270603.sql +++ b/resource/sqlupgrade/PG/sql202312270603.sql @@ -1 +1,3 @@ -ALTER TABLE hrsa_tax_declaration_value ADD COLUMN source int NULL ; \ No newline at end of file +ALTER TABLE hrsa_tax_declaration_value ADD COLUMN source int NULL ; + +ALTER TABLE hrsa_salary_template ADD COLUMN declare_request_id varchar(200) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202312270603.sql b/resource/sqlupgrade/SQLServer/sql202312270603.sql index a136431d3..6955742ff 100644 --- a/resource/sqlupgrade/SQLServer/sql202312270603.sql +++ b/resource/sqlupgrade/SQLServer/sql202312270603.sql @@ -1,2 +1,5 @@ ALTER TABLE hrsa_tax_declaration_value ADD source int NULL +GO + +ALTER TABLE hrsa_tax_declare_record ADD declare_request_id varchar(100) NULL GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202312270603.sql b/resource/sqlupgrade/ST/sql202312270603.sql index 99adc68e5..f9aba2b22 100644 --- a/resource/sqlupgrade/ST/sql202312270603.sql +++ b/resource/sqlupgrade/ST/sql202312270603.sql @@ -3,3 +3,8 @@ ALTER TABLE hrsa_tax_declaration_value add ( ); / +ALTER TABLE declare_request_id add ( + declare_request_id varchar2(100) +); +/ + From 79ba7c754cb7ac00c98579b5795723e90fe8d42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 28 Dec 2023 20:59:13 +0800 Subject: [PATCH 26/26] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/TaxDeclarationInfoDTO.java | 4 +- .../impl/TaxDeclarationExcelServiceImpl.java | 47 ++++++++++++++----- .../salary/web/EmployeeDeclareController.java | 2 +- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationInfoDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationInfoDTO.java index 20a06d05a..c3d48af5b 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationInfoDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationInfoDTO.java @@ -29,11 +29,11 @@ public class TaxDeclarationInfoDTO { @ApiModelProperty("薪资所属月") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") private Date salaryMonth; @ApiModelProperty("税款所属期") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") private Date taxCycle; @ApiModelProperty("个税扣缴义务人id") diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index a4ac55966..5f5796e39 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -234,6 +234,8 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar @Override public Map importData(DownloadTemplateParam param) { + Map apidatas = new HashMap<>(); + //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; @@ -251,10 +253,8 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List taxDeclarationValuePOS = getTaxDeclarationValueService(user).listByTaxDeclarationId(declarationPO.getId()); Map empDeclarationValueMap = SalaryEntityUtil.convert2Map(taxDeclarationValuePOS, TaxDeclarationValuePO::getEmployeeId); - // 索引(用于计算进度) - int index = 0; // 失败的数量 - int failCount = 0; + int errorCount = 0; // 成功的数量 int successCount = 0; Date now = new Date(); @@ -278,17 +278,36 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List> data = ExcelParseHelper.parse2Map(sheet, 1, 0); if (CollectionUtils.isEmpty(headers)) { - throw new RuntimeException("表头为空"); + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", "表头为空"); + excelComments.add(errorMessageMap); + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorData", excelComments); + return apidatas; } if (CollectionUtils.isEmpty(data)) { - throw new RuntimeException("无数据"); + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", "无数据"); + excelComments.add(errorMessageMap); + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorData", excelComments); + return apidatas; } Optional first = taxReportColumnNames.stream().filter(name -> !headers.contains(name)).findFirst(); if (first.isPresent()) { - throw new RuntimeException("申报模板异常,缺失" + first.get() + "列"); + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", "申报模板异常,缺失" + first.get() + "列,请检查是否为" + incomeCategoryEnum.getDefaultLabel() + "申报模板"); + excelComments.add(errorMessageMap); + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorData", excelComments); + return apidatas; } + for (int i = 0; i < data.size(); i++) { String row = "第" + (i + 2) + "行"; @@ -335,7 +354,7 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar } if (isError) { - failCount++; + errorCount++; errorDatas.add(map); continue; } @@ -344,8 +363,8 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar Map valueMap = Maps.newHashMap(); for (TaxReportColumnPO taxReportColumn : taxReportColumnPOS) { - Object value = map.get(taxReportColumn.getReportColumnName()); - valueMap.put(taxReportColumn.getReportColumnDataIndex(), value != null ? value.toString() : Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""); + String value = (String) map.getOrDefault(taxReportColumn.getReportColumnName(), ""); + valueMap.put(taxReportColumn.getReportColumnDataIndex(), StringUtils.isNotBlank(value) ? value.toString() : Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""); } if (empDeclarationValueMap.containsKey(employeeId)) { @@ -378,12 +397,18 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar getTaxDeclarationValueService(user).batchSave(addList); getTaxDeclarationValueService(user).batchEdit(editList); + if (incomeCategoryEnum == IncomeCategoryEnum.ONETIME_ANNUAL_BONUS) { + TaxDeclareRecordPO declareRecordPO = getTaxDeclareRecordService(user).getById(declarationPO.getTaxDeclareRecordId()); + getTaxDeclarationValueService(user).autoAddWagesDeclare(declareRecordPO); + } + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorData", excelComments); } finally { IOUtils.closeQuietly(fileInputStream); } - - return null; + return apidatas; } } diff --git a/src/com/engine/salary/web/EmployeeDeclareController.java b/src/com/engine/salary/web/EmployeeDeclareController.java index 6c2979f97..fa54d79f3 100644 --- a/src/com/engine/salary/web/EmployeeDeclareController.java +++ b/src/com/engine/salary/web/EmployeeDeclareController.java @@ -336,7 +336,7 @@ public class EmployeeDeclareController { /** * 人员报送-导出全部人员 * - * @param queryParam 导出参数 + * @param param 导出参数 * @return */ @POST