From 2a692b13b412190f4d2c393821d5f07af1287e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 29 Mar 2024 10:44:55 +0800 Subject: [PATCH 01/15] =?UTF-8?q?=E5=A4=96=E7=B1=8D=E4=BA=BA=E5=91=98v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202403193303.sql | 12 + resource/sqlupgrade/GS/sql202403193303.sql | 12 + resource/sqlupgrade/JC/sql202403193303.sql | 12 + resource/sqlupgrade/Mysql/sql202403193303.sql | 8 + .../sqlupgrade/Oracle/sql202403193303.sql | 11 + resource/sqlupgrade/PG/sql202403193303.sql | 8 + .../sqlupgrade/SQLServer/sql202403193303.sql | 10 + resource/sqlupgrade/ST/sql202403193303.sql | 12 + resource/wiki/待添加sql | 5 + .../bo/EmployeeDeclareList.java | 1 + .../bo/EmployeeDeclareRefresh.java | 41 +- .../bo/EmployeeDeclareRequest.java | 22 +- .../dto/EmployeeDeclareFromDTO.java | 30 ++ .../dto/EmployeeDeclareListDTO.java | 6 + .../param/EmployeeDeclareSaveParam.java | 68 ++- .../employeedeclare/po/EmployeeDeclarePO.java | 54 +++ .../taxagent/po/TaxAgentTaxReturnPO.java | 2 +- .../bo/TaxDeclarationRequest.java | 50 ++- .../bo/TaxDeclarationValueList.java | 2 +- .../bo/TaxDeclareEmployeeBO.java | 2 +- .../param/TaxDeclareRecordParam.java | 6 +- .../taxdeclaration/po/TaxDeclareRecordPO.java | 10 + .../taxdeclaration/po/TaxDeclareStatusPO.java | 75 ++++ .../enums/employeedeclare/CardTypeEnum.java | 14 +- .../enums/employeedeclare/TaxReasonEnum.java | 58 +++ .../salarysob/DeclareReportTypeEnum.java | 58 +++ .../enums/salarysob/IncomeCategoryEnum.java | 76 +++- .../employeedeclare/EmployeeDeclareMapper.xml | 99 ++++- .../taxagent/TaxAgentTaxReturnMapper.xml | 6 +- .../TaxDeclareStatusMapper.java | 74 ++++ .../taxdeclaration/TaxDeclareStatusMapper.xml | 311 +++++++++++++ .../remote/tax/client/DeclareClient.java | 2 +- .../remote/tax/client/PaymentClient.java | 62 +++ .../payment/QueryArrearageRequest.java | 64 +++ .../GetDeclareTaxResultFeedbackResponse.java | 4 +- .../service/TaxDeclareRecordService.java | 16 +- .../impl/EmployeeDeclareServiceImpl.java | 17 +- .../impl/TaxDeclarationValueServiceImpl.java | 2 +- .../impl/TaxDeclareRecordServiceImpl.java | 376 +++++++++------- .../salary/util/valid/SalaryCardUtil.java | 410 +++++++++++++++++- .../salary/web/TaxDeclarationController.java | 14 +- .../wrapper/EmployeeDeclareWrapper.java | 8 +- .../wrapper/TaxDeclareRecordWrapper.java | 44 +- test/ParseTaxApi.java | 4 +- 44 files changed, 1860 insertions(+), 318 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202403193303.sql create mode 100644 resource/sqlupgrade/GS/sql202403193303.sql create mode 100644 resource/sqlupgrade/JC/sql202403193303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202403193303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202403193303.sql create mode 100644 resource/sqlupgrade/PG/sql202403193303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202403193303.sql create mode 100644 resource/sqlupgrade/ST/sql202403193303.sql create mode 100644 resource/wiki/待添加sql create mode 100644 src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java create mode 100644 src/com/engine/salary/enums/employeedeclare/TaxReasonEnum.java create mode 100644 src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java create mode 100644 src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.java create mode 100644 src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.xml create mode 100644 src/com/engine/salary/remote/tax/client/PaymentClient.java create mode 100644 src/com/engine/salary/remote/tax/request/payment/QueryArrearageRequest.java rename src/com/engine/salary/remote/tax/response/{employee => declare}/GetDeclareTaxResultFeedbackResponse.java (99%) diff --git a/resource/sqlupgrade/DM/sql202403193303.sql b/resource/sqlupgrade/DM/sql202403193303.sql new file mode 100644 index 000000000..4238b2123 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202403193303.sql @@ -0,0 +1,12 @@ +ALTER TABLE hrsa_employee_declare ADD ( +nationality varchar2(255) NULL , +birthplace varchar2(255) NULL , +tax_reasons varchar2(255) NULL , +entry_date date NULL , +departure_date date NULL +); +/ + +update hrsa_employee_declare set nationality = 'й' where nationality is null; +/ + diff --git a/resource/sqlupgrade/GS/sql202403193303.sql b/resource/sqlupgrade/GS/sql202403193303.sql new file mode 100644 index 000000000..4238b2123 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202403193303.sql @@ -0,0 +1,12 @@ +ALTER TABLE hrsa_employee_declare ADD ( +nationality varchar2(255) NULL , +birthplace varchar2(255) NULL , +tax_reasons varchar2(255) NULL , +entry_date date NULL , +departure_date date NULL +); +/ + +update hrsa_employee_declare set nationality = 'й' where nationality is null; +/ + diff --git a/resource/sqlupgrade/JC/sql202403193303.sql b/resource/sqlupgrade/JC/sql202403193303.sql new file mode 100644 index 000000000..4238b2123 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202403193303.sql @@ -0,0 +1,12 @@ +ALTER TABLE hrsa_employee_declare ADD ( +nationality varchar2(255) NULL , +birthplace varchar2(255) NULL , +tax_reasons varchar2(255) NULL , +entry_date date NULL , +departure_date date NULL +); +/ + +update hrsa_employee_declare set nationality = 'й' where nationality is null; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202403193303.sql b/resource/sqlupgrade/Mysql/sql202403193303.sql new file mode 100644 index 000000000..8a2735c24 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202403193303.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_employee_declare +ADD COLUMN nationality varchar(255) NULL, +ADD COLUMN birthplace varchar(255) NULL, +ADD COLUMN tax_reasons varchar(255) NULL, +ADD COLUMN entry_date date NULL, +ADD COLUMN departure_date date NULL ; + +update hrsa_employee_declare set nationality = 'й' where nationality is null; diff --git a/resource/sqlupgrade/Oracle/sql202403193303.sql b/resource/sqlupgrade/Oracle/sql202403193303.sql new file mode 100644 index 000000000..d8a365183 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202403193303.sql @@ -0,0 +1,11 @@ +ALTER TABLE hrsa_employee_declare ADD ( +nationality varchar2(255) NULL , +birthplace varchar2(255) NULL , +tax_reasons varchar2(255) NULL , +entry_date date NULL , +departure_date date NULL +); +/ + +update hrsa_employee_declare set nationality = 'й' where nationality is null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202403193303.sql b/resource/sqlupgrade/PG/sql202403193303.sql new file mode 100644 index 000000000..2e000d661 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202403193303.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_employee_declare +ADD COLUMN nationality varchar(255) NULL , +ADD COLUMN birthplace varchar(255) NULL , +ADD COLUMN tax_reasons varchar(255) NULL , +ADD COLUMN entry_date timestamp NULL DEFAULT NULL , +ADD COLUMN departure_date timestamp NULL DEFAULT NULL ; + +update hrsa_employee_declare set nationality = 'й' where nationality is null; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202403193303.sql b/resource/sqlupgrade/SQLServer/sql202403193303.sql new file mode 100644 index 000000000..a1f345591 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202403193303.sql @@ -0,0 +1,10 @@ +ALTER TABLE hrsa_employee_declare +ADD nationality varchar(255) NULL , +ADD birthplace varchar(255) NULL , +ADD tax_reasons varchar(255) NULL , +entry_date datetime NULL , +departure_date datetime NULL +GO + +update hrsa_employee_declare set nationality = 'й' where nationality is null +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202403193303.sql b/resource/sqlupgrade/ST/sql202403193303.sql new file mode 100644 index 000000000..4238b2123 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202403193303.sql @@ -0,0 +1,12 @@ +ALTER TABLE hrsa_employee_declare ADD ( +nationality varchar2(255) NULL , +birthplace varchar2(255) NULL , +tax_reasons varchar2(255) NULL , +entry_date date NULL , +departure_date date NULL +); +/ + +update hrsa_employee_declare set nationality = 'й' where nationality is null; +/ + diff --git a/resource/wiki/待添加sql b/resource/wiki/待添加sql new file mode 100644 index 000000000..44d2fbec2 --- /dev/null +++ b/resource/wiki/待添加sql @@ -0,0 +1,5 @@ +INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000001, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '当期收入额', 'royaltiesIncome', 'number', 'sre', NULL, 0); +INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000002, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '免税收入', 'royaltiesTaxFreeIncome', 'number', 'mssd', NULL, 0); +INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000003, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '其他', 'royaltiesOther', 'number', 'qt', NULL, 0); +INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000004, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '备注', 'royaltiesRemark', 'string', 'bz', NULL, 0); +INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000005, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '减免税额', 'royaltiesTaxDeduction', 'number', 'jmse', NULL, 0); diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareList.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareList.java index c63a55817..84cdfddff 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareList.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareList.java @@ -55,6 +55,7 @@ public class EmployeeDeclareList { .setEmployeeName(employeeDeclare.getEmployeeName()) .setJobNum(employeeDeclare.getJobNum()) .setTaxAgentName(taxAgentNameMap.get(employeeDeclare.getTaxAgentId())) + .setNationality(employeeDeclare.getNationality()) .setCardType(cardTypeEnum == null ? "" : SalaryI18nUtil.getI18nLabel(cardTypeEnum.getLabelId(), cardTypeEnum.getDefaultLabel())) .setCardNum(employeeDeclare.getCardNum()) .setGender(genderEnum == null ? "" : genderEnum.getDefaultLabel()) diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java index cccd8520e..78d1f5874 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java @@ -15,9 +15,9 @@ import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.valid.SalaryCardUtil; import com.google.common.collect.Lists; -import com.engine.salary.util.db.IdGenerator; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -30,8 +30,6 @@ public class EmployeeDeclareRefresh { Result result = new Result(); // 本月已有的需要报送的人员 Set employeeIds = SalaryEntityUtil.properties(dto.getEmployeeDeclares(), EmployeeDeclarePO::getEmployeeId); - // 员工的个人信息 - Map simpleUserInfoMap = SalaryEntityUtil.convert2Map(dto.getHrmEmployeeComInfos(), DataCollectionEmployee::getEmployeeId); // 薪资档案的数据(任职受雇从业类型、起始发薪日期、最后发薪日期) Map salaryArchiveMap = SalaryEntityUtil.convert2Map(dto.getSalaryArchives(), SalaryArchivePO::getEmployeeId); // 非系统人员的数据(任职受雇从业类型) @@ -103,26 +101,35 @@ public class EmployeeDeclareRefresh { if (employeeIds.contains(hrmEmployeeComInfo.getEmployeeId())) { continue; } - EmployeeDeclarePO employeeDeclare = initEmployeeDeclare(dto.getTaxAgentId(), dto.getTaxCycle(), now, employeeId); - DataCollectionEmployee simpleUserInfo = simpleUserInfoMap.get(hrmEmployeeComInfo.getEmployeeId()); - String idNum = simpleUserInfo != null && simpleUserInfo.getIdNo() != null ? simpleUserInfo.getIdNo().toUpperCase() : ""; + //是否为外籍人员,通过证件号码判断 + String idNum = hrmEmployeeComInfo.getIdNo() != null ? hrmEmployeeComInfo.getIdNo().toUpperCase() : ""; + CardTypeEnum cardType = CardTypeEnum.RESIDENT_IDENTITY_CARDS; + if (!SalaryCardUtil.checkIdNum(idNum)) { + cardType = CardTypeEnum.FOREIGN_PASSPORT; + } + EmployeeDeclarePO employeeDeclare = initEmployeeDeclare(dto.getTaxAgentId(), dto.getTaxCycle(), employeeId); employeeDeclare.setEmployeeId(hrmEmployeeComInfo.getEmployeeId()); employeeDeclare.setEmployeeType(EmployeeTypeEnum.ORGANIZATION.getValue()); employeeDeclare.setEmployeeName(hrmEmployeeComInfo.getUsername()); employeeDeclare.setJobNum(hrmEmployeeComInfo.getWorkcode()); + employeeDeclare.setCardType(cardType.getValue()); employeeDeclare.setCardNum(idNum); - employeeDeclare.setGender(StringUtils.equalsIgnoreCase(hrmEmployeeComInfo.getSex(), GenderEnum.MALE.name()) ? GenderEnum.MALE.getValue() : GenderEnum.FEMALE.getValue()); - employeeDeclare.setBirthday(simpleUserInfo == null || simpleUserInfo.getBirthday() == null ? null : SalaryDateUtil.dateStrToLocalDate(simpleUserInfo.getBirthday())); + employeeDeclare.setGender(StringUtils.equalsIgnoreCase(hrmEmployeeComInfo.getSex(), GenderEnum.MALE.getValue().toString()) ? GenderEnum.MALE.getValue() : GenderEnum.FEMALE.getValue()); + employeeDeclare.setBirthday(hrmEmployeeComInfo.getBirthday() == null ? null : SalaryDateUtil.dateStrToLocalDate(hrmEmployeeComInfo.getBirthday())); employeeDeclare.setMobile(hrmEmployeeComInfo.getMobile()); if (StringUtils.isEmpty(idNum)) { employeeDeclare.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue()); - employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(187460, "身份证号不能为空")); - } else if (!SalaryCardUtil.checkIdNum(idNum)) { - employeeDeclare.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue()); - employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(156510, "身份证号格式错误")); - } else { + employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(187460, "证件号码不能为空")); + } + if (cardType == CardTypeEnum.RESIDENT_IDENTITY_CARDS) { employeeDeclare.setGender(SalaryCardUtil.judgeGender(idNum).getValue()); employeeDeclare.setBirthday(SalaryDateUtil.localDateToDate(SalaryCardUtil.judgeBirthday(idNum))); + employeeDeclare.setNationality("中国"); + } else { + // fixme 阿富汗 +// employeeDeclare.setNationality("阿富汗"); +// employeeDeclare.setEntryDate(); +// employeeDeclare.setDepartureDate(); } // 对人员处理「人员状态」、「离职日期」 SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId()); @@ -167,13 +174,11 @@ public class EmployeeDeclareRefresh { return result; } - private static EmployeeDeclarePO initEmployeeDeclare(Long taxAgentId, Date taxCycle, Date now, Long employeeId) { + private static EmployeeDeclarePO initEmployeeDeclare(Long taxAgentId, Date taxCycle, Long employeeId) { EmployeeDeclarePO employeeDeclarePO = new EmployeeDeclarePO(); employeeDeclarePO.setId(IdGenerator.generate()); employeeDeclarePO.setTaxAgentId(taxAgentId); employeeDeclarePO.setTaxCycle(taxCycle); - employeeDeclarePO.setCardType(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue()); - employeeDeclarePO.setGender(GenderEnum.MALE.getValue()); employeeDeclarePO.setEmploymentStatus(EmploymentStatusEnum.NORMAL.getValue()); employeeDeclarePO.setEmploymentType(EmploymentTypeEnum.EMPLOYEE.getValue()); employeeDeclarePO.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); @@ -190,8 +195,8 @@ public class EmployeeDeclareRefresh { employeeDeclarePO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); employeeDeclarePO.setCreator(employeeId); employeeDeclarePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); - employeeDeclarePO.setCreateTime(now); - employeeDeclarePO.setUpdateTime(now); + employeeDeclarePO.setCreateTime(new Date()); + employeeDeclarePO.setUpdateTime(new Date()); return employeeDeclarePO; } diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java index c40bcae9d..b7a08373e 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java @@ -10,6 +10,7 @@ import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEnumUtil; import lombok.Data; import org.apache.commons.compress.utils.Lists; +import weaver.general.Util; import java.util.HashMap; import java.util.List; @@ -41,17 +42,20 @@ public class EmployeeDeclareRequest { // *姓名 employeeInfoMap.put("xm", employeeDeclare.getEmployeeName()); // *证件类型 - CardTypeEnum cardTypeEnum = SalaryEnumUtil.enumMatchByValue(employeeDeclare.getCardType(), CardTypeEnum.class); - employeeInfoMap.put("zzlx", cardTypeEnum == null ? "" : cardTypeEnum.getDefaultLabel()); + CardTypeEnum cardTypeEnum = CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()); + employeeInfoMap.put("zzlx", cardTypeEnum.getDefaultLabel()); // *证件号码 employeeInfoMap.put("zzhm", employeeDeclare.getCardNum()); // *国籍 - employeeInfoMap.put("gj", "中国"); + String nationality = employeeDeclare.getNationality(); + employeeInfoMap.put("gj", nationality); + // 人员地区 + employeeInfoMap.put("rydq", cardTypeEnum == CardTypeEnum.RESIDENT_IDENTITY_CARDS ? "境内" : "境外"); // *性别 GenderEnum genderEnum = SalaryEnumUtil.enumMatchByValue(employeeDeclare.getGender(), GenderEnum.class); employeeInfoMap.put("xb", genderEnum == null ? "" : genderEnum.getDefaultLabel()); // *出生日期 - employeeInfoMap.put("csny", employeeDeclare.getBirthday()); + employeeInfoMap.put("csny", SalaryDateUtil.getFormatLocalDate(employeeDeclare.getBirthday())); // *人员状态 EmploymentStatusEnum employmentStatusEnum = SalaryEnumUtil.enumMatchByValue(employeeDeclare.getEmploymentStatus(), EmploymentStatusEnum.class); employeeInfoMap.put("nsrzt", employmentStatusEnum == null ? "" : employmentStatusEnum.getDefaultLabel()); @@ -88,18 +92,16 @@ public class EmployeeDeclareRequest { employeeInfoMap.put("grgbbl", ""); // 备注 employeeInfoMap.put("bz", ""); - // 人员地区 - employeeInfoMap.put("rydq", "境内"); // 中文名 employeeInfoMap.put("xmzw", ""); // 出生地: - employeeInfoMap.put("csd", ""); + employeeInfoMap.put("csd", Util.null2String(employeeDeclare.getBirthplace())); // 涉税事由 - employeeInfoMap.put("sssx", ""); + employeeInfoMap.put("sssx", Util.null2String(employeeDeclare.getTaxReasons())); // 首次入境时间 - employeeInfoMap.put("scrjsj", ""); + employeeInfoMap.put("scrjsj", SalaryDateUtil.getFormatLocalDate(employeeDeclare.getEntryDate())); // 预计离境时间 - employeeInfoMap.put("yjljsj", ""); + employeeInfoMap.put("yjljsj", SalaryDateUtil.getFormatLocalDate(employeeDeclare.getDepartureDate())); // 其他证件类型 employeeInfoMap.put("qtzzlx", ""); // 其他证件号码 diff --git a/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareFromDTO.java b/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareFromDTO.java index 21aedf5d9..3abbb76d7 100644 --- a/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareFromDTO.java +++ b/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareFromDTO.java @@ -67,6 +67,23 @@ public class EmployeeDeclareFromDTO { @TableTitle(title = "性别", dataIndex = "gender", key = "gender") private GenderEnum gender; + /** + * 涉税事由, + * 任职受雇 + * 提供临时劳务 + * 转让财产 + * 从事投资和经营活动 + * 其他 + */ + @TableTitle(title = "涉税事由", dataIndex = "taxReasons", key = "taxReasons") + private String taxReasons; + + /** + * 出生地 + */ + @TableTitle(title = "出生地", dataIndex = "birthplace", key = "birthplace") + private String birthplace; + // 出生日期 @TableTitle(title = "出生日期", dataIndex = "birthday", key = "birthday") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @@ -94,6 +111,19 @@ public class EmployeeDeclareFromDTO { @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date dismissDate; + + // 首次入境时间 + @TableTitle(title = "首次入境时间", dataIndex = "entryDate", key = "entryDate") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date entryDate; + + // 预计离境时间 + @TableTitle(title = "预计离境时间", dataIndex = "departureDate", key = "departureDate") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date departureDate; + + + // 是否残疾 @TableTitle(title = "是否残疾", dataIndex = "disability", key = "disability") private SalaryOnOffEnum disability; diff --git a/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareListDTO.java b/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareListDTO.java index 76af21666..c56d8db93 100644 --- a/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareListDTO.java +++ b/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareListDTO.java @@ -70,6 +70,12 @@ public class EmployeeDeclareListDTO { @ExcelHead(title = "工号", dataIndex = "jobNum") private String jobNum; + // 国籍 + @SalaryTableColumn(text = "国籍", width = "10%", column = "nationality") + @TableTitle(title = "国籍", dataIndex = "nationality", key = "nationality") + @ExcelHead(title = "国籍", dataIndex = "nationality") + private String nationality; + // 证件类型 @SalaryTableColumn(text = "证件类型", width = "10%", column = "cardType") @TableTitle(title = "证件类型", dataIndex = "cardType", key = "cardType") diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareSaveParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareSaveParam.java index b61c2e713..02df109dd 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareSaveParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareSaveParam.java @@ -22,75 +22,99 @@ import java.util.Date; @Data public class EmployeeDeclareSaveParam { - //主键id") + //主键id private Long id; /** * 参数错误,个税扣缴义务人id不能为空 */ - //个税扣缴义务人id") + //个税扣缴义务人id private Long taxAgentId; /** * 参数错误,税款所属期参数格式错误 */ - //税款所属期") + //税款所属期 private Date taxCycle; - //员工id") + //员工id private Long employeeId; - //员工类型") + //员工类型 private EmployeeTypeEnum employeeType; - //姓名") + //姓名 private String employeeName; - //工号") + //工号 private String jobNum; - //证件类型") + //国籍 + private String nationality; + + /** + * 出生地 + */ + private String birthplace; + + /** + * 涉税事由, + * 任职受雇 + * 提供临时劳务 + * 转让财产 + * 从事投资和经营活动 + * 其他 + */ + private String taxReasons; + + //证件类型 private CardTypeEnum cardType; - //证件号码") + //证件号码 private String cardNum; - //性别") + //性别 private GenderEnum gender; - //出生日期") + //出生日期 private LocalDate birthday; - //状态") + //状态 private EmploymentStatusEnum employmentStatus; - //手机号码") + //手机号码 private String mobile; - //任职受雇从业类型") + //任职受雇从业类型 private EmploymentTypeEnum employmentType; - //任职受雇从业日期") + //任职受雇从业日期 private LocalDate employmentDate; - //离职日期") + //离职日期 private LocalDate dismissDate; - //是否残疾") + //首次入境时间 + private LocalDate entryDate; + + //预计离境时间 + private LocalDate departureDate; + + //是否残疾 private SalaryOnOffEnum disability; - //残疾证号") + //残疾证号 private String disabilityCardNo; - //是否孤老") + //是否孤老 private SalaryOnOffEnum lonelyOld; - //是否是烈属") + //是否是烈属 private SalaryOnOffEnum martyrDependents; - //烈属证号") + //烈属证号 private String martyrDependentsCardNo; - //是否扣除减除费用") + //是否扣除减除费用 private SalaryOnOffEnum deductExpenses; } diff --git a/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java index 780eb90db..6e954de8f 100644 --- a/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java +++ b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java @@ -63,6 +63,13 @@ public class EmployeeDeclarePO { @ElogTransform(name = "人员名称") private String employeeName; + /** + * 国籍 + */ + @ElogTransform(name = "国籍") + private String nationality; + + /** * 工号 */ @@ -80,6 +87,18 @@ public class EmployeeDeclarePO { */ @ElogTransform(name = "证件号码") private String cardNum; +// +// /** +// * 其他证件类型 +// */ +// @ElogTransform(name = "其他证件类型") +// private Integer otherCardType; +// +// /** +// * 其他证件号码 +// */ +// @ElogTransform(name = "其他证件号码") +// private String otherCardNum; /** * 性别 @@ -93,6 +112,23 @@ public class EmployeeDeclarePO { @ElogTransform(name = "出生日期") private Date birthday; + /** + * 出生地 + */ + @ElogTransform(name = "出生地") + private String birthplace; + + /** + * 涉税事由, + * 任职受雇 + * 提供临时劳务 + * 转让财产 + * 从事投资和经营活动 + * 其他 + */ + @ElogTransform(name = "涉税事由") + private String taxReasons; + /** * 状态 */ @@ -129,6 +165,19 @@ public class EmployeeDeclarePO { @ElogTransform(name = "离职日期") private Date dismissDate; + + /** + * 首次入境时间 + */ + @ElogTransform(name = "首次入境时间") + private Date entryDate; + + /** + * 预计离境时间 + */ + @ElogTransform(name = "预计离境时间") + private Date departureDate; + /** * 是否残疾 */ @@ -231,17 +280,22 @@ public class EmployeeDeclarePO { ", employeeId=" + employeeId + ", employeeType=" + employeeType + ", employeeName='" + employeeName + '\'' + + ", nationality='" + nationality + '\'' + ", jobNum='" + jobNum + '\'' + ", cardType=" + cardType + ", cardNum='" + cardNum + '\'' + ", gender=" + gender + ", birthday=" + birthday + + ", birthplace='" + birthplace + '\'' + + ", taxReasons='" + taxReasons + '\'' + ", employmentStatus=" + employmentStatus + ", mobile='" + mobile + '\'' + ", employmentType=" + employmentType + ", employmentFirstYear='" + employmentFirstYear + '\'' + ", employmentDate=" + employmentDate + ", dismissDate=" + dismissDate + + ", entryDate=" + entryDate + + ", departureDate=" + departureDate + ", disability=" + disability + ", disabilityCardNo='" + disabilityCardNo + '\'' + ", lonelyOld=" + lonelyOld + diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentTaxReturnPO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentTaxReturnPO.java index b20fd8d43..ccbf1716c 100644 --- a/src/com/engine/salary/entity/taxagent/po/TaxAgentTaxReturnPO.java +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentTaxReturnPO.java @@ -41,7 +41,7 @@ public class TaxAgentTaxReturnPO implements Serializable { /** * 企业名称 */ - private Long taxAgentName; + private String taxAgentName; /** * 税号 diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java index 4879c1abb..8e1cf9c1a 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java @@ -6,7 +6,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO; import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.enums.employeedeclare.CardTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; -import com.engine.salary.report.enums.IncomeCategoryEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -146,7 +146,7 @@ public class TaxDeclarationRequest { // 姓名 requestParam.put("xm", employeeDeclare.getEmployeeName()); // 证件类型 - requestParam.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel()); + requestParam.put("zzlx", CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()).getDefaultLabel()); // 证件号码 requestParam.put("zzhm", employeeDeclare.getCardNum()); // 所得项目 @@ -162,4 +162,50 @@ public class TaxDeclarationRequest { } return requestParam; } + + + public static Map convert2fjmsdRequestParam(List taxReportColumns, + List taxDeclarations, + List taxDeclarationValues, + List employeeDeclares) { + Map> objRequestParam = Maps.newHashMap(); + Map>> listRequestParam = Maps.newHashMap(); + Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); + Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); + Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + for (TaxDeclarationPO taxDeclaration : taxDeclarations) { + List values = taxDeclarationValueMap.get(taxDeclaration.getId()); + for (TaxDeclarationValuePO taxDeclarationValue : values) { + EmployeeDeclarePO employeeDeclare = employeeDeclareMap.get(taxDeclarationValue.getEmployeeId()); + IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()); + if (employeeDeclare == null || incomeCategoryEnum == null) { + continue; + } + List taxReportColumnList = taxReportColumnMap.get(Util.null2String(incomeCategoryEnum.getValue())); + Map employeeRequestParam = convert2RequestParam(incomeCategoryEnum, taxReportColumnList, taxDeclarationValue, employeeDeclare); + if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_WAGES_AND_SALARIES) { + // 无住所个人正常工资薪金 + List> employeeRequestParams = listRequestParam.computeIfAbsent("wjgzxjlb", k -> Lists.newArrayList()); + employeeRequestParams.add(employeeRequestParam); + } else if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_MONTHLY_BONUS) { + // 全年一次性奖金收入 + List> employeeRequestParams = listRequestParam.computeIfAbsent("wjrysyjjlb", k -> Lists.newArrayList()); + employeeRequestParams.add(employeeRequestParam); + } else if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR) { + // 内退一次性补偿金 + List> employeeRequestParams = listRequestParam.computeIfAbsent("lwbclb", k -> Lists.newArrayList()); + employeeRequestParams.add(employeeRequestParam); + } else if (incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS) { + // 解除劳动合同一次性补偿金 + List> employeeRequestParams = listRequestParam.computeIfAbsent("jcldhtycxbcjlb", k -> Lists.newArrayList()); + employeeRequestParams.add(employeeRequestParam); + } + } + } + + Map requestParam = Maps.newHashMap(); + requestParam.putAll(objRequestParam); + requestParam.putAll(listRequestParam); + return requestParam; + } } diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java index fd5a44593..8208035b4 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java @@ -92,7 +92,7 @@ public class TaxDeclarationValueList { if (employeeDeclare != null) { dataMap.put(cnKey ? "工号" : "jobNum", employeeDeclare.getJobNum()); dataMap.put(cnKey ? "姓名" : "username", employeeDeclare.getEmployeeName()); - dataMap.put(cnKey ? "证件类型" : "cardType", SalaryI18nUtil.getI18nLabel(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getLabelId(), CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel())); + dataMap.put(cnKey ? "证件类型" : "cardType",CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()).getDefaultLabel() ); dataMap.put(cnKey ? "证件号码" : "cardNum", employeeDeclare.getCardNum()); } else if (taxDeclarationValue.getEmployeeType() == null || Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue())) { DataCollectionEmployee simpleEmployee = simpleEmployeeMap.get(taxDeclarationValue.getEmployeeId()); diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java index 709b797df..46bd2cf8b 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java @@ -56,7 +56,7 @@ public class TaxDeclareEmployeeBO { abnormalEmployeeListDTO .setEmployeeName(employeeDeclare.getEmployeeName()) .setJobNum(employeeDeclare.getJobNum()) - .setCardType(SalaryI18nUtil.getI18nLabel(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getLabelId(), CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel())) + .setCardType(CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()).getDefaultLabel()) .setCardNum(employeeDeclare.getCardNum()) .setDeclareStatus(declareStatusEnum) .setDeclareStatusDesc(declareStatusEnum == null ? "" : SalaryI18nUtil.getI18nLabel(declareStatusEnum.getLabelId(), declareStatusEnum.getDefaultLabel())); diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java index 673fd4aa8..6e1104507 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java @@ -1,6 +1,5 @@ package com.engine.salary.entity.taxdeclaration.param; -import com.engine.salary.util.valid.DataCheck; import lombok.Data; /** @@ -16,4 +15,9 @@ public class TaxDeclareRecordParam { //个税申报记录id") private Long taxDeclareRecordId; + + /** + * 申报类型 + */ + private Integer reportType; } diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java index 6a6440435..78707ce84 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java @@ -48,21 +48,27 @@ public class TaxDeclareRecordPO implements Serializable { private Date taxCycle; /** * 申报类型 + * * @see TaxDeclareTypeEnum */ + @Deprecated private Integer taxDeclareType; /** * 申报状态 + * * @see TaxDeclareStatusEnum */ + @Deprecated private Integer taxDeclareStatus; /** * 申报失败的错误信息 */ + @Deprecated private String taxDeclareErrorMsg; /** * 请求的requestId */ + @Deprecated private String requestId; /** * 申报的requestId,用于下载申报过程 @@ -74,15 +80,19 @@ public class TaxDeclareRecordPO implements Serializable { private String remark; //应缴金额 + @Deprecated private String taxPayAmount; //实缴总额 + @Deprecated private String taxPaidAmount; //实缴税额(不含滞纳金等) + @Deprecated private String taxPurePaidAmount; //申报人数 + @Deprecated private Integer personNum; /** diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java new file mode 100644 index 000000000..d138cc23e --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java @@ -0,0 +1,75 @@ +package com.engine.salary.entity.taxdeclaration.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxDeclareStatusPO { + /** + * ID + */ + private Long id; + /** + * 申报记录id + */ + private Long taxDeclareRecordId; + /** + * 申报类型 1:综合所得; 2: 分类所得;3:非居民所得;4:限售股所得 + */ + private Integer reportType; + /** + * 供应商第三方系统返回的requestid + */ + private String requestId; + /** + * 申报类型 + */ + private Integer taxDeclareType; + /** + * 申报状态 + */ + private Integer taxDeclareStatus; + /** + * 刷新标识 + */ + private Integer displayUpdateIcon; + /** + * 错误信息 + */ + private String taxDeclareErrorMsg; + /** + * 申报人数 + */ + private Integer personNum; + /** + * 应缴 + */ + private String taxPayAmount; + /** + * 实缴总额 + */ + private String taxPaidAmount; + /** + * 实缴(不含滞纳金) + */ + private String taxPurePaidAmount; + /** + * 记录申报业务id,用于下载内置算税过程 + */ + private String declareRequestId; + /** + * 是否删除 + */ + private Integer deleteType; + + //主键id集合 + private Collection ids; + +} \ No newline at end of file diff --git a/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java b/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java index a7f0de9d3..0378a49ba 100644 --- a/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java +++ b/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java @@ -2,6 +2,8 @@ package com.engine.salary.enums.employeedeclare; import com.engine.salary.enums.BaseEnum; +import java.util.Objects; + /** * 证件类型 *

Copyright: Copyright (c) 2023

@@ -12,7 +14,8 @@ import com.engine.salary.enums.BaseEnum; **/ public enum CardTypeEnum implements BaseEnum { - RESIDENT_IDENTITY_CARDS(0, "居民身份证", 105564); + RESIDENT_IDENTITY_CARDS(0, "居民身份证", 105564), + FOREIGN_PASSPORT(1, "外国护照", 105564); CardTypeEnum(int value, String defaultLabel, int labelId) { this.value = value; @@ -40,4 +43,13 @@ public enum CardTypeEnum implements BaseEnum { public Integer getLabelId() { return labelId; } + + public static CardTypeEnum getDefaultLabelByValue(Integer value) { + for (CardTypeEnum e : CardTypeEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return RESIDENT_IDENTITY_CARDS; + } } diff --git a/src/com/engine/salary/enums/employeedeclare/TaxReasonEnum.java b/src/com/engine/salary/enums/employeedeclare/TaxReasonEnum.java new file mode 100644 index 000000000..26dc055d8 --- /dev/null +++ b/src/com/engine/salary/enums/employeedeclare/TaxReasonEnum.java @@ -0,0 +1,58 @@ +package com.engine.salary.enums.employeedeclare; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 涉税事由 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum TaxReasonEnum implements BaseEnum { + + Employment("任职受雇", "任职受雇", 105564), + PROVIDE_TEMPORARY_LABOR_SERVICES("提供临时劳务", "提供临时劳务", 105564), + TRANSFER_OF_PROPERTY("转让财产", "转让财产", 105564), + ENGAGE_IN_INVESTMENT_AND_BUSINESS_ACTIVITIES("从事投资和经营活动", "从事投资和经营活动", 105564), + OTHER("其他", "其他", 105564); + + TaxReasonEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + private String value; + + private String defaultLabel; + + private int labelId; + + @Override + public String getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static TaxReasonEnum getDefaultLabelByValue(Integer value) { + for (TaxReasonEnum e : TaxReasonEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return Employment; + } +} diff --git a/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java b/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java new file mode 100644 index 000000000..2d99b4ebc --- /dev/null +++ b/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java @@ -0,0 +1,58 @@ +package com.engine.salary.enums.salarysob; + + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 申报类型 1:综合所得; 2: 分类所得;3:非居民所得;4:限售股所得 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum DeclareReportTypeEnum implements BaseEnum { + COMPREHENSIVE_INCOME(1, "综合所得", 100133), + CLASSIFIED_INCOME(2, "分类所得", 86185), + NONRESIDENT_INCOME(3, "非居民所得", 107369), + RESTRICTED_SHARES_INCOME(4, "限售股所得", 90633); + + private int value; + + private String defaultLabel; + + private int labelId; + + DeclareReportTypeEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + + @Override + public Integer getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + public static DeclareReportTypeEnum parseByValue(Integer value) { + for (DeclareReportTypeEnum targetTypeEnum : DeclareReportTypeEnum.values()) { + if (Objects.equals(targetTypeEnum.getValue(), value)) { + return targetTypeEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 71009b4e6..f0564f27c 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -1,7 +1,7 @@ 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.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; @@ -19,7 +19,7 @@ import java.util.*; public enum IncomeCategoryEnum implements BaseEnum { // todo 多语言 - WAGES_AND_SALARIES(1, "0101", "正常工资薪金", 160487) { + WAGES_AND_SALARIES(1, "0101", "正常工资薪金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160487) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); @@ -28,7 +28,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", 160488) { + REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160488) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); @@ -37,7 +37,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", 160489) { + ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160489) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); @@ -46,7 +46,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", 181936) { + COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181936) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); @@ -55,7 +55,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", 181937) { + COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181937) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); @@ -64,7 +64,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", 181938) { + INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181938) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); @@ -73,7 +73,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - ANNUITY_RECEIPT(110, "0110", "年金领取", 181939) { + ANNUITY_RECEIPT(110, "0110", "年金领取", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181939) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); @@ -82,7 +82,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", 181940) { + INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181940) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); @@ -91,7 +91,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", 181942) { + INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181942) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); @@ -100,7 +100,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", 181943) { + REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181943) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); @@ -109,7 +109,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", 175330) { + REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 175330) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); @@ -118,7 +118,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", 181944) { + REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181944) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); @@ -127,7 +127,7 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - ROYALTIES(600, "0600", "特许权使用费所得", 181945) { + ROYALTIES(600, "0600", "特许权使用费所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181945) { @Override public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); @@ -136,25 +136,63 @@ public enum IncomeCategoryEnum implements BaseEnum { return result; } }, - ; + NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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; + } + }, + NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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; + } + }, + NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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; + } + }, + NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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; + } + }; private int value; private String code; + private DeclareReportTypeEnum reportType; + private String defaultLabel; private int labelId; - IncomeCategoryEnum(int value, String code, String defaultLabel, int labelId) { + IncomeCategoryEnum(int value, String code, String defaultLabel, DeclareReportTypeEnum reportType, int labelId) { this.value = value; this.code = code; this.defaultLabel = defaultLabel; + this.reportType = reportType; this.labelId = labelId; } - public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); @Override public Integer getValue() { @@ -175,6 +213,10 @@ public enum IncomeCategoryEnum implements BaseEnum { return defaultLabel; } + public DeclareReportTypeEnum getReportType() { + return reportType; + } + public static IncomeCategoryEnum parseByValue(Integer value) { for (IncomeCategoryEnum incomeCategoryEnum : IncomeCategoryEnum.values()) { diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml index 008deae95..53f28f353 100644 --- a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml @@ -9,6 +9,7 @@ + @@ -20,6 +21,8 @@ + + @@ -34,6 +37,8 @@ + + @@ -47,6 +52,7 @@ , t.employee_type , t.employee_name , t.job_num + , t.nationality , t.card_type , t.card_num , t.gender @@ -57,6 +63,8 @@ , t.employment_first_year , t.employment_date , t.dismiss_date + , t.entry_date + , t.departure_date , t.disability , t.disability_card_no , t.lonely_old @@ -72,6 +80,8 @@ , t.delete_type , t.create_time , t.update_time + , t.birthplace + , t.tax_reasons @@ -118,6 +128,9 @@ AND job_num = #{jobNum} + + AND nationality = #{nationality} + AND card_type = #{cardType} @@ -238,6 +251,9 @@ job_num, + + nationality, + card_type, @@ -268,6 +284,12 @@ dismiss_date, + + entry_date, + + + departure_date, + disability, @@ -313,6 +335,12 @@ update_time, + + birthplace, + + + tax_reasons, + @@ -336,6 +364,9 @@ #{jobNum}, + + #{nationality}, + #{cardType}, @@ -366,6 +397,12 @@ #{dismissDate}, + + #{entryDate}, + + + #{departureDate}, + #{disability}, @@ -411,6 +448,12 @@ #{updateTime}, + + #{birthplace}, + + + #{tax_reasons}, + @@ -420,6 +463,7 @@ ( birthday, card_num, + nationality, card_type, create_time, creator, @@ -430,6 +474,8 @@ disability, disability_card_no, dismiss_date, + entry_date, + departure_date, employee_id, employee_name, employee_type, @@ -449,12 +495,15 @@ tax_agent_id, tax_cycle, tenant_key, - update_time + update_time, + birthplace, + tax_reasons ) VALUES ( #{item.birthday}, #{item.cardNum}, + #{item.nationality}, #{item.cardType}, #{item.createTime}, #{item.creator}, @@ -465,6 +514,8 @@ #{item.disability}, #{item.disabilityCardNo}, #{item.dismissDate}, + #{item.entryDate}, + #{item.departureDate}, #{item.employeeId}, #{item.employeeName}, #{item.employeeType}, @@ -484,7 +535,9 @@ #{item.taxAgentId}, #{item.taxCycle}, #{item.tenantKey}, - #{item.updateTime} + #{item.updateTime}, + #{item.birthplace}, + #{item.taxReasons} ) @@ -494,6 +547,7 @@ INSERT INTO hrsa_employee_declare ( birthday, card_num, + nationality, card_type, create_time, creator, @@ -504,6 +558,8 @@ disability, disability_card_no, dismiss_date, + entry_date, + departure_date, employee_id, employee_name, employee_type, @@ -523,14 +579,17 @@ tax_agent_id, tax_cycle, tenant_key, - update_time + update_time, + birthplace, + tax_reasons ) select #{item.birthday,jdbcType=DATE}, #{item.cardNum,jdbcType=VARCHAR}, - #{item.cardType,jdbcType=}, + #{item.nationality,jdbcType=VARCHAR}, + #{item.cardType,jdbcType=INTEGER}, #{item.createTime,jdbcType=DATE}, #{item.creator,jdbcType=DOUBLE}, #{item.declareErrorMsg,jdbcType=VARCHAR}, @@ -540,6 +599,8 @@ #{item.disability,jdbcType=INTEGER}, #{item.disabilityCardNo,jdbcType=VARCHAR}, #{item.dismissDate,jdbcType=DATE}, + #{item.entryDate,jdbcType=DATE}, + #{item.departureDate,jdbcType=DATE}, #{item.employeeId,jdbcType=DOUBLE}, #{item.employeeName,jdbcType=VARCHAR}, #{item.employeeType,jdbcType=INTEGER}, @@ -559,7 +620,9 @@ #{item.taxAgentId,jdbcType=DOUBLE}, #{item.taxCycle,jdbcType=DATE}, #{item.tenantKey,jdbcType=VARCHAR}, - #{item.updateTime,jdbcType=DATE} + #{item.updateTime,jdbcType=DATE}, + #{item.birthplace,jdbcType=VARCHAR}, + #{item.taxReasons,jdbcType=VARCHAR} from dual @@ -570,6 +633,7 @@ INSERT INTO hrsa_employee_declare ( birthday, card_num, + nationality, card_type, create_time, creator, @@ -580,6 +644,8 @@ disability, disability_card_no, dismiss_date, + entry_date, + departure_date, employee_id, employee_name, employee_type, @@ -599,12 +665,15 @@ tax_agent_id, tax_cycle, tenant_key, - update_time + update_time, + birthplace, + tax_reasons ) VALUES ( #{item.birthday}, #{item.cardNum}, + #{item.nationality}, #{item.cardType}, #{item.createTime}, #{item.creator}, @@ -615,6 +684,8 @@ #{item.disability}, #{item.disabilityCardNo}, #{item.dismissDate}, + #{item.entryDate}, + #{item.departureDate}, #{item.employeeId}, #{item.employeeName}, #{item.employeeType}, @@ -634,7 +705,9 @@ #{item.taxAgentId}, #{item.taxCycle}, #{item.tenantKey}, - #{item.updateTime} + #{item.updateTime}, + #{item.birthplace}, + #{item.taxReasons} ) @@ -650,6 +723,7 @@ employee_type=#{employeeType}, employee_name=#{employeeName}, job_num=#{jobNum}, + nationality=#{nationality}, card_type=#{cardType}, card_num=#{cardNum}, gender=#{gender}, @@ -660,6 +734,8 @@ employment_first_year=#{employmentFirstYear}, employment_date=#{employmentDate}, dismiss_date=#{dismissDate}, + entry_date=#{entryDate}, + departure_date=#{departureDate}, disability=#{disability}, disability_card_no=#{disabilityCardNo}, lonely_old=#{lonelyOld}, @@ -675,6 +751,8 @@ delete_type=#{deleteType}, create_time=#{createTime}, update_time=#{updateTime}, + birthplace=#{birthplace}, + tax_reasons=#{taxReasons}, WHERE id = #{id} AND delete_type = 0 @@ -702,6 +780,9 @@ job_num=#{jobNum}, + + nationality=#{nationality}, + card_type=#{cardType}, @@ -730,6 +811,10 @@ employment_date=#{employmentDate}, dismiss_date=#{dismissDate}, + entry_date=#{entryDate}, + departure_date=#{departureDate}, + birthplace=#{birthplace}, + tax_reasons=#{taxReasons}, disability=#{disability}, diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml index d5ecfdbe5..59ce83251 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml @@ -19,6 +19,7 @@ + @@ -401,8 +402,11 @@ diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.java b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.java new file mode 100644 index 000000000..21c269d52 --- /dev/null +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.java @@ -0,0 +1,74 @@ +package com.engine.salary.mapper.taxdeclaration; + +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface TaxDeclareStatusMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(TaxDeclareStatusPO taxDeclareStatus); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + TaxDeclareStatusPO getById(Long id); + + TaxDeclareStatusPO getDeclareStatus(@Param("taxDeclareRecordId")Long taxDeclareRecordId,@Param("reportType")Integer reportType); + + /** + * 新增,忽略null字段 + * + * @param taxDeclareStatus 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(TaxDeclareStatusPO taxDeclareStatus); + + /** + * 修改,修改所有字段 + * + * @param taxDeclareStatus 修改的记录 + * @return 返回影响行数 + */ + int update(TaxDeclareStatusPO taxDeclareStatus); + + /** + * 修改,忽略null字段 + * + * @param taxDeclareStatus 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(TaxDeclareStatusPO taxDeclareStatus); + + /** + * 删除记录 + * + * @param taxDeclareStatus 待删除的记录 + * @return 返回影响行数 + */ + int delete(TaxDeclareStatusPO taxDeclareStatus); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.xml new file mode 100644 index 000000000..8257acf88 --- /dev/null +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclareStatusMapper.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + + + + + + + + + + + + + t + . + id + , t.tax_declare_record_id + , t.report_type + , t.request_id + , t.tax_declare_type + , t.tax_declare_status + , t.display_update_icon + , t.tax_declare_error_msg + , t.person_num + , t.tax_pay_amount + , t.tax_paid_amount + , t.tax_pure_paid_amount + , t.declare_request_id + , t.delete_type + + + + + + + + + + + + + + + + + + INSERT INTO hrsa_tax_declare_status + + + + id, + + + tax_declare_record_id, + + + report_type, + + + request_id, + + + tax_declare_type, + + + tax_declare_status, + + + display_update_icon, + + + tax_declare_error_msg, + + + person_num, + + + tax_pay_amount, + + + tax_paid_amount, + + + tax_pure_paid_amount, + + + declare_request_id, + + + delete_type, + + + + + #{id}, + + + #{taxDeclareRecordId}, + + + #{reportType}, + + + #{requestId}, + + + #{taxDeclareType}, + + + #{taxDeclareStatus}, + + + #{displayUpdateIcon}, + + + #{taxDeclareErrorMsg}, + + + #{personNum}, + + + #{taxPayAmount}, + + + #{taxPaidAmount}, + + + #{taxPurePaidAmount}, + + + #{declareRequestId}, + + + #{deleteType}, + + + + + + + + + UPDATE hrsa_tax_declare_status + + tax_declare_record_id=#{taxDeclareRecordId}, + report_type=#{reportType}, + request_id=#{requestId}, + tax_declare_type=#{taxDeclareType}, + tax_declare_status=#{taxDeclareStatus}, + display_update_icon=#{displayUpdateIcon}, + tax_declare_error_msg=#{taxDeclareErrorMsg}, + person_num=#{personNum}, + tax_pay_amount=#{taxPayAmount}, + tax_paid_amount=#{taxPaidAmount}, + tax_pure_paid_amount=#{taxPurePaidAmount}, + declare_request_id=#{declareRequestId}, + delete_type=#{deleteType}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_tax_declare_status + + + tax_declare_record_id=#{taxDeclareRecordId}, + + + report_type=#{reportType}, + + + request_id=#{requestId}, + + + tax_declare_type=#{taxDeclareType}, + + + tax_declare_status=#{taxDeclareStatus}, + + + display_update_icon=#{displayUpdateIcon}, + + + tax_declare_error_msg=#{taxDeclareErrorMsg}, + + + person_num=#{personNum}, + + + tax_pay_amount=#{taxPayAmount}, + + + tax_paid_amount=#{taxPaidAmount}, + + + tax_pure_paid_amount=#{taxPurePaidAmount}, + + + declare_request_id=#{declareRequestId}, + + + delete_type=#{deleteType}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_tax_declare_status + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_tax_declare_status + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index bd7a500da..532affabd 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -1,6 +1,6 @@ package com.engine.salary.remote.tax.client; -import com.engine.salary.remote.tax.response.employee.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.HttpUtil; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SingnatureData; diff --git a/src/com/engine/salary/remote/tax/client/PaymentClient.java b/src/com/engine/salary/remote/tax/client/PaymentClient.java new file mode 100644 index 000000000..8c9571071 --- /dev/null +++ b/src/com/engine/salary/remote/tax/client/PaymentClient.java @@ -0,0 +1,62 @@ +package com.engine.salary.remote.tax.client; + +import com.engine.salary.enums.taxagent.TaxAgentTaxReturnPasswordTypeEnum; +import com.engine.salary.remote.tax.request.payment.QueryArrearageRequest; +import com.engine.salary.util.HttpUtil; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SingnatureData; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Slf4j +public class PaymentClient extends TaxBaseClient { + public PaymentClient(Long taxAgentId) { + super(taxAgentId); + } + + public void queryArrearage(String taxCycle) { + QueryArrearageRequest queryArrearageRequest = new QueryArrearageRequest(); + queryArrearageRequest.setNsrsbh(returnPO.getTaxCode()); + queryArrearageRequest.setQymc(returnPO.getTaxAgentName()); + queryArrearageRequest.setDjxhid(StringUtils.isNotEmpty(returnPO.getTaxRegistrationNumber()) ? returnPO.getTaxRegistrationNumber() : null); + queryArrearageRequest.setAreaid(returnPO.getAreaCode()); + queryArrearageRequest.setBmbh(StringUtils.isNotEmpty(returnPO.getDepartmentCode()) ? returnPO.getDepartmentCode() : null); + boolean realNamePwd = TaxAgentTaxReturnPasswordTypeEnum.REAL_NAME_PASSWORD.getValue().equals(returnPO.getPasswordType()); + queryArrearageRequest.setSbmm(realNamePwd ? null : returnPO.getPwd()); + queryArrearageRequest.setJmsbmm("0"); + queryArrearageRequest.setSmzh(realNamePwd ? returnPO.getRealAccount() : null); + queryArrearageRequest.setSmmm(realNamePwd ? returnPO.getPwd() : null); + queryArrearageRequest.setJmsmmm("0"); + queryArrearageRequest.setMmlx("" + returnPO.getPasswordType()); + + queryArrearageRequest.setBizNo(UUID.randomUUID().toString()); + queryArrearageRequest.setSkssq(taxCycle); + + + String reqJson = JsonUtil.toJsonString(queryArrearageRequest); + + String url = super.apiConfig.getHost() + "/gateway/iit/payment/queryArrearage"; + Map params = new HashMap<>(1); + Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + System.out.println(res); + + getArrearageQueryFeedback(""); + } + + public void getArrearageQueryFeedback(String requestId) { + Map params = new HashMap<>(1); + params.put("requestId", "43dd5abf686946f59cfea50a51f8183a"); + Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String url = super.apiConfig.getHost() + "/gateway/iit/payment/getArrearageQueryFeedback"; + String res = HttpUtil.getRequest(url, header, params); + + System.out.println(res); + } + +} diff --git a/src/com/engine/salary/remote/tax/request/payment/QueryArrearageRequest.java b/src/com/engine/salary/remote/tax/request/payment/QueryArrearageRequest.java new file mode 100644 index 000000000..e61c59ec2 --- /dev/null +++ b/src/com/engine/salary/remote/tax/request/payment/QueryArrearageRequest.java @@ -0,0 +1,64 @@ +package com.engine.salary.remote.tax.request.payment; + +import lombok.Data; + +@Data +public class QueryArrearageRequest { + /** + * 外部业务编号 必填:是 外部业务编号,唯一,幂等需要,最长64位,建议使用UUID + */ + private String bizNo; + /** + * 企业名称 必填:是 代报企业全称 + */ + private String qymc; + /** + * 密码类型 必填:否 默认不传则设置为0, 0表示申报密码;2表示实名账号实名密码 + */ + private String mmlx; + /** + * 实名账号 必填:选择必填 当mmlx=2时,必填 + */ + private String smzh; + /** + * 实名密码 必填:选择必填 当mmlx=2时,必填 + */ + private String smmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 参考3.4代报、实名密码加密说明 + */ + private String jmsmmm; + + /** + * 登记序号 必填:否 存在多个登记序号时,需要指定传入一个.例:10117440105249764755 + */ + private String djxhid; + /** + * 税号 必填:是 扣缴单位纳税人识别号 + */ + private String nsrsbh; + /** + * 税款所属期 必填:是 默认为当前月份,格式YYYYMM + */ + private String skssq; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:否 分部门代报时必传 + */ + private String bmbh; + /** + * 部门名称 必填:否 + */ + private String bmmc; + /** + * 申报密码 必填:条件必填 当mmlx=0时,必填 + */ + private String sbmm; + /** + * 加密申报密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 + */ + private String jmsbmm; +} diff --git a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java similarity index 99% rename from src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java rename to src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java index 43995fb0c..3abdd210b 100644 --- a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java @@ -1,4 +1,4 @@ -package com.engine.salary.remote.tax.response.employee; +package com.engine.salary.remote.tax.response.declare; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.entity.taxpayment.response.BaseResponse; @@ -54,7 +54,7 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { // /** // * 非居民所得 必填:是 见非居民所得计算结果 // */ -// private 对象 fjmsd; +// private fjmsd fjmsd; // /** // * 限售股所得 必填:是 见限售股所得计算结果 // */ diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 25906560f..0a78b5421 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryPara import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -131,14 +132,18 @@ public interface TaxDeclareRecordService { * * @param id */ - void declare(Long id); + void declare(Long id, Integer reportType); + + TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType); + + List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId); /** * 个税申报获取反馈 * * @param id */ - void getDeclareFeedback(Long id, TaxDeclarationRateDTO taxDeclarationRate); + void getDeclareFeedback(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate); /** @@ -156,21 +161,21 @@ public interface TaxDeclareRecordService { * * @param id */ - void cancelDeclare(Long id); + void cancelDeclare(Long id, Integer reportType); /** * 获取作废反馈 * * @param id */ - void getCancelFeedback(Long id, TaxDeclarationRateDTO taxDeclarationRate); + void getCancelFeedback(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate); /** * 更正申报 * * @param id */ - void updateDeclare(Long id); + void updateDeclare(Long id, Integer reportType); /** * 撤销申报 @@ -187,7 +192,6 @@ public interface TaxDeclareRecordService { String queryDeclareStatus(Long id); - void updateById(TaxDeclareRecordPO taxDeclareRecord); } diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java index 96546a952..a418082d6 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java @@ -48,7 +48,6 @@ import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; -import com.engine.salary.util.valid.SalaryCardUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -56,7 +55,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.transaction.annotation.Transactional; import weaver.general.Util; import weaver.hrm.User; @@ -195,16 +193,19 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla employeeDeclare.setTaxCycle(saveParam.getTaxCycle()); employeeDeclare.setEmployeeName(saveParam.getEmployeeName()); employeeDeclare.setJobNum(saveParam.getJobNum()); - employeeDeclare.setCardType(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue()); + employeeDeclare.setNationality(saveParam.getNationality()); + employeeDeclare.setCardType(saveParam.getCardType().getValue()); employeeDeclare.setCardNum(saveParam.getCardNum().toUpperCase()); - employeeDeclare.setGender(SalaryCardUtil.judgeGender(saveParam.getCardNum()).getValue()); - employeeDeclare.setBirthday(SalaryDateUtil.localDateToDate(SalaryCardUtil.judgeBirthday(saveParam.getCardNum()))); + employeeDeclare.setGender(saveParam.getGender().getValue()); + employeeDeclare.setBirthday(SalaryDateUtil.localDateToDate(saveParam.getBirthday())); employeeDeclare.setEmploymentStatus(saveParam.getEmploymentStatus().getValue()); employeeDeclare.setMobile(saveParam.getMobile()); employeeDeclare.setEmploymentType(saveParam.getEmploymentType().getValue()); employeeDeclare.setEmploymentFirstYear(""); employeeDeclare.setEmploymentDate(SalaryDateUtil.localDateToDate(saveParam.getEmploymentDate())); employeeDeclare.setDismissDate(SalaryDateUtil.localDateToDate(saveParam.getDismissDate())); + employeeDeclare.setEntryDate(SalaryDateUtil.localDateToDate(saveParam.getEntryDate())); + employeeDeclare.setDepartureDate(SalaryDateUtil.localDateToDate(saveParam.getDepartureDate())); employeeDeclare.setDisability(saveParam.getDisability().getValue()); employeeDeclare.setDisabilityCardNo(saveParam.getDisabilityCardNo()); employeeDeclare.setLonelyOld(saveParam.getLonelyOld().getValue()); @@ -445,7 +446,6 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla } @Override - @Transactional(rollbackFor = Exception.class) public void refresh(EmployeeDeclareRefreshParam refreshParam, Long employeeId) { // 查询本月已有的需要报送的人员 List employeeDeclares = listByTaxCycleAndTaxAgentId(refreshParam.getTaxCycle(), refreshParam.getTaxAgentId()); @@ -510,20 +510,15 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla .setEmployeeDeclares(employeeDeclares) .setPreTaxCycleEmployeeDeclare(preTaxCycleEmployeeDeclares) .setSalaryArchives(salaryArchivePOS) -// .setEmployeeInfos(employeeInfos) .setHrmEmployeeComInfos(employeeInfos); -// .setSimpleUserInfos(newSimpleUserInfos) -// .setExtEmployees(newExtEmployees) EmployeeDeclareRefresh.Result result = EmployeeDeclareRefresh.refresh(dto, employeeId); // 保存新增的人员 if (CollectionUtils.isNotEmpty(result.getNewEmployeeDeclares())) { result.getNewEmployeeDeclares().forEach(getEmployeeDeclareMapper()::insertIgnoreNull); -// getEmployeeDeclareMapper().batchInsert((result.getNewEmployeeDeclares())); } // 更新已有人员 if (CollectionUtils.isNotEmpty(result.getEmployeeDeclares())) { result.getEmployeeDeclares().forEach(getEmployeeDeclareMapper()::updateIgnoreNull); -// updateBatchById(result.getEmployeeDeclares()); } // 记录日志 diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index 706a31334..69d9ecb89 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -34,7 +34,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.remote.tax.client.DeclareClient; -import com.engine.salary.remote.tax.response.employee.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.service.*; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 96e4456e2..89a7fa3c0 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -2,12 +2,12 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.common.LocalDateRange; import com.engine.salary.common.YearMonthRange; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SzyhApiConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.employeedeclare.bo.EmployeeDeclareRequest; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; @@ -39,14 +39,16 @@ import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; 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.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; +import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; import com.engine.salary.remote.tax.client.DeclareClient; -import com.engine.salary.remote.tax.response.employee.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.service.*; import com.engine.salary.service.factory.TaxPaymentServiceFactory; import com.engine.salary.util.*; @@ -86,6 +88,10 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe return MapperProxyFactory.getProxy(TaxDeclareRecordMapper.class); } + private TaxDeclareStatusMapper getTaxDeclareStatusMapper() { + return MapperProxyFactory.getProxy(TaxDeclareStatusMapper.class); + } + private TaxDeclarationService getTaxDeclarationService(User user) { return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); } @@ -319,20 +325,20 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe //更新核算记录状态 getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED); - // 记录日志 - for (TaxDeclareRecordPO taxDeclareRecord : newTaxDeclareRecords) { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgentNameMap.getOrDefault(taxDeclareRecord.getTaxAgentId(), StringUtils.EMPTY)) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "生成个税申报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "生成个税申报表")); - loggerContext.setNewValues(taxDeclareRecord); - SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); - } + // 记录日志 + for (TaxDeclareRecordPO taxDeclareRecord : newTaxDeclareRecords) { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgentNameMap.getOrDefault(taxDeclareRecord.getTaxAgentId(), StringUtils.EMPTY)) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "生成个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "生成个税申报表")); + loggerContext.setNewValues(taxDeclareRecord); + SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); + } } @Override @@ -399,8 +405,8 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe .replace("{0}", taxAgent.getName()) .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "刷新个税申报数据")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "刷新个税申报数据")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "刷新个税申报数据")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "刷新个税申报数据")); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } @@ -609,35 +615,56 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe }); // 记录日志 - writeDeleteLog(taxDeclareRecords); + writeDeleteLog(taxDeclareRecords); } - private void writeDeleteLog(List taxDeclareRecords) { - // 记录日志 - List taxAgents = getTaxAgentService(user).listByIds(SalaryEntityUtil.properties(taxDeclareRecords, TaxDeclareRecordPO::getTaxAgentId)); - Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); - for (TaxDeclareRecordPO taxDeclareRecord : taxDeclareRecords) { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgentNameMap.getOrDefault(taxDeclareRecord.getTaxAgentId(), StringUtils.EMPTY)) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(156453, "删除个税申报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(156453, "删除个税申报表")); - SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); - } - } + private void writeDeleteLog(List taxDeclareRecords) { + // 记录日志 + List taxAgents = getTaxAgentService(user).listByIds(SalaryEntityUtil.properties(taxDeclareRecords, TaxDeclareRecordPO::getTaxAgentId)); + Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); + for (TaxDeclareRecordPO taxDeclareRecord : taxDeclareRecords) { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgentNameMap.getOrDefault(taxDeclareRecord.getTaxAgentId(), StringUtils.EMPTY)) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(156453, "删除个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(156453, "删除个税申报表")); + SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); + } + } @Override - public void declare(Long id) { + public void declare(Long id, Integer reportType) { + + DeclareReportTypeEnum declareReportType = DeclareReportTypeEnum.parseByValue(reportType); + + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + if (declareStatus == null) { + declareStatus = TaxDeclareStatusPO.builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(id) + .reportType(reportType) + .taxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) + .taxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()) + .taxDeclareErrorMsg("") + .personNum(0) + .taxPayAmount("") + .taxPaidAmount("") + .taxPurePaidAmount("") + .deleteType(0) + .build(); + getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); + } + TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - if (StringUtils.isNotEmpty(taxDeclareRecord.getRequestId()) && Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARING.getValue())) { + if (StringUtils.isNotEmpty(declareStatus.getRequestId()) && Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARING.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160526, "目前正处于申报中,请稍后片刻再点击「申报反馈」获取结果")); } - if (StringUtils.isNotEmpty(taxDeclareRecord.getRequestId()) && Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue())) { + if (StringUtils.isNotEmpty(declareStatus.getRequestId()) && Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160527, "目前正处于作废申报中,请稍后片刻再点击「作废反馈」获取结果")); } @@ -674,9 +701,19 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 人员列表 List> employeeDeclareParam = EmployeeDeclareRequest.convert2RequestParam(employeeDeclares); requestParam.put("rylb", employeeDeclareParam); - // 综合所得 - Map taxDeclarationParam = TaxDeclarationRequest.convert2RequestParam(taxReportColumns, taxDeclarations, taxDeclarationValues, employeeDeclares); - requestParam.put("zhsd", taxDeclarationParam); + + if (declareReportType == DeclareReportTypeEnum.COMPREHENSIVE_INCOME) { + // 综合所得 + Map taxDeclarationParam = TaxDeclarationRequest.convert2RequestParam(taxReportColumns, taxDeclarations, taxDeclarationValues, employeeDeclares); + requestParam.put("zhsd", taxDeclarationParam); + } + + if (declareReportType == DeclareReportTypeEnum.NONRESIDENT_INCOME) { + //非居民所得代扣代缴 fjmsd + Map fjmsdRequestParam = TaxDeclarationRequest.convert2fjmsdRequestParam(taxReportColumns, taxDeclarations, taxDeclarationValues, employeeDeclares); + requestParam.put("fjmsd", fjmsdRequestParam); + } + String reqJson = JsonUtil.toJsonString(requestParam); String url = apiConfig.getHost() + SzyhApiConstant.DECLARE_TAX; Map params = new HashMap<>(1); @@ -690,44 +727,57 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (!Objects.equals(declareTaxResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { throw new SalaryRunTimeException(declareTaxResponse.getHead().getMsg()); } - // 更新个税申报记录 - taxDeclareRecord.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARING.getValue()); - taxDeclareRecord.setRequestId(declareTaxResponse.getBody().getRequestId()); - taxDeclareRecord.setUpdateTime(new Date()); - //清除之前的错误 - taxDeclareRecord.setTaxDeclareErrorMsg(""); - getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); + // 删除个税申报申报失败的数据 getTaxDeclareFailService(user).deleteByTaxDeclareRecordIds(Collections.singleton(taxDeclareRecord.getId())); + //更新个税申报状态 + declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARING.getValue()); + declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); + declareStatus.setTaxDeclareErrorMsg(""); + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + // 记录日志 - TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(203562, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgent.getName()) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(156454, "在线申报")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(156454, "在线申报")); - SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); + TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(203562, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgent.getName()) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(156454, "在线申报")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(156454, "在线申报")); + SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } @Override - public void getDeclareFeedback(Long id, TaxDeclarationRateDTO taxDeclarationRate) { + public TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType) { + return getTaxDeclareStatusMapper().getDeclareStatus(taxDeclareRecordId, reportType); + } + + @Override + public List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId) { + return getTaxDeclareStatusMapper().listSome(TaxDeclareStatusPO.builder().taxDeclareRecordId(taxDeclareRecordId).build()); + } + + @Override + public void getDeclareFeedback(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - if (StringUtils.isEmpty(taxDeclareRecord.getRequestId()) || !Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARING.getValue())) { + + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + + if (StringUtils.isEmpty(declareStatus.getRequestId()) || !Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARING.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156496, "请先点击「在线申报」后再点击「申报反馈」获取申报结果")); } TaxDeclarationApiConfigPO apiConfig = taxDeclareRequest.getTaxDeclarationApiConfig(); String url = apiConfig.getHost() + SzyhApiConstant.DECLARE_TAX_FEEDBACK; - ImmutableMap requestParam = ImmutableMap.of("requestId", taxDeclareRecord.getRequestId(), "reportType", "1"); + ImmutableMap requestParam = ImmutableMap.of("requestId", declareStatus.getRequestId(), "reportType", reportType + ""); Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.getRequest(url, header, requestParam); - log.info("申报反馈返回数据: {}, taxDeclareRecord: {}", res, JsonUtil.toJsonString(taxDeclareRecord)); + log.info("申报反馈返回数据: {}, taxDeclareRecord: {},declareStatus :{}", res, JsonUtil.toJsonString(taxDeclareRecord), JsonUtil.toJsonString(declareStatus)); DeclareTaxFeedbackResponse declareTaxFeedbackResponse = JsonUtil.parseObject(res, DeclareTaxFeedbackResponse.class); if (Objects.isNull(declareTaxFeedbackResponse) || Objects.isNull(declareTaxFeedbackResponse.getHead())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); @@ -777,14 +827,13 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } } - taxDeclareRecord.setTaxDeclareErrorMsg(String.join(",", errorMsg)); + declareStatus.setTaxDeclareErrorMsg(String.join(",", errorMsg)); } else { //清除之前的错误 - taxDeclareRecord.setTaxDeclareErrorMsg(""); + declareStatus.setTaxDeclareErrorMsg(""); } // 申报状态 - Integer declareStatus = SalaryEntityUtil.getIntValue(declareTaxFeedbackResponse.getBody().get("sbztbj"), -1); - TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(declareStatus, TaxDeclareStatusEnum.class); + TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(SalaryEntityUtil.getIntValue(declareTaxFeedbackResponse.getBody().get("sbztbj"), -1), TaxDeclareStatusEnum.class); if (taxDeclareStatusEnum == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156509, "服务异常,接口返回数据有误")); } @@ -792,33 +841,33 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (declareFeedBackStatusEnum == DeclareFeedBackStatusEnum.DECLARE_FAIL) { taxDeclareStatusEnum = TaxDeclareStatusEnum.DECLARE_FAIL; } - taxDeclareRecord.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); + declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); // 申报类型 - 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()); - BigDecimal payAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPayAmount()); + declareStatus.setTaxPayAmount(Util.null2String(declareTaxFeedbackResponse.getBody().get("ykjse"))); + declareStatus.setPersonNum(Integer.parseInt(Optional.ofNullable(declareTaxFeedbackResponse.getBody().get("nsrc")).orElse("0").toString())); + declareStatus.setDeclareRequestId(declareStatus.getRequestId()); + declareStatus.setRequestId(""); + BigDecimal purePaidAmount = SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount()); + BigDecimal payAmount = SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount()); if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.equals(taxDeclareStatusEnum) || TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.equals(taxDeclareStatusEnum)) { // 如果是已缴纳状态,则更新已缴纳金额,判断是否需要线下退税 if (purePaidAmount.compareTo(payAmount) > 0) { - taxDeclareRecord.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); - BigDecimal paidAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPaidAmount()); + declareStatus.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); + BigDecimal paidAmount = SalaryEntityUtil.empty2Zero(declareStatus.getTaxPaidAmount()); taxDeclarationRate.setMsg(String.format(SalaryI18nUtil.getI18nLabel(183789, "应缴税额(不含滞纳金等):%s元,已缴金额(可能含滞纳金等):%s元,当前已缴款金额大于应缴纳金额,请线下前往办税大厅办理退款。"), payAmount, paidAmount)); taxDeclarationRate.setMsgPersist(true); } else if (purePaidAmount.compareTo(payAmount) == 0) { - taxDeclareRecord.setTaxPayAmount(BigDecimal.ZERO.toString()); + declareStatus.setTaxPayAmount(BigDecimal.ZERO.toString()); } else { throw new SalaryRunTimeException("缴款数据异常,请处理后重试"); } } else if (TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.equals(taxDeclareStatusEnum)) { // 如果不是已缴纳状态,则减掉之前的已缴纳金额去更新应缴纳金额 - taxDeclareRecord.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); + declareStatus.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); } - // 更新个税申报记录 - getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); + //更新申报状态 + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + // 如果申报失败 if (CollectionUtils.isNotEmpty(taxDeclareFails)) { getTaxDeclareFailService(user).saveBatch(taxDeclareFails); @@ -832,29 +881,31 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe getTaxDeclarationApiBillingService(user).updateApiFlowInfo(apiFlowUpdateWrapper); // 记录日志 - TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(203562, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgent.getName()) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setUser(user); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "申报反馈")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "申报反馈")); + TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(203562, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgent.getName()) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setUser(user); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "申报反馈")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "申报反馈")); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } @Override - public void cancelDeclare(Long id) { + public void cancelDeclare(Long id, Integer reportType) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); // 更正申报成功后不能作废 - if (Objects.equals(taxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.UPDATE_DECLARE.getValue())) { + if (Objects.equals(declareStatus.getTaxDeclareType(), TaxDeclareTypeEnum.UPDATE_DECLARE.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182701, "更正申报后不允许作废")); } // 只有申报成功,无需缴款/申报成功,未缴款的状态才能作废 - if (!Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.getValue()) && !Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue())) { + if (!Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.getValue()) && !Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156497, "只有申报成功,无需缴款/申报成功,未缴款的状态才能作废")); } // 供应商信息 @@ -864,7 +915,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 税款所属期 requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); // 申报类型 - requestParam.put("sblx", "1"); + requestParam.put("sblx", reportType + ""); // 作废银联缴款凭证 // taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()).cancelWithholdingVoucher(apiConfig, taxDeclareRecord, requestParam); // 是否清空所得 @@ -883,37 +934,41 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (!Objects.equals(declareTaxResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { throw new SalaryRunTimeException(declareTaxResponse.getHead().getMsg()); } - // 更新个税申报记录 - taxDeclareRecord.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()); - taxDeclareRecord.setRequestId(declareTaxResponse.getBody().getRequestId()); - taxDeclareRecord.setUpdateTime(new Date()); - getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); + // 更新个税申报状态 + declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()); + declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); - // 记录日志 - TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgent.getName()) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "申报作废")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "申报作废")); + // 记录日志 + TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgent.getName()) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "申报作废")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "申报作废")); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } @Override - public void getCancelFeedback(Long id, TaxDeclarationRateDTO taxDeclarationRate) { + public void getCancelFeedback(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - if (!Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()) || StringUtils.isEmpty(taxDeclareRecord.getRequestId())) { + + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + + + if (!Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()) || StringUtils.isEmpty(declareStatus.getRequestId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156500, "请先点击「作废申报」后再来点击「申报反馈」按钮获取结果")); } + // 供应商信息 TaxDeclarationApiConfigPO apiConfig = taxDeclareRequest.getTaxDeclarationApiConfig(); String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_DECLARE_FEEDBACK; - ImmutableMap requestParam = ImmutableMap.of("requestId", taxDeclareRecord.getRequestId(), "reportType", "1"); + ImmutableMap requestParam = ImmutableMap.of("requestId", declareStatus.getRequestId(), "reportType", reportType + ""); Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.getRequest(url, header, requestParam); log.info("作废反馈返回数据:" + res); @@ -935,22 +990,23 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (taxDeclareStatusEnum == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156509, "服务异常,接口返回数据有误")); } - taxDeclareRecord.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); - taxDeclareRecord.setRequestId(""); - taxDeclareRecord.setUpdateTime(new Date()); - getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); + + //更新个税申报状态 + declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); + declareStatus.setRequestId(""); + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); // 记录日志 - TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgent.getName()) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setUser(user); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "获取申报作废的反馈")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "获取申报作废的反馈")); + TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgent.getName()) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setUser(user); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "获取申报作废的反馈")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "获取申报作废的反馈")); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } @@ -987,11 +1043,14 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe @Override - public void updateDeclare(Long id) { + public void updateDeclare(Long id, Integer reportType) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + + List taxDeclareStatusEnumValueList = Lists.newArrayList(TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue(), TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.getValue(), TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue(), TaxDeclareStatusEnum.DECLARE_SUCCESS_PAYING.getValue()); - if (!taxDeclareStatusEnumValueList.contains(taxDeclareRecord.getTaxDeclareStatus())) { + if (!taxDeclareStatusEnumValueList.contains(declareStatus.getTaxDeclareStatus())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182702, "对不起,只有申报成功后才允许更正申报")); } // 供应商信息 @@ -1001,7 +1060,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 税款所属期 requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); // 申报类型 - requestParam.put("sblx", "1"); + requestParam.put("sblx", reportType + ""); // 请求 String reqJson = JsonUtil.toJsonString(requestParam); log.info("更正申报请求数据:" + reqJson); @@ -1017,23 +1076,24 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (!Objects.equals(updateDeclareResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { throw new SalaryRunTimeException(updateDeclareResponse.getHead().getMsg()); } - taxDeclareRecord.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); - taxDeclareRecord.setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()); - taxDeclareRecord.setRequestId(""); - taxDeclareRecord.setUpdateTime(new Date()); - getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); + + //更新申报状态 + declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); + declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()); + declareStatus.setRequestId(""); + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); // 记录日志 - TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") - .replace("{0}", taxAgent.getName()) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); - loggerContext.setUser(user); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更正申报")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更正申报")); + TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人「{0}」税款所属期「{1}」") + .replace("{0}", taxAgent.getName()) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecord.getTaxCycle()))); + loggerContext.setUser(user); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更正申报")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更正申报")); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } @@ -1076,17 +1136,17 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); // 记录日志 - // TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); - // LoggerContext loggerContext = new LoggerContext<>(); - // loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); - // loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(203562, "个税扣缴义务人「{0}」税款所属期「{1}」") - // .replace("{0}", taxAgent.getName()) - // .replace("{1}", taxDeclareRecord.getTaxCycle())); - // loggerContext.setOperator(Util.null2String(employeeId)); - // loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(177637, "更正申报")); - // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(177637, "更正申报")); - // taxDeclarationLoggerTemplate.write(loggerContext); + // TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); + // LoggerContext loggerContext = new LoggerContext<>(); + // loggerContext.setTargetId(String.valueOf(taxDeclareRecord.getId())); + // loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(203562, "个税扣缴义务人「{0}」税款所属期「{1}」") + // .replace("{0}", taxAgent.getName()) + // .replace("{1}", taxDeclareRecord.getTaxCycle())); + // loggerContext.setOperator(Util.null2String(employeeId)); + // loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(177637, "更正申报")); + // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(177637, "更正申报")); + // taxDeclarationLoggerTemplate.write(loggerContext); } @Override diff --git a/src/com/engine/salary/util/valid/SalaryCardUtil.java b/src/com/engine/salary/util/valid/SalaryCardUtil.java index d8794ecf4..d0dc2bf9e 100644 --- a/src/com/engine/salary/util/valid/SalaryCardUtil.java +++ b/src/com/engine/salary/util/valid/SalaryCardUtil.java @@ -4,7 +4,11 @@ import com.engine.salary.enums.employeedeclare.GenderEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; import java.util.regex.Pattern; /** @@ -16,34 +20,11 @@ import java.util.regex.Pattern; * @version 1.0 **/ public class SalaryCardUtil { - - /** - * 15位的身份证长度 - */ - public static final String CARD_15 = "^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$"; - /** - * 18位的身份证长度 - */ - public static final String CARD_18 = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"; /** * 手机号码 */ public static final String MOBILE = "^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\\d{8}$"; - /** - * 校验身份证号码 - * - * @param idNumber - */ - public static boolean checkIdNum(String idNumber) { - Pattern pattern_15 = Pattern.compile(CARD_15); - Pattern pattern_18 = Pattern.compile(CARD_18); - if (!pattern_15.matcher(idNumber).find() && !pattern_18.matcher(idNumber).find()) { - return false; - } - return true; - } - /** * 校验手机号码 * @@ -107,4 +88,387 @@ public class SalaryCardUtil { } return LocalDate.parse(year + "-" + month + "-" + day); } + + + /** + *
+     * 省、直辖市代码表:
+     *     11 : 北京  12 : 天津  13 : 河北       14 : 山西  15 : 内蒙古
+     *     21 : 辽宁  22 : 吉林  23 : 黑龙江  31 : 上海  32 : 江苏
+     *     33 : 浙江  34 : 安徽  35 : 福建       36 : 江西  37 : 山东
+     *     41 : 河南  42 : 湖北  43 : 湖南       44 : 广东  45 : 广西      46 : 海南
+     *     50 : 重庆  51 : 四川  52 : 贵州       53 : 云南  54 : 西藏
+     *     61 : 陕西  62 : 甘肃  63 : 青海       64 : 宁夏  65 : 新疆
+     *     71 : 台湾
+     *     81 : 香港  82 : 澳门
+     *     91 : 国外
+     * 
+ */ + private static String[] cityCode = { "11", "12", "13", "14", "15", "21", + "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", + "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62", + "63", "64", "65", "71", "81", "82", "91" }; + + /** + * 每位加权因子 + */ + private static int power[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, + 8, 4, 2 }; + + /** + * 验证所有的身份证的合法性 + * + * @param idcard + * 身份证 + * @return 合法返回true,否则返回false + */ + public static boolean checkIdNum(String idcard) { + if (idcard == null || "".equals(idcard)) { + return false; + } + if (idcard.length() == 15) { + return validate15IDCard(idcard); + } + if(idcard.length()==18) { + return validate18Idcard(idcard); + } + return false; + + } + + /** + *

+ * 判断18位身份证的合法性 + *

+ * 根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 + * 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 + *

+ * 顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同 日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配 给女性。 + *

+ *

+ * 1.前1、2位数字表示:所在省份的代码; 2.第3、4位数字表示:所在城市的代码; 3.第5、6位数字表示:所在区县的代码; + * 4.第7~14位数字表示:出生年、月、日; 5.第15、16位数字表示:所在地的派出所的代码; + * 6.第17位数字表示性别:奇数表示男性,偶数表示女性; + * 7.第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。 + *

+ *

+ * 第十八位数字(校验码)的计算方法为: 1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 + * 2 1 6 3 7 9 10 5 8 4 2 + *

+ *

+ * 2.将这17位数字和系数相乘的结果相加。 + *

+ *

+ * 3.用加出来和除以11,看余数是多少 + *

+ * 4.余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 + * 2。 + *

+ * 5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。 + *

+ * + * @param idcard + * @return + */ + public static boolean validate18Idcard(String idcard) { + if (idcard == null) { + return false; + } + + // 非18位为假 + int s=18; + if (idcard.length() != s) { + return false; + } + // 获取前17位 + String idcard17 = idcard.substring(0, 17); + + // 前17位全部为数字 + if (!isDigital(idcard17)) { + return false; + } + + String provinceid = idcard.substring(0, 2); + // 校验省份 + if (!checkProvinceid(provinceid)) { + return false; + } + + // 校验出生日期 + String birthday = idcard.substring(6, 14); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + + try { + Date birthDate = sdf.parse(birthday); + String tmpDate = sdf.format(birthDate); + // 出生年月日不正确 + if (!tmpDate.equals(birthday)) { + return false; + } + + } catch (ParseException e1) { + + return false; + } + + // 获取第18位 + String idcard18Code = idcard.substring(17, 18); + + char c[] = idcard17.toCharArray(); + + int bit[] = converCharToInt(c); + + int sum17 = 0; + + sum17 = getPowerSum(bit); + + // 将和值与11取模得到余数进行校验码判断 + String checkCode = getCheckCodeBySum(sum17); + if (null == checkCode) { + return false; + } + // 将身份证的第18位与算出来的校码进行匹配,不相等就为假 + if (!idcard18Code.equalsIgnoreCase(checkCode)) { + return false; + } + //System.out.println("正确"); + return true; + } + + /** + * 校验15位身份证 + * + *
+     * 只校验省份和出生年月日
+     * 
+ * + * @param idcard + * @return + */ + public static boolean validate15IDCard(String idcard) { + if (idcard == null) { + return false; + } + // 非15位为假 + int s=15; + if (idcard.length() != s) { + return false; + } + + // 15全部为数字 + if (!isDigital(idcard)) { + return false; + } + + String provinceid = idcard.substring(0, 2); + // 校验省份 + if (!checkProvinceid(provinceid)) { + return false; + } + + String birthday = idcard.substring(6, 12); + + SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); + + try { + Date birthDate = sdf.parse(birthday); + String tmpDate = sdf.format(birthDate); + // 身份证日期错误 + if (!tmpDate.equals(birthday)) { + return false; + } + + } catch (ParseException e1) { + + return false; + } + + return true; + } + + /** + * 将15位的身份证转成18位身份证 + * + * @param idcard + * @return + */ + public static String convertIdcarBy15bit(String idcard) { + if (idcard == null) { + return null; + } + + // 非15位身份证 + int s=15; + if (idcard.length() != s) { + return null; + } + + // 15全部为数字 + if (!isDigital(idcard)) { + return null; + } + + String provinceid = idcard.substring(0, 2); + // 校验省份 + if (!checkProvinceid(provinceid)) { + return null; + } + + String birthday = idcard.substring(6, 12); + + SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); + + Date birthdate = null; + try { + birthdate = sdf.parse(birthday); + String tmpDate = sdf.format(birthdate); + // 身份证日期错误 + if (!tmpDate.equals(birthday)) { + return null; + } + + } catch (ParseException e1) { + return null; + } + + Calendar cday = Calendar.getInstance(); + cday.setTime(birthdate); + String year = String.valueOf(cday.get(Calendar.YEAR)); + + String idcard17 = idcard.substring(0, 6) + year + idcard.substring(8); + + char c[] = idcard17.toCharArray(); + String checkCode = ""; + + // 将字符数组转为整型数组 + int bit[] = converCharToInt(c); + + int sum17 = 0; + sum17 = getPowerSum(bit); + + // 获取和值与11取模得到余数进行校验码 + checkCode = getCheckCodeBySum(sum17); + + // 获取不到校验位 + if (null == checkCode) { + return null; + } + // 将前17位与第18位校验码拼接 + idcard17 += checkCode; + return idcard17; + } + + /** + * 校验省份 + * + * @param provinceid + * @return 合法返回TRUE,否则返回FALSE + */ + private static boolean checkProvinceid(String provinceid) { + for (String id : cityCode) { + if (id.equals(provinceid)) { + return true; + } + } + return false; + } + + /** + * 数字验证 + * + * @param str + * @return + */ + private static boolean isDigital(String str) { + return str.matches("^[0-9]*$"); + } + + /** + * 将身份证的每位和对应位的加权因子相乘之后,再得到和值 + * + * @param bit + * @return + */ + private static int getPowerSum(int[] bit) { + + int sum = 0; + + if (power.length != bit.length) { + return sum; + } + + for (int i = 0; i < bit.length; i++) { + for (int j = 0; j < power.length; j++) { + if (i == j) { + sum = sum + bit[i] * power[j]; + } + } + } + return sum; + } + + /** + * 将和值与11取模得到余数进行校验码判断 + * + * @param sum17 + * @param sum17 + * @return 校验位 + */ + private static String getCheckCodeBySum(int sum17) { + String checkCode = null; + switch (sum17 % 11) { + case 10: + checkCode = "2"; + break; + case 9: + checkCode = "3"; + break; + case 8: + checkCode = "4"; + break; + case 7: + checkCode = "5"; + break; + case 6: + checkCode = "6"; + break; + case 5: + checkCode = "7"; + break; + case 4: + checkCode = "8"; + break; + case 3: + checkCode = "9"; + break; + case 2: + checkCode = "x"; + break; + case 1: + checkCode = "0"; + break; + case 0: + checkCode = "1"; + break; + default: + } + return checkCode; + } + + /** + * 将字符数组转为整型数组 + * + * @param c + * @return + * @throws NumberFormatException + */ + private static int[] converCharToInt(char[] c) throws NumberFormatException { + int[] a = new int[c.length]; + int k = 0; + for (char temp : c) { + a[k++] = Integer.parseInt(String.valueOf(temp)); + } + return a; + } } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index bc0eb3f65..3586123dd 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -217,7 +217,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String declare(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::declare, taxDeclareRecordParam.getTaxDeclareRecordId()); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::declare, taxDeclareRecordParam); } /** @@ -231,7 +231,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String getDeclareFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getDeclareFeedback, taxDeclareRecordParam.getTaxDeclareRecordId()); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getDeclareFeedback, taxDeclareRecordParam); } /** @@ -291,7 +291,7 @@ public class TaxDeclarationController { @POST @Path("/contrast") @Produces(MediaType.APPLICATION_JSON) - public String contrast(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody ContrastQueryParam param) { + public String contrast(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ContrastQueryParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::contrast, param); } @@ -340,7 +340,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String cancel(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::cancelDeclare, taxDeclareRecordParam.getTaxDeclareRecordId()); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::cancelDeclare, taxDeclareRecordParam); } /** @@ -354,7 +354,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String getCancelFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getCancelFeedback, taxDeclareRecordParam.getTaxDeclareRecordId()); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getCancelFeedback, taxDeclareRecordParam); } /** @@ -368,7 +368,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String updateDeclare(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::updateDeclare, taxDeclareRecordParam.getTaxDeclareRecordId()); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::updateDeclare, taxDeclareRecordParam); } /** @@ -508,8 +508,6 @@ public class TaxDeclarationController { } - - /** * 个税申报表详情列表 * diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 39623bb5a..65ad5b8ef 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -279,8 +279,12 @@ public class EmployeeDeclareWrapper extends Service { .setEmployee(Collections.singletonList(employeeMap)) .setEmployeeName(employeeDeclare.getEmployeeName()) .setJobNum(employeeDeclare.getJobNum()) - .setNationality(SalaryI18nUtil.getI18nLabel(94731, "中国")) - .setCardType(CardTypeEnum.RESIDENT_IDENTITY_CARDS) + .setNationality(employeeDeclare.getNationality()) + .setNationality(employeeDeclare.getNationality()) + .setNationality(employeeDeclare.getNationality()) + .setEntryDate(employeeDeclare.getEntryDate()) + .setDepartureDate(employeeDeclare.getDepartureDate()) + .setCardType(CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType())) .setCardNum(employeeDeclare.getCardNum()) .setGender(SalaryEnumUtil.enumMatchByValue(employeeDeclare.getGender(), GenderEnum.class)) .setBirthday(employeeDeclare.getBirthday()) diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 9e115aa32..41f17f5e5 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -2,9 +2,9 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareListQueryParam; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; @@ -27,12 +27,12 @@ import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryEnumUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; import com.weaver.util.threadPool.entity.LocalRunnable; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.utils.Lists; @@ -354,6 +354,7 @@ public class TaxDeclareRecordWrapper extends Service { TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclareRecord.getTaxAgentId()); TaxDeclareTypeEnum taxDeclareTypeEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.class); TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.class); + return TaxDeclarationInfoDTO.builder() .salaryMonth(taxDeclareRecord.getSalaryMonth()) .taxCycle(taxDeclareRecord.getTaxCycle()) @@ -432,9 +433,10 @@ public class TaxDeclareRecordWrapper extends Service { /** * 申报 * - * @param id + * @param */ - public String declare(Long id) { + public String declare(TaxDeclareRecordParam taxDeclareRecordParam) { + Long id = taxDeclareRecordParam.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) .setMsg(SalaryI18nUtil.getI18nLabel(156454, "在线申报")); @@ -443,7 +445,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).declare(id); + getTaxDeclareRecordService(user).declare(id, taxDeclareRecordParam.getReportType()); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); @@ -461,10 +463,9 @@ public class TaxDeclareRecordWrapper extends Service { /** * 获取申报反馈 - * - * @param id */ - public String getDeclareFeedback(Long id) { + public String getDeclareFeedback(TaxDeclareRecordParam param) { + Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) .setMsg(SalaryI18nUtil.getI18nLabel(182680, "获取申报反馈")); @@ -473,7 +474,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).getDeclareFeedback(id, taxDeclarationRate); + getTaxDeclareRecordService(user).getDeclareFeedback(id, param.getReportType(), taxDeclarationRate); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); @@ -501,10 +502,9 @@ public class TaxDeclareRecordWrapper extends Service { /** * 作废 - * - * @param id */ - public String cancelDeclare(Long id) { + public String cancelDeclare(TaxDeclareRecordParam param) { + Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) .setMsg(SalaryI18nUtil.getI18nLabel(158842, "作废申报")); @@ -513,7 +513,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).cancelDeclare(id); + getTaxDeclareRecordService(user).cancelDeclare(id, param.getReportType()); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); @@ -531,10 +531,9 @@ public class TaxDeclareRecordWrapper extends Service { /** * 获取作废反馈 - * - * @param id */ - public String getCancelFeedback(Long id) { + public String getCancelFeedback(TaxDeclareRecordParam param) { + Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) .setMsg(SalaryI18nUtil.getI18nLabel(182681, "获取作废申报反馈")); @@ -543,7 +542,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).getCancelFeedback(id, taxDeclarationRate); + getTaxDeclareRecordService(user).getCancelFeedback(id, param.getReportType(), taxDeclarationRate); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); @@ -562,10 +561,10 @@ public class TaxDeclareRecordWrapper extends Service { /** * 更正申报 * - * @param id * @return */ - public String updateDeclare(Long id) { + public String updateDeclare(TaxDeclareRecordParam param) { + Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) .setMsg(SalaryI18nUtil.getI18nLabel(177637, "更正申报")); @@ -574,7 +573,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).updateDeclare(id); + getTaxDeclareRecordService(user).updateDeclare(id, param.getReportType()); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); @@ -652,6 +651,7 @@ public class TaxDeclareRecordWrapper extends Service { /** * 导出在线对比 + * * @param param * @return */ @@ -865,8 +865,8 @@ public class TaxDeclareRecordWrapper extends Service { .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecordPO.getTaxCycle())) .replace("{2}", declarationValuePO.getEmployeeId().toString())); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除个税申报数据")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除个税申报数据")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除个税申报数据")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除个税申报数据")); loggerContext.setOldValues(declarationValuePO); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } diff --git a/test/ParseTaxApi.java b/test/ParseTaxApi.java index 3e4b45d9d..56bb4a986 100644 --- a/test/ParseTaxApi.java +++ b/test/ParseTaxApi.java @@ -7,9 +7,9 @@ import java.util.List; public class ParseTaxApi { public static void main(String[] args) { -// readExcel("H:\\code\\salary\\resource\\sql\\ApiDes.xlsx"); + readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); - readExcel2("H:\\code\\salary\\resource\\sql\\ApiDes.xlsx"); +// readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); } From 8e2ff975a93c85fb28988adcf7bba6561af0698c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 29 Mar 2024 14:01:12 +0800 Subject: [PATCH 02/15] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/TaxDeclarationReportDTO.java | 33 +++++++++++++++ .../service/TaxDeclareRecordService.java | 1 + .../impl/TaxDeclareRecordServiceImpl.java | 41 +++++++++++++++++++ .../salary/web/TaxDeclarationController.java | 15 +++++++ .../wrapper/TaxDeclareRecordWrapper.java | 4 ++ 5 files changed, 94 insertions(+) create mode 100644 src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationReportDTO.java diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationReportDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationReportDTO.java new file mode 100644 index 000000000..dbebb32bb --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationReportDTO.java @@ -0,0 +1,33 @@ +package com.engine.salary.entity.taxdeclaration.dto; + +import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 个税申报类型 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxDeclarationReportDTO { + + private DeclareReportTypeEnum reportType; + + private TaxDeclareStatusPO status; + + private List taxDeclarations; + +} diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 0a78b5421..00a082ecf 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -194,4 +194,5 @@ public interface TaxDeclareRecordService { void updateById(TaxDeclareRecordPO taxDeclareRecord); + void getTaxReportType(Long id); } diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 89a7fa3c0..6bb017d88 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -1199,6 +1199,47 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); } + @Override + public void getTaxReportType(Long id) { + List taxDeclareStatusByTaxDeclareRecordId = getTaxDeclareStatusByTaxDeclareRecordId(id); + + DeclareReportTypeEnum declareReportType = DeclareReportTypeEnum.parseByValue(reportType); + + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + if (declareStatus == null) { + declareStatus = TaxDeclareStatusPO.builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(id) + .reportType(reportType) + .taxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) + .taxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()) + .taxDeclareErrorMsg("") + .personNum(0) + .taxPayAmount("") + .taxPaidAmount("") + .taxPurePaidAmount("") + .deleteType(0) + .build(); + getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); + } + + // 查询个税申报记录 + TaxDeclareRecordPO taxDeclareRecord = getById(id); + if (Objects.isNull(taxDeclareRecord)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156495, "参数异常,个税申报记录不存在或已被删除")); + } + + // 查询个税申报表 + List taxDeclarations = getTaxDeclarationService(user).listByTaxCycleAndTaxAgentIds(SalaryDateUtil.localDate2YearMonth(taxDeclareRecord.getTaxCycle()), Collections.singleton(taxDeclareRecord.getTaxAgentId())); + if (CollectionUtils.isEmpty(taxDeclarations)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156494, "当前无可申报的数据")); + } + + taxDeclarations.forEach(taxDeclarationPO -> { + + }); + } + private TaxDeclareRequest buildTaxDeclareRequest(Long id) { // 查询供应商信息 diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 3586123dd..1608703d6 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -90,6 +90,21 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getForm, id); } + + /** + * 个税申报左侧分类 + * + * @param id 个税申报记录id + * @return + */ + @GET + @Path("/getTaxReportType") + @Produces(MediaType.APPLICATION_JSON) + public String getTaxReportType(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getTaxReportType, id); + } + /** * 个税申报表相关信息 * diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 41f17f5e5..7cb884858 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -870,4 +870,8 @@ public class TaxDeclareRecordWrapper extends Service { loggerContext.setOldValues(declarationValuePO); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } + + public void getTaxReportType(Long id) { + getTaxDeclareRecordService(user).getTaxReportType(id); + } } From 57a0030cc8c9e46a010ff44f40912c8f56b6f989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Apr 2024 17:07:36 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=A4=96=E7=B1=8D?= =?UTF-8?q?=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/TaxDeclareRecordParam.java | 2 + .../service/TaxDeclareRecordService.java | 2 +- .../impl/TaxDeclareRecordServiceImpl.java | 72 +++++++++---------- .../salary/web/TaxDeclarationController.java | 23 +++--- .../wrapper/TaxDeclareRecordWrapper.java | 33 +++++---- 5 files changed, 65 insertions(+), 67 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java index 6e1104507..d0fe52a80 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxdeclaration.param; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import lombok.Data; /** @@ -18,6 +19,7 @@ public class TaxDeclareRecordParam { /** * 申报类型 + * @see DeclareReportTypeEnum */ private Integer reportType; } diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 00a082ecf..c4cbeca10 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -194,5 +194,5 @@ public interface TaxDeclareRecordService { void updateById(TaxDeclareRecordPO taxDeclareRecord); - void getTaxReportType(Long id); + List getTaxReports(Long id); } diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 6bb017d88..c8da3fde0 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -642,22 +642,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe DeclareReportTypeEnum declareReportType = DeclareReportTypeEnum.parseByValue(reportType); TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); - if (declareStatus == null) { - declareStatus = TaxDeclareStatusPO.builder() - .id(IdGenerator.generate()) - .taxDeclareRecordId(id) - .reportType(reportType) - .taxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) - .taxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()) - .taxDeclareErrorMsg("") - .personNum(0) - .taxPayAmount("") - .taxPaidAmount("") - .taxPurePaidAmount("") - .deleteType(0) - .build(); - getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); - } + TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); @@ -757,7 +742,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } @Override - public List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId) { + public List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId) { return getTaxDeclareStatusMapper().listSome(TaxDeclareStatusPO.builder().taxDeclareRecordId(taxDeclareRecordId).build()); } @@ -1200,28 +1185,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } @Override - public void getTaxReportType(Long id) { - List taxDeclareStatusByTaxDeclareRecordId = getTaxDeclareStatusByTaxDeclareRecordId(id); - - DeclareReportTypeEnum declareReportType = DeclareReportTypeEnum.parseByValue(reportType); - - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); - if (declareStatus == null) { - declareStatus = TaxDeclareStatusPO.builder() - .id(IdGenerator.generate()) - .taxDeclareRecordId(id) - .reportType(reportType) - .taxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) - .taxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()) - .taxDeclareErrorMsg("") - .personNum(0) - .taxPayAmount("") - .taxPaidAmount("") - .taxPurePaidAmount("") - .deleteType(0) - .build(); - getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); - } + public List getTaxReports(Long id) { // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getById(id); @@ -1235,9 +1199,37 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156494, "当前无可申报的数据")); } - taxDeclarations.forEach(taxDeclarationPO -> { + Set reportTypes = new HashSet<>(); + taxDeclarations.forEach(taxDeclarationPO -> { + reportTypes.add(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getReportType().getValue()); }); + + List statuses = new ArrayList<>(); + + reportTypes.forEach(reportType -> { + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + if (declareStatus == null) { + declareStatus = TaxDeclareStatusPO.builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(id) + .reportType(reportType) + .taxDeclareType(taxDeclareRecord.getTaxDeclareType()) + .taxDeclareStatus(taxDeclareRecord.getTaxDeclareStatus()) + .taxDeclareErrorMsg(taxDeclareRecord.getTaxDeclareErrorMsg()) + .personNum(taxDeclareRecord.getPersonNum()) + .taxPayAmount(taxDeclareRecord.getTaxPayAmount()) + .taxPaidAmount(taxDeclareRecord.getTaxPaidAmount()) + .taxPurePaidAmount(taxDeclareRecord.getTaxPaidAmount()) + .deleteType(0) + .build(); + getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); + } + + statuses.add(declareStatus); + }); + + return statuses; } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 1608703d6..d1a9ea2c1 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -3,6 +3,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.param.*; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.service.TaxDeclarationExcelService; import com.engine.salary.service.TaxDeclarationService; @@ -98,25 +99,24 @@ public class TaxDeclarationController { * @return */ @GET - @Path("/getTaxReportType") + @Path("/getTaxReports") @Produces(MediaType.APPLICATION_JSON) public String getTaxReportType(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getTaxReportType, id); + return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::getTaxReports, id); } /** * 个税申报表相关信息 * - * @param id 个税申报记录id * @return */ - @GET + @POST @Path("/getTaxDeclarationInfo") @Produces(MediaType.APPLICATION_JSON) - public String getTaxDeclarationInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + public String getTaxDeclarationInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getTaxDeclarationInfoById, id); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getTaxDeclarationInfoById, param); } /** @@ -179,15 +179,14 @@ public class TaxDeclarationController { /** * 获取个税申报记录下的个税申报表TAB * - * @param id 个税申报记录id * @return */ - @GET + @POST @Path("/getTaxDeclarationTab") @Produces(MediaType.APPLICATION_JSON) - public String getTaxDeclarationTab(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + public String getTaxDeclarationTab(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::getTaxDeclarationTab, id); + return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::getTaxDeclarationTab, param); } /** @@ -199,7 +198,7 @@ public class TaxDeclarationController { @POST @Path("/addTaxDeclaration") @Produces(MediaType.APPLICATION_JSON) - public String addTaxDeclarationTab(@Context HttpServletRequest request, @Context HttpServletResponse response, TaxDeclarationAddParam param) { + public String addTaxDeclarationTab(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody TaxDeclarationAddParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::addTaxDeclaration, param); } @@ -215,7 +214,7 @@ public class TaxDeclarationController { @POST @Path("/deleteTaxDeclaration") @Produces(MediaType.APPLICATION_JSON) - public String deleteTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, TaxDeclarationDeleteParam param) { + public String deleteTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody TaxDeclarationDeleteParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::deleteTaxDeclaration, param); } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 7cb884858..67bb280e7 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -17,6 +17,7 @@ import com.engine.salary.enums.OperateTypeEnum; 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.DeclareReportTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareTypeEnum; @@ -287,18 +288,20 @@ public class TaxDeclareRecordWrapper extends Service { /** * 获取个税申报记录下的个税申报表TAB * - * @param id * @return */ - public List getTaxDeclarationTab(Long id) { + public List getTaxDeclarationTab(TaxDeclareRecordParam param) { // 查询个税申报记录 - TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(id); + TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); + // 查询个税申报记录下的个税申报表 List taxDeclarations = getTaxDeclarationService(user).listByTaxCycleAndTaxAgentIds(SalaryDateUtil.localDate2YearMonth(taxDeclareRecord.getTaxCycle()), Collections.singleton(taxDeclareRecord.getTaxAgentId())); -// taxDeclarations = taxDeclarations.stream() -// .filter(e -> Objects.equals(e.getControlView(), 0) || Objects.equals(e.getCreator(), (long)user.getUID())) -// .collect(Collectors.toList()); + + //筛选申报类型 + DeclareReportTypeEnum declareReportTypeEnum = DeclareReportTypeEnum.parseByValue(param.getReportType()); + taxDeclarations = taxDeclarations.stream().filter(po -> IncomeCategoryEnum.parseByValue(po.getIncomeCategory()).getReportType() == declareReportTypeEnum).collect(Collectors.toList()); + Map taxDeclarationMap = SalaryEntityUtil.convert2Map(taxDeclarations, TaxDeclarationPO::getIncomeCategory); List tabs = Lists.newArrayList(); for (IncomeCategoryEnum incomeCategoryEnum : IncomeCategoryEnum.values()) { @@ -331,12 +334,12 @@ public class TaxDeclareRecordWrapper extends Service { /** * 查询个税申报表的基本信息 * - * @param id 个税申报表id * @return */ - public TaxDeclarationInfoDTO getTaxDeclarationInfoById(Long id) { + public TaxDeclarationInfoDTO getTaxDeclarationInfoById(TaxDeclareRecordParam param) { // 查询个税申报表 - TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(id); + Long taxDeclareRecordId = param.getTaxDeclareRecordId(); + TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(taxDeclareRecordId); if (Objects.isNull(taxDeclareRecord)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98877, "个税申报表不存在或已删除")); } @@ -352,8 +355,10 @@ public class TaxDeclareRecordWrapper extends Service { List taxDeclareFails = getTaxDeclareFailService(user).listByTaxDeclareRecordIds(Collections.singleton(taxDeclareRecord.getId())); // 查询个税扣缴义务人 TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclareRecord.getTaxAgentId()); - TaxDeclareTypeEnum taxDeclareTypeEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.class); - TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.class); + + TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareRecordService(user).getTaxDeclareStatus(taxDeclareRecordId, param.getReportType()); + TaxDeclareTypeEnum taxDeclareTypeEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareStatus.getTaxDeclareType(), TaxDeclareTypeEnum.class); + TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.class); return TaxDeclarationInfoDTO.builder() .salaryMonth(taxDeclareRecord.getSalaryMonth()) @@ -364,7 +369,7 @@ public class TaxDeclareRecordWrapper extends Service { .declareTypeDesc(taxDeclareTypeEnum == null ? "" : SalaryI18nUtil.getI18nLabel(taxDeclareTypeEnum.getLabelId(), taxDeclareTypeEnum.getDefaultLabel())) .declareStatus(taxDeclareStatusEnum) .declareStatusDesc(taxDeclareStatusEnum == null ? "" : SalaryI18nUtil.getI18nLabel(taxDeclareStatusEnum.getLabelId(), taxDeclareStatusEnum.getDefaultLabel())) - .declareErrorMsg(taxDeclareRecord.getTaxDeclareErrorMsg()) + .declareErrorMsg(taxDeclareStatus.getTaxDeclareErrorMsg()) .displayIcon(Objects.equals(taxDeclareRecord.getDisplayUpdateIcon(), 1)) .declareFailSize(taxDeclareFails.size()) .abnormalSize(notDeclareTaxDeclareEmployees.size() + noValueTaxDeclareEmployees.size()) @@ -871,7 +876,7 @@ public class TaxDeclareRecordWrapper extends Service { SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } - public void getTaxReportType(Long id) { - getTaxDeclareRecordService(user).getTaxReportType(id); + public List getTaxReports(Long id) { + return getTaxDeclareRecordService(user).getTaxReports(id); } } From 7f965c41c9de3e029b8e0aba759272515f7ba974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 2 Apr 2024 15:50:33 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=A1=A8=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9B=B4=E6=96=B0=E4=B8=BB=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxdeclaration/po/TaxDeclareStatusPO.java | 2 + .../impl/TaxDeclareRecordServiceImpl.java | 41 ++++++++++++++----- .../wrapper/TaxDeclareRecordWrapper.java | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java index d138cc23e..5e9d93e88 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.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; @@ -34,6 +35,7 @@ public class TaxDeclareStatusPO { private Integer taxDeclareType; /** * 申报状态 + * @see TaxDeclareStatusEnum */ private Integer taxDeclareStatus; /** diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index c8da3fde0..23f2b4799 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -72,6 +72,8 @@ import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum.NOT_DECLARE; + /** * 个税申报 *

Copyright: Copyright (c) 2022

@@ -278,12 +280,12 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe TaxDeclareRecordPO oldTaxDeclareRecord = taxDeclareRecordMap.get(taxCycleEntry.getKey() + "-" + taxAgentIdEntry.getKey()); // 如果已经生成了个税申报表,并且个税申报表已经申报过了,就跳过 if (oldTaxDeclareRecord != null) { - if (!(Objects.equals(oldTaxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(oldTaxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()))) { + if (!(Objects.equals(oldTaxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(oldTaxDeclareRecord.getTaxDeclareStatus(), NOT_DECLARE.getValue()))) { continue; } needDeleteTaxDeclareRecordIds.add(oldTaxDeclareRecord.getId()); } - TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO().setId(IdGenerator.generate()).setTaxAgentId(taxAgentIdEntry.getKey()).setSalaryMonth(saveParam.getSalaryMonth()).setTaxCycle(taxCycleEntry.getKey()).setTaxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()).setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()).setRemark(saveParam.getDescription()).setCreator((long) user.getUID()).setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()).setCreateTime(now).setUpdateTime(now); + TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO().setId(IdGenerator.generate()).setTaxAgentId(taxAgentIdEntry.getKey()).setSalaryMonth(saveParam.getSalaryMonth()).setTaxCycle(taxCycleEntry.getKey()).setTaxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()).setTaxDeclareStatus(NOT_DECLARE.getValue()).setRemark(saveParam.getDescription()).setCreator((long) user.getUID()).setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()).setCreateTime(now).setUpdateTime(now); newTaxDeclareRecords.add(taxDeclareRecord); // 生成个税申报表 TaxDeclarationResult taxDeclarationResult = generateReportPerRecord(taxDeclareRecord, taxAgentIdEntry.getValue()); @@ -348,7 +350,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (Objects.isNull(taxDeclareRecord)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156495, "参数异常,个税申报记录不存在或已被删除")); } - if (!Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()) && !Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue())) { + if (!Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), NOT_DECLARE.getValue()) && !Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182700, "对不起,只有未申报状态下可以刷新数据")); } // 查询税款所属期下的薪资核算人员 @@ -488,7 +490,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe for (Map.Entry> taxCycleEntry : taxCycleKeySalaryAcctTaxAgentMap.entrySet()) { Set archivedTaxAgentIds = SalaryEntityUtil.properties(taxCycleEntry.getValue(), SalaryAcctTaxAgentPO::getTaxAgentId); List taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(saveParam.getSalaryMonth(), archivedTaxAgentIds); - TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> archivedTaxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId()) && !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null); + TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> archivedTaxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId()) && !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null); // 已经申报成功了的个税申报表的个税扣缴义务人不允许重新生成 if (Objects.nonNull(declareSuccessTaxDeclareRecord)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160522, "已开启智能算薪业务,个税扣缴义务人{0}的税款所属期{1}的个税申报表正在申报中或者已经申报成功,不可重复生成").replace("{0}", taxAgentNameMap.get(declareSuccessTaxDeclareRecord.getTaxAgentId())).replace("{1}", SalaryDateUtil.getFormatYearMonth(declareSuccessTaxDeclareRecord.getTaxCycle()))); @@ -589,7 +591,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (CollectionUtils.isEmpty(taxDeclareRecords)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160524, "个税申报表不存在或已被删除")); } - List cantDeleteTaxDeclareRecords = taxDeclareRecords.stream().filter(e -> !(Objects.equals(e.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(e.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()))).collect(Collectors.toList()); + List cantDeleteTaxDeclareRecords = taxDeclareRecords.stream().filter(e -> !(Objects.equals(e.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(e.getTaxDeclareStatus(), NOT_DECLARE.getValue()))).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(cantDeleteTaxDeclareRecords)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(177854, "个税申报表已经申报,无法删除")); } @@ -1064,7 +1066,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe //更新申报状态 declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); - declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()); + declareStatus.setTaxDeclareStatus(NOT_DECLARE.getValue()); declareStatus.setRequestId(""); getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); @@ -1200,14 +1202,19 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } Set reportTypes = new HashSet<>(); - taxDeclarations.forEach(taxDeclarationPO -> { reportTypes.add(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getReportType().getValue()); }); List statuses = new ArrayList<>(); - reportTypes.forEach(reportType -> { + + int personNum = 0; + BigDecimal taxPayAmount = new BigDecimal(0); + BigDecimal taxPaidAmount = new BigDecimal(0); + BigDecimal taxPurePaidAmount = new BigDecimal(0); + + for (Integer reportType : reportTypes) { TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); if (declareStatus == null) { declareStatus = TaxDeclareStatusPO.builder() @@ -1225,9 +1232,23 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe .build(); getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); } - statuses.add(declareStatus); - }); + + personNum += declareStatus.getPersonNum(); + taxPayAmount = taxPayAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount())); + taxPaidAmount = taxPaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPaidAmount())); + taxPurePaidAmount = taxPurePaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount())); + } + + //更新记录的状态,各个报表状态一致则采纳,否则取最小的进度状态 + Integer declareStatusEnum = statuses.stream().map(TaxDeclareStatusPO::getTaxDeclareStatus).min(Comparator.comparing(Integer::valueOf)).orElse(NOT_DECLARE.getValue()); + + taxDeclareRecord.setPersonNum(personNum); + taxDeclareRecord.setTaxPayAmount(taxPayAmount.toString()); + taxDeclareRecord.setTaxPaidAmount(taxPaidAmount.toString()); + taxDeclareRecord.setTaxPurePaidAmount(taxPurePaidAmount.toString()); + taxDeclareRecord.setTaxDeclareStatus(declareStatusEnum); + updateById(taxDeclareRecord); return statuses; } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 67bb280e7..74cf1999c 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -373,7 +373,7 @@ public class TaxDeclareRecordWrapper extends Service { .displayIcon(Objects.equals(taxDeclareRecord.getDisplayUpdateIcon(), 1)) .declareFailSize(taxDeclareFails.size()) .abnormalSize(notDeclareTaxDeclareEmployees.size() + noValueTaxDeclareEmployees.size()) - .taxPaidAmount(SalaryEntityUtil.thousandthConvert(taxDeclareRecord.getTaxPaidAmount())) + .taxPaidAmount(SalaryEntityUtil.thousandthConvert(taxDeclareStatus.getTaxPaidAmount())) .build(); } From fbc9c1a1878f46e530cc782f77d70c069181265a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 7 Apr 2024 11:29:09 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=A1=A8=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9B=B4=E6=96=B0=E4=B8=BB=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/TaxDeclareRecordParam.java | 7 +- .../taxdeclaration/po/TaxDeclareStatusPO.java | 2 + .../param/TaxPaymentQueryParam.java | 3 + .../service/TaxDeclareRecordService.java | 9 +- .../impl/TaxDeclareRecordServiceImpl.java | 29 +++-- .../TaxPaymentWithheldVoucherServiceImpl.java | 17 ++- .../TaxPaymentWithholdingServiceImpl.java | 112 ++++++++++++------ .../salary/web/TaxDeclarationController.java | 16 +-- .../wrapper/TaxDeclareRecordWrapper.java | 7 +- 9 files changed, 134 insertions(+), 68 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java index d0fe52a80..54b1ee11a 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclareRecordParam.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.taxdeclaration.param; import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; +import com.engine.salary.util.valid.DataCheck; import lombok.Data; /** @@ -14,12 +15,16 @@ import lombok.Data; @Data public class TaxDeclareRecordParam { - //个税申报记录id") + /** + * 个税申报记录id + */ + @DataCheck(require = true,message = "个税申报记录id不能为空!") private Long taxDeclareRecordId; /** * 申报类型 * @see DeclareReportTypeEnum */ + @DataCheck(require = true,message = "申报类型不能为空!") private Integer reportType; } diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java index 5e9d93e88..8919ed2f1 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxdeclaration.po; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -23,6 +24,7 @@ public class TaxDeclareStatusPO { private Long taxDeclareRecordId; /** * 申报类型 1:综合所得; 2: 分类所得;3:非居民所得;4:限售股所得 + * @see DeclareReportTypeEnum */ private Integer reportType; /** diff --git a/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java b/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java index 6338da065..8e3fbbfef 100644 --- a/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java +++ b/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java @@ -44,4 +44,7 @@ public class TaxPaymentQueryParam { //是否为反馈校验 0否 1是") private Integer checkFeedback; + + //申报表类型 + private Integer reportType; } diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index c4cbeca10..911752afe 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -5,6 +5,7 @@ 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.param.TaxDeclareRecordParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; @@ -85,9 +86,8 @@ public interface TaxDeclareRecordService { /** * 税局端申报明细查询 * - * @param id */ - String queryCompanyIncomes(Long id); + String queryCompanyIncomes(TaxDeclareRecordParam taxDeclareRecordParam); /** @@ -194,5 +194,8 @@ public interface TaxDeclareRecordService { void updateById(TaxDeclareRecordPO taxDeclareRecord); - List getTaxReports(Long id); + List getOrInitTaxReports(Long id); + + + void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus); } diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 23f2b4799..afec5e507 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -27,10 +27,7 @@ import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO; 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.param.*; import com.engine.salary.entity.taxdeclaration.po.*; import com.engine.salary.entity.taxdeclaration.response.CancelDeclareFeedbackResponse; import com.engine.salary.entity.taxdeclaration.response.DeclareTaxFeedbackResponse; @@ -57,6 +54,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -1068,7 +1066,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); declareStatus.setTaxDeclareStatus(NOT_DECLARE.getValue()); declareStatus.setRequestId(""); - getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -1084,6 +1082,14 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } + @Override + public void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus) { + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + + //更新主记录 + getOrInitTaxReports(declareStatus.getTaxDeclareRecordId()); + } + @Override public void cancelCorrect(Long id) { @@ -1144,8 +1150,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe Map requestParam = taxDeclareRequest.getRequestParam(); // 税款所属期 requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); - // 申报类型 - requestParam.put("sblx", "1"); // 请求 String reqJson = JsonUtil.toJsonString(requestParam); String url = apiConfig.getHost() + SzyhApiConstant.QUERY_DECLARE_STATUS; @@ -1157,15 +1161,17 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } @Override - public String queryCompanyIncomes(Long id) { - TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); + public String queryCompanyIncomes(TaxDeclareRecordParam taxDeclareRecordParam) { + ValidUtil.doValidator(taxDeclareRecordParam); + + TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(taxDeclareRecordParam.getTaxDeclareRecordId()); TaxDeclarationApiConfigPO apiConfig = taxDeclareRequest.getTaxDeclarationApiConfig(); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); Map requestParam = taxDeclareRequest.getRequestParam(); // 税款所属期 requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); // 报表类型 - requestParam.put("reportType", "1"); + requestParam.put("reportType", taxDeclareRecordParam.getReportType()); // 页码 requestParam.put("pageNo", "1"); // 每页数量 @@ -1187,7 +1193,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } @Override - public List getTaxReports(Long id) { + public List getOrInitTaxReports(Long id) { // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getById(id); @@ -1208,7 +1214,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe List statuses = new ArrayList<>(); - int personNum = 0; BigDecimal taxPayAmount = new BigDecimal(0); BigDecimal taxPaidAmount = new BigDecimal(0); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java index eb977a7b7..22a5c0015 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.taxpayment.dto.TaxWithheldVoucherResultDTO; import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.entity.taxpayment.response.WithheldVoucherResponse; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryDateUtil; @@ -49,10 +50,20 @@ public class TaxPaymentWithheldVoucherServiceImpl extends AbstractTaxPaymentServ param, tempWrapper.getApiConfigPO(), WithheldVoucherResponse.class); // 校验请求结果 String responseCode = Optional.ofNullable(queryResponse).map(WithheldVoucherResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); - WithheldVoucherResponse.Feedback feedback = Optional.ofNullable(queryResponse).map(WithheldVoucherResponse::getBody).map(WithheldVoucherResponse.Body::getZhsd).orElse(null); + WithheldVoucherResponse.Feedback feedback = Optional.ofNullable(queryResponse).map(WithheldVoucherResponse::getBody).map(body -> { + if (DeclareReportTypeEnum.COMPREHENSIVE_INCOME.getValue().equals(param.getReportType())) { + return body.getZhsd(); + } else if (DeclareReportTypeEnum.CLASSIFIED_INCOME.getValue().equals(param.getReportType())) { + return body.getFlsd(); + } else if (DeclareReportTypeEnum.NONRESIDENT_INCOME.getValue().equals(param.getReportType())) { + return body.getFjmsd(); + } else { + return body.getXsgsd(); + } + }).orElse(null); if (!SzyhApiConstant.SUCCESS_CODE.equals(responseCode) || Objects.isNull(feedback)) { log.info("getWithheldVoucher code error:{}", JSON.toJSONString(queryResponse)); - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 95828, "税局接口异常,请稍后重试")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "税局接口异常,请稍后重试")); } Integer status = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); if (status.equals(1)) { @@ -61,7 +72,7 @@ public class TaxPaymentWithheldVoucherServiceImpl extends AbstractTaxPaymentServ } List vouchers = new ArrayList<>(); for (int i = 1; i <= feedback.getWszmlb().size(); i++) { - vouchers.add(new TaxWithheldVoucherResultDTO.Voucher(SalaryI18nUtil.getI18nLabel( 184013, "完税证明") + i, feedback.getWszmlb().get(i - 1))); + vouchers.add(new TaxWithheldVoucherResultDTO.Voucher(SalaryI18nUtil.getI18nLabel(184013, "完税证明") + i, feedback.getWszmlb().get(i - 1))); } return new TaxWithheldVoucherResultDTO().setVouchers(vouchers); } diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index eab790615..a0c6d5139 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxagent.response.SzyhResponseHead; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.entity.taxpayment.dto.TaxAgreementFeedbackResultDTO; import com.engine.salary.entity.taxpayment.dto.TaxAmountFormDTO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; @@ -16,6 +17,8 @@ import com.engine.salary.entity.taxpayment.po.TaxPaymentRequestPO; import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.entity.taxpayment.response.WithholdingFeedbackResponse; import com.engine.salary.enums.SalaryOnOffEnum; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; +import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -23,8 +26,7 @@ import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; -import java.util.Map; -import java.util.Optional; +import java.util.*; /** * 三方缴款 @@ -52,30 +54,66 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService log.info("getAgreementQueryFeedbackResponse not success: {}", JSON.toJSONString(feedbackResponse)); throw new SalaryRunTimeException(msg); } - WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) - .map(WithholdingFeedbackResponse::getBody) - .map(WithholdingFeedbackResponse.Body::getZhsdjk) - .orElse(null); - if (feedback == null) { - log.info("getAgreementQueryFeedbackResponse empty data error: {}", JSON.toJSONString(feedbackResponse)); - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175338, "税局接口错误,未返回有效数据")); - } + + List statuses = getTaxDeclareRecordService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); + statuses.forEach(status -> { + WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) + .map(WithholdingFeedbackResponse::getBody) + .map(body -> { + if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.COMPREHENSIVE_INCOME.getValue())) { + return body.getZhsdjk(); + } else if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.CLASSIFIED_INCOME.getValue())) { + return body.getFlsdjk(); + } else if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.NONRESIDENT_INCOME.getValue())) { + return body.getFjmsdjk(); + } else { + return body.getXsgsdjk(); + } + + }) + .orElse(null); + if (feedback == null) { + log.info("getAgreementQueryFeedbackResponse empty data error: {}", JSON.toJSONString(feedbackResponse)); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175338, "税局接口错误,未返回有效数据")); + } + // 判断缴款状态是否成功 + Integer paymentStatus = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); + TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); + if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { + throw new SalaryRunTimeException(String.format("缴款失败,失败原因:%s,申报状态:%s", feedback.getJksbyy(), feedback.getSbzt())); + } + // 累计实缴金额 + BigDecimal totalPaid = feedback.getKkfhlb().stream().map(e -> new BigDecimal(e.getSjse())).reduce(BigDecimal.ZERO, BigDecimal::add); + + if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue().equals(status.getTaxDeclareStatus())) { + throw new SalaryRunTimeException("当前申报表状态为已缴款,无法更新状态"); + } + BigDecimal taxPayAmount = SalaryEntityUtil.empty2Zero(status.getTaxPayAmount()); + BigDecimal taxPurePaidAmount = SalaryEntityUtil.empty2Zero(status.getTaxPurePaidAmount()); + if (SalaryEntityUtil.empty2Zero(status.getTaxPaidAmount()).equals(totalPaid) + && taxPayAmount.compareTo(BigDecimal.ZERO) > 0) { + throw new SalaryRunTimeException("请进行缴款后再刷新缴款状态"); + } + status.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue()); + status.setTaxPaidAmount(totalPaid.toString()); + status.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); + status.setTaxPayAmount(BigDecimal.ZERO.toString()); + getTaxDeclareRecordService(user).updateTaxDeclareStatus(status); + }); + TaxAmountFormDTO taxAmountFormDTO = queryTaxAmount(param); - // 判断缴款状态是否成功 - Integer paymentStatus = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); - TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); - if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { - throw new SalaryRunTimeException(String.format("缴款失败,失败原因:%s,申报状态:%s", feedback.getJksbyy(), feedback.getSbzt())); - } - // 累计实缴金额 - BigDecimal totalPaid = feedback.getKkfhlb().stream().map(e -> new BigDecimal(e.getSjse())).reduce(BigDecimal.ZERO, BigDecimal::add); - // 更新个税申报记录状态为已缴款 - TaxDeclareRecordPO taxDeclareRecord = updateTaxDeclareRecord(param, totalPaid); + +// // 更新个税申报记录状态为已缴款 +// TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO(); +// updateTaxDeclareRecord(param, totalPaid); // 更新缴款请求为已反馈 updateTaxPaymentRequest(param); - BigDecimal otherAmount = totalPaid.subtract(SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPurePaidAmount())); + + TaxDeclareRecordPO declareRecordPO = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); + BigDecimal otherAmount = SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPaidAmount()).subtract(SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPurePaidAmount())); + return new TaxAgreementFeedbackResultDTO() - .setPayAmount(SalaryEntityUtil.thousandthConvert(totalPaid.toString())) + .setPayAmount(SalaryEntityUtil.thousandthConvert(SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPaidAmount()).toString())) .setOtherAmount(SalaryEntityUtil.thousandthConvert(otherAmount.toString())) .setPersonNum(taxAmountFormDTO.getPersonNum()); } @@ -94,8 +132,8 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService String url = apiConfig.getHost() + SzyhApiConstant.DECLARE_WITH_HOLDING; Map requestParam = DataCollectionBO.getApiBaseQueryParams(returnPO, taxAgentName, SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); requestParam.put("sfxyh", param.getProtocolNumber()); - requestParam.put("ynse", param.getTaxAmount()); - requestParam.put("sblx", "1"); +// requestParam.put("ynse", param.getTaxAmount()); +// requestParam.put("sblx", "1"); return postRequest(apiConfig, url, requestParam, clazz); } @@ -118,20 +156,20 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService .build()); // if (paymentRequestPO != null) { - String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; - QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); - SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) - .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); - SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) - || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); + String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; + QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); + SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) + .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); + SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) + || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); - getTaxPaymentRequestMapper().updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO - .builder() - .feedback(SalaryOnOffEnum.ON.getValue()) - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxAgentId(taxDeclareRecord.getTaxAgentId()) - .taxYearMonth(taxDeclareRecord.getTaxCycle()) - .build()); + getTaxPaymentRequestMapper().updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO + .builder() + .feedback(SalaryOnOffEnum.ON.getValue()) + .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) + .taxAgentId(taxDeclareRecord.getTaxAgentId()) + .taxYearMonth(taxDeclareRecord.getTaxCycle()) + .build()); // } } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index d1a9ea2c1..f5c92256f 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -391,13 +391,13 @@ public class TaxDeclarationController { * @param taxDeclareRecordParam 撤销更正申报参数 * @return */ - @POST - @Path("/cancelCorrect") - @Produces(MediaType.APPLICATION_JSON) - public String cancelCorrect(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::cancelCorrect, taxDeclareRecordParam.getTaxDeclareRecordId()); - } +// @POST +// @Path("/cancelCorrect") +// @Produces(MediaType.APPLICATION_JSON) +// public String cancelCorrect(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { +// User user = HrmUserVarify.getUser(request, response); +// return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::cancelCorrect, taxDeclareRecordParam.getTaxDeclareRecordId()); +// } /** * 税局端申报状态查询 @@ -424,7 +424,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String queryCompanyIncomes(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordParam taxDeclareRecordParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::queryCompanyIncomes, taxDeclareRecordParam.getTaxDeclareRecordId()); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::queryCompanyIncomes,taxDeclareRecordParam); } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 74cf1999c..7e0af4b9f 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -638,11 +638,10 @@ public class TaxDeclareRecordWrapper extends Service { /** * 税局端申报明细查询 * - * @param id * @return */ - public String queryCompanyIncomes(Long id) { - return getTaxDeclareRecordService(user).queryCompanyIncomes(id); + public String queryCompanyIncomes(TaxDeclareRecordParam taxDeclareRecordParam) { + return getTaxDeclareRecordService(user).queryCompanyIncomes(taxDeclareRecordParam); } /** @@ -877,6 +876,6 @@ public class TaxDeclareRecordWrapper extends Service { } public List getTaxReports(Long id) { - return getTaxDeclareRecordService(user).getTaxReports(id); + return getTaxDeclareRecordService(user).getOrInitTaxReports(id); } } From be85c47a6834746a5ed7a42f4805260cb6e3809c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 7 Apr 2024 15:59:36 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=A1=A8=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9B=B4=E6=96=B0=E4=B8=BB=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/TaxDeclareRecordService.java | 10 +++++++++- .../service/impl/TaxDeclareRecordServiceImpl.java | 11 ++++++----- .../salary/wrapper/TaxDeclareRecordWrapper.java | 12 ++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 911752afe..8d3c1fcba 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -194,8 +194,16 @@ public interface TaxDeclareRecordService { void updateById(TaxDeclareRecordPO taxDeclareRecord); + /** + * 获取申报记录状态列表 + * @param id + * @return + */ List getOrInitTaxReports(Long id); - + /** + * 更新申报状态,同时更新主记录 + * @param declareStatus + */ void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus); } diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index afec5e507..822d12102 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -720,7 +720,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARING.getValue()); declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); declareStatus.setTaxDeclareErrorMsg(""); - getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -851,7 +851,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); } //更新申报状态 - getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + updateTaxDeclareStatus(declareStatus); // 如果申报失败 if (CollectionUtils.isNotEmpty(taxDeclareFails)) { @@ -922,7 +922,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 更新个税申报状态 declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()); declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); - getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -979,7 +979,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe //更新个税申报状态 declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); declareStatus.setRequestId(""); - getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -1084,6 +1084,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe @Override public void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus) { + //更新申报表状态 getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); //更新主记录 @@ -1239,7 +1240,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } statuses.add(declareStatus); - personNum += declareStatus.getPersonNum(); + personNum += declareStatus.getPersonNum() == null ? 0 : declareStatus.getPersonNum(); taxPayAmount = taxPayAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount())); taxPaidAmount = taxPaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPaidAmount())); taxPurePaidAmount = taxPurePaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount())); diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 7e0af4b9f..2ad459aa5 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -31,6 +31,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.ValidUtil; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; import com.weaver.util.threadPool.entity.LocalRunnable; @@ -291,6 +292,8 @@ public class TaxDeclareRecordWrapper extends Service { * @return */ public List getTaxDeclarationTab(TaxDeclareRecordParam param) { + ValidUtil.doValidator(param); + // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); @@ -337,6 +340,8 @@ public class TaxDeclareRecordWrapper extends Service { * @return */ public TaxDeclarationInfoDTO getTaxDeclarationInfoById(TaxDeclareRecordParam param) { + ValidUtil.doValidator(param); + // 查询个税申报表 Long taxDeclareRecordId = param.getTaxDeclareRecordId(); TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(taxDeclareRecordId); @@ -441,6 +446,8 @@ public class TaxDeclareRecordWrapper extends Service { * @param */ public String declare(TaxDeclareRecordParam taxDeclareRecordParam) { + ValidUtil.doValidator(taxDeclareRecordParam); + Long id = taxDeclareRecordParam.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) @@ -470,6 +477,8 @@ public class TaxDeclareRecordWrapper extends Service { * 获取申报反馈 */ public String getDeclareFeedback(TaxDeclareRecordParam param) { + ValidUtil.doValidator(param); + Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) @@ -509,6 +518,7 @@ public class TaxDeclareRecordWrapper extends Service { * 作废 */ public String cancelDeclare(TaxDeclareRecordParam param) { + ValidUtil.doValidator(param); Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) @@ -538,6 +548,7 @@ public class TaxDeclareRecordWrapper extends Service { * 获取作废反馈 */ public String getCancelFeedback(TaxDeclareRecordParam param) { + ValidUtil.doValidator(param); Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) @@ -569,6 +580,7 @@ public class TaxDeclareRecordWrapper extends Service { * @return */ public String updateDeclare(TaxDeclareRecordParam param) { + ValidUtil.doValidator(param); Long id = param.getTaxDeclareRecordId(); checkBefore(id); TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true).setIndex(Util.null2String(id)) From e994a61037894e26c3ce277b300e66bc7aab0433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 8 Apr 2024 14:40:47 +0800 Subject: [PATCH 07/15] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeclareTaxResultFeedbackQueryParam.java | 6 + .../taxdeclaration/po/TaxDeclareRecordPO.java | 1 + .../service/TaxDeclareRecordService.java | 15 -- .../service/TaxDeclareStatusService.java | 37 +++++ .../impl/AbstractTaxPaymentService.java | 3 + .../impl/TaxDeclarationValueServiceImpl.java | 14 +- .../impl/TaxDeclareRecordServiceImpl.java | 111 +++----------- .../impl/TaxDeclareStatusServiceImpl.java | 135 ++++++++++++++++++ .../TaxPaymentWithholdingServiceImpl.java | 2 +- .../wrapper/TaxDeclareRecordWrapper.java | 8 +- 10 files changed, 215 insertions(+), 117 deletions(-) create mode 100644 src/com/engine/salary/service/TaxDeclareStatusService.java create mode 100644 src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java diff --git a/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java b/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java index 7ce6c69c7..dbcdfccc8 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxdeclaration.param; +import com.engine.salary.util.valid.DataCheck; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -12,7 +13,12 @@ import lombok.experimental.Accessors; @NoArgsConstructor @AllArgsConstructor public class DeclareTaxResultFeedbackQueryParam { + + @DataCheck(require = true, message = "个税申报记录id不能为空!") Long id; + @DataCheck(require = true, message = "申报类型不能为空!") + Integer reportType; + 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 78707ce84..d25ee490c 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareRecordPO.java @@ -73,6 +73,7 @@ public class TaxDeclareRecordPO implements Serializable { /** * 申报的requestId,用于下载申报过程 */ + @Deprecated private String declareRequestId; /** * 备注 diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 8d3c1fcba..ad6319472 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -134,8 +134,6 @@ public interface TaxDeclareRecordService { */ void declare(Long id, Integer reportType); - TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType); - List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId); /** @@ -191,19 +189,6 @@ public interface TaxDeclareRecordService { */ String queryDeclareStatus(Long id); - void updateById(TaxDeclareRecordPO taxDeclareRecord); - /** - * 获取申报记录状态列表 - * @param id - * @return - */ - List getOrInitTaxReports(Long id); - - /** - * 更新申报状态,同时更新主记录 - * @param declareStatus - */ - void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus); } diff --git a/src/com/engine/salary/service/TaxDeclareStatusService.java b/src/com/engine/salary/service/TaxDeclareStatusService.java new file mode 100644 index 000000000..b2c970ef9 --- /dev/null +++ b/src/com/engine/salary/service/TaxDeclareStatusService.java @@ -0,0 +1,37 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; + +import java.util.List; + +/** + * 个税申报表状态 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface TaxDeclareStatusService { + + /** + * 获取申报记录状态 + * @param taxDeclareRecordId + * @param reportType + * @return + */ + TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType); + + /** + * 获取申报记录状态列表 + * @param id + * @return + */ + List getOrInitTaxReports(Long id); + + /** + * 更新申报状态,同时更新主记录 + * @param declareStatus + */ + void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus); +} diff --git a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java index cad15ebc3..a0b762c91 100644 --- a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java +++ b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java @@ -52,6 +52,9 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa return ServiceUtil.getService(TaxAgentTaxReturnServiceImpl.class, user); } + protected TaxDeclareStatusService getTaxDeclareStatusService(User user) { + return ServiceUtil.getService(TaxDeclareStatusServiceImpl.class, user); + } protected TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index 69d9ecb89..8c17eb205 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -20,10 +20,7 @@ import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; import com.engine.salary.entity.taxdeclaration.param.ContrastQueryParam; 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.TaxDeclareRecordPO; -import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; +import com.engine.salary.entity.taxdeclaration.po.*; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; @@ -78,6 +75,11 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar return MapperProxyFactory.getProxy(TaxDeclareRecordMapper.class); } + private TaxDeclareStatusService getTaxDeclareStatusService(User user) { + return ServiceUtil.getService(TaxDeclareStatusServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } @@ -355,10 +357,12 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar throw new SalaryRunTimeException("申报记录不存在!"); } + Integer reportType = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType().getValue(); + TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(taxDeclareRecordPO.getId(), reportType); //线上数据 DeclareClient declareClient = new DeclareClient(taxDeclareRecordPO.getTaxAgentId()); - GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(taxDeclareRecordPO.getDeclareRequestId()); + GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(taxDeclareStatus.getDeclareRequestId()); Map>> onlineDataMap = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(taxDeclareRecordPO.getId()); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 822d12102..468e53afa 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -92,6 +92,10 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe return MapperProxyFactory.getProxy(TaxDeclareStatusMapper.class); } + private TaxDeclareStatusService getTaxDeclareStatusService(User user) { + return ServiceUtil.getService(TaxDeclareStatusServiceImpl.class, user); + } + private TaxDeclarationService getTaxDeclarationService(User user) { return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); } @@ -641,7 +645,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe DeclareReportTypeEnum declareReportType = DeclareReportTypeEnum.parseByValue(reportType); - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, reportType); TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); @@ -720,7 +724,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARING.getValue()); declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); declareStatus.setTaxDeclareErrorMsg(""); - updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -736,11 +740,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } - @Override - public TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType) { - return getTaxDeclareStatusMapper().getDeclareStatus(taxDeclareRecordId, reportType); - } - @Override public List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId) { return getTaxDeclareStatusMapper().listSome(TaxDeclareStatusPO.builder().taxDeclareRecordId(taxDeclareRecordId).build()); @@ -751,7 +750,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, reportType); if (StringUtils.isEmpty(declareStatus.getRequestId()) || !Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARING.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156496, "请先点击「在线申报」后再点击「申报反馈」获取申报结果")); @@ -851,7 +850,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); } //更新申报状态 - updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); // 如果申报失败 if (CollectionUtils.isNotEmpty(taxDeclareFails)) { @@ -884,7 +883,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, reportType); // 更正申报成功后不能作废 if (Objects.equals(declareStatus.getTaxDeclareType(), TaxDeclareTypeEnum.UPDATE_DECLARE.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182701, "更正申报后不允许作废")); @@ -922,7 +921,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 更新个税申报状态 declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()); declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); - updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -943,7 +942,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, reportType); if (!Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()) || StringUtils.isEmpty(declareStatus.getRequestId())) { @@ -979,7 +978,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe //更新个税申报状态 declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); declareStatus.setRequestId(""); - updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -1013,12 +1012,12 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe @Override public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { Long id = param.getId(); + TaxDeclareRecordPO taxDeclareRecord = getById(id); String requestId = param.getRequestId(); - TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); - TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, param.getReportType()); DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); - GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? taxDeclareRecord.getDeclareRequestId() : requestId); + GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? declareStatus.getDeclareRequestId() : requestId); Map>> map = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); @@ -1031,7 +1030,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe public void updateDeclare(Long id, Integer reportType) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, reportType); List taxDeclareStatusEnumValueList = Lists.newArrayList(TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue(), TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.getValue(), TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue(), TaxDeclareStatusEnum.DECLARE_SUCCESS_PAYING.getValue()); @@ -1066,7 +1065,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); declareStatus.setTaxDeclareStatus(NOT_DECLARE.getValue()); declareStatus.setRequestId(""); - updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -1082,16 +1081,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } - @Override - public void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus) { - //更新申报表状态 - getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); - - //更新主记录 - getOrInitTaxReports(declareStatus.getTaxDeclareRecordId()); - } - - @Override public void cancelCorrect(Long id) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); @@ -1193,72 +1182,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); } - @Override - public List getOrInitTaxReports(Long id) { - - // 查询个税申报记录 - TaxDeclareRecordPO taxDeclareRecord = getById(id); - if (Objects.isNull(taxDeclareRecord)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156495, "参数异常,个税申报记录不存在或已被删除")); - } - - // 查询个税申报表 - List taxDeclarations = getTaxDeclarationService(user).listByTaxCycleAndTaxAgentIds(SalaryDateUtil.localDate2YearMonth(taxDeclareRecord.getTaxCycle()), Collections.singleton(taxDeclareRecord.getTaxAgentId())); - if (CollectionUtils.isEmpty(taxDeclarations)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156494, "当前无可申报的数据")); - } - - Set reportTypes = new HashSet<>(); - taxDeclarations.forEach(taxDeclarationPO -> { - reportTypes.add(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getReportType().getValue()); - }); - - List statuses = new ArrayList<>(); - - int personNum = 0; - BigDecimal taxPayAmount = new BigDecimal(0); - BigDecimal taxPaidAmount = new BigDecimal(0); - BigDecimal taxPurePaidAmount = new BigDecimal(0); - - for (Integer reportType : reportTypes) { - TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); - if (declareStatus == null) { - declareStatus = TaxDeclareStatusPO.builder() - .id(IdGenerator.generate()) - .taxDeclareRecordId(id) - .reportType(reportType) - .taxDeclareType(taxDeclareRecord.getTaxDeclareType()) - .taxDeclareStatus(taxDeclareRecord.getTaxDeclareStatus()) - .taxDeclareErrorMsg(taxDeclareRecord.getTaxDeclareErrorMsg()) - .personNum(taxDeclareRecord.getPersonNum()) - .taxPayAmount(taxDeclareRecord.getTaxPayAmount()) - .taxPaidAmount(taxDeclareRecord.getTaxPaidAmount()) - .taxPurePaidAmount(taxDeclareRecord.getTaxPaidAmount()) - .deleteType(0) - .build(); - getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); - } - statuses.add(declareStatus); - - personNum += declareStatus.getPersonNum() == null ? 0 : declareStatus.getPersonNum(); - taxPayAmount = taxPayAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount())); - taxPaidAmount = taxPaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPaidAmount())); - taxPurePaidAmount = taxPurePaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount())); - } - - //更新记录的状态,各个报表状态一致则采纳,否则取最小的进度状态 - Integer declareStatusEnum = statuses.stream().map(TaxDeclareStatusPO::getTaxDeclareStatus).min(Comparator.comparing(Integer::valueOf)).orElse(NOT_DECLARE.getValue()); - - taxDeclareRecord.setPersonNum(personNum); - taxDeclareRecord.setTaxPayAmount(taxPayAmount.toString()); - taxDeclareRecord.setTaxPaidAmount(taxPaidAmount.toString()); - taxDeclareRecord.setTaxPurePaidAmount(taxPurePaidAmount.toString()); - taxDeclareRecord.setTaxDeclareStatus(declareStatusEnum); - updateById(taxDeclareRecord); - - return statuses; - } - private TaxDeclareRequest buildTaxDeclareRequest(Long id) { // 查询供应商信息 diff --git a/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java new file mode 100644 index 000000000..f5d10ee62 --- /dev/null +++ b/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java @@ -0,0 +1,135 @@ +package com.engine.salary.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; +import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; +import com.engine.salary.service.TaxDeclarationService; +import com.engine.salary.service.TaxDeclareStatusService; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import weaver.hrm.User; + +import java.math.BigDecimal; +import java.util.*; + +import static com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum.NOT_DECLARE; + +/** + * 个税申报 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class TaxDeclareStatusServiceImpl extends Service implements TaxDeclareStatusService { + + + private TaxDeclareRecordMapper getTaxDeclareRecordMapper() { + return MapperProxyFactory.getProxy(TaxDeclareRecordMapper.class); + } + + private TaxDeclareStatusMapper getTaxDeclareStatusMapper() { + return MapperProxyFactory.getProxy(TaxDeclareStatusMapper.class); + } + + private TaxDeclarationService getTaxDeclarationService(User user) { + return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); + } + + @Override + public TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType) { + return getTaxDeclareStatusMapper().getDeclareStatus(taxDeclareRecordId, reportType); + } + + + @Override + public void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus) { + //更新申报表状态 + getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); + + //更新主记录 + getOrInitTaxReports(declareStatus.getTaxDeclareRecordId()); + } + + + @Override + public List getOrInitTaxReports(Long id) { + + // 查询个税申报记录 + TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordMapper().getById(id); + if (Objects.isNull(taxDeclareRecord)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156495, "参数异常,个税申报记录不存在或已被删除")); + } + + // 查询个税申报表 + List taxDeclarations = getTaxDeclarationService(user).listByTaxCycleAndTaxAgentIds(SalaryDateUtil.localDate2YearMonth(taxDeclareRecord.getTaxCycle()), Collections.singleton(taxDeclareRecord.getTaxAgentId())); + if (CollectionUtils.isEmpty(taxDeclarations)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156494, "当前无可申报的数据")); + } + + Set reportTypes = new HashSet<>(); + taxDeclarations.forEach(taxDeclarationPO -> { + reportTypes.add(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getReportType().getValue()); + }); + + List statuses = new ArrayList<>(); + + int personNum = 0; + BigDecimal taxPayAmount = new BigDecimal(0); + BigDecimal taxPaidAmount = new BigDecimal(0); + BigDecimal taxPurePaidAmount = new BigDecimal(0); + + for (Integer reportType : reportTypes) { + TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); + if (declareStatus == null) { + declareStatus = TaxDeclareStatusPO.builder() + .id(IdGenerator.generate()) + .taxDeclareRecordId(id) + .reportType(reportType) + .taxDeclareType(taxDeclareRecord.getTaxDeclareType()) + .taxDeclareStatus(taxDeclareRecord.getTaxDeclareStatus()) + .taxDeclareErrorMsg(taxDeclareRecord.getTaxDeclareErrorMsg()) + .personNum(taxDeclareRecord.getPersonNum()) + .taxPayAmount(taxDeclareRecord.getTaxPayAmount()) + .taxPaidAmount(taxDeclareRecord.getTaxPaidAmount()) + .taxPurePaidAmount(taxDeclareRecord.getTaxPaidAmount()) + .deleteType(0) + .build(); + getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); + } + statuses.add(declareStatus); + + personNum += declareStatus.getPersonNum() == null ? 0 : declareStatus.getPersonNum(); + taxPayAmount = taxPayAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount())); + taxPaidAmount = taxPaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPaidAmount())); + taxPurePaidAmount = taxPurePaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount())); + } + + //更新记录的状态,各个报表状态一致则采纳,否则取最小的进度状态 + Integer declareStatusEnum = statuses.stream().map(TaxDeclareStatusPO::getTaxDeclareStatus).min(Comparator.comparing(Integer::valueOf)).orElse(NOT_DECLARE.getValue()); + + taxDeclareRecord.setPersonNum(personNum); + taxDeclareRecord.setTaxPayAmount(taxPayAmount.toString()); + taxDeclareRecord.setTaxPaidAmount(taxPaidAmount.toString()); + taxDeclareRecord.setTaxPurePaidAmount(taxPurePaidAmount.toString()); + taxDeclareRecord.setTaxDeclareStatus(declareStatusEnum); + getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord); + + return statuses; + } + + +} diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index a0c6d5139..7c1facf76 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -98,7 +98,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService status.setTaxPaidAmount(totalPaid.toString()); status.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); status.setTaxPayAmount(BigDecimal.ZERO.toString()); - getTaxDeclareRecordService(user).updateTaxDeclareStatus(status); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(status); }); TaxAmountFormDTO taxAmountFormDTO = queryTaxAmount(param); diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 2ad459aa5..10ef95a47 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -64,6 +64,10 @@ public class TaxDeclareRecordWrapper extends Service { return ServiceUtil.getService(TaxDeclareRecordServiceImpl.class, user); } + private TaxDeclareStatusService getTaxDeclareStatusService(User user) { + return ServiceUtil.getService(TaxDeclareStatusServiceImpl.class, user); + } + private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @@ -361,7 +365,7 @@ public class TaxDeclareRecordWrapper extends Service { // 查询个税扣缴义务人 TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclareRecord.getTaxAgentId()); - TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareRecordService(user).getTaxDeclareStatus(taxDeclareRecordId, param.getReportType()); + TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(taxDeclareRecordId, param.getReportType()); TaxDeclareTypeEnum taxDeclareTypeEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareStatus.getTaxDeclareType(), TaxDeclareTypeEnum.class); TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(taxDeclareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.class); @@ -888,6 +892,6 @@ public class TaxDeclareRecordWrapper extends Service { } public List getTaxReports(Long id) { - return getTaxDeclareRecordService(user).getOrInitTaxReports(id); + return getTaxDeclareStatusService(user).getOrInitTaxReports(id); } } From d1b6a782382090785395ccc39057925e7b3bd0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 10 Apr 2024 09:08:24 +0800 Subject: [PATCH 08/15] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=8A=A5=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/employeedeclare/EmployeeDeclareMapper.xml | 2 +- .../salary/service/impl/EmployeeDeclareServiceImpl.java | 4 +++- src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml index 53f28f353..c5d985ffc 100644 --- a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareMapper.xml @@ -452,7 +452,7 @@ #{birthplace}, - #{tax_reasons}, + #{taxReasons}, diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java index a418082d6..3fb74033c 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java @@ -198,6 +198,8 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla employeeDeclare.setCardNum(saveParam.getCardNum().toUpperCase()); employeeDeclare.setGender(saveParam.getGender().getValue()); employeeDeclare.setBirthday(SalaryDateUtil.localDateToDate(saveParam.getBirthday())); + employeeDeclare.setBirthplace(saveParam.getBirthplace()); + employeeDeclare.setTaxReasons(saveParam.getTaxReasons()); employeeDeclare.setEmploymentStatus(saveParam.getEmploymentStatus().getValue()); employeeDeclare.setMobile(saveParam.getMobile()); employeeDeclare.setEmploymentType(saveParam.getEmploymentType().getValue()); @@ -388,7 +390,7 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla } boolean declareSuccess = employeeDeclares.stream().anyMatch(e -> Objects.equals(e.getSuccessfullyDeclared(), 1)); if (declareSuccess) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156467, "报送成功过的人员不允许删除")); +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156467, "报送成功过的人员不允许删除")); } getEmployeeDeclareMapper().deleteByIds(ids, new Date()); // 记录日志 diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 65ad5b8ef..953f01a78 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -298,7 +298,9 @@ public class EmployeeDeclareWrapper extends Service { .setLonelyOld(SalaryEnumUtil.enumMatchByValue(employeeDeclare.getLonelyOld(), SalaryOnOffEnum.class)) .setMartyrDependents(SalaryEnumUtil.enumMatchByValue(employeeDeclare.getMartyrDependents(), SalaryOnOffEnum.class)) .setMartyrDependentsCardNo(employeeDeclare.getMartyrDependentsCardNo()) - .setDeductExpenses(SalaryEnumUtil.enumMatchByValue(employeeDeclare.getDeductExpenses(), SalaryOnOffEnum.class)); + .setDeductExpenses(SalaryEnumUtil.enumMatchByValue(employeeDeclare.getDeductExpenses(), SalaryOnOffEnum.class)) + .setBirthplace(employeeDeclare.getBirthplace()) + .setTaxReasons(employeeDeclare.getTaxReasons()); } else { employeeDeclare = null; } From 917c9f87c12f95a78d85209646fef5f8ec423dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 10 Apr 2024 09:18:05 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TaxPaymentWithholdingServiceImpl.java | 5 +++-- .../impl/TaxPaymentWithholdingVoucherServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 7c1facf76..67b2a0c2a 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -56,7 +56,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService } List statuses = getTaxDeclareRecordService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); - statuses.forEach(status -> { + for (TaxDeclareStatusPO status:statuses) { WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) .map(WithholdingFeedbackResponse::getBody) .map(body -> { @@ -80,6 +80,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService Integer paymentStatus = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { + // fixme throw new SalaryRunTimeException(String.format("缴款失败,失败原因:%s,申报状态:%s", feedback.getJksbyy(), feedback.getSbzt())); } // 累计实缴金额 @@ -99,7 +100,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService status.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); status.setTaxPayAmount(BigDecimal.ZERO.toString()); getTaxDeclareStatusService(user).updateTaxDeclareStatus(status); - }); + } TaxAmountFormDTO taxAmountFormDTO = queryTaxAmount(param); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index 44e895087..9fec5d913 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -100,7 +100,7 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS String url = apiConfig.getHost() + api; Map requestParam = DataCollectionBO.getApiBaseQueryParams(returnPO, taxAgentName, SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); if (syncStatus) { - requestParam.put("bblx", "1"); + requestParam.put("bblx", param.getReportType()); } return postRequest(apiConfig, url, requestParam, clazz); } From 691f4c42cee5bd1461a87be6fc2b774f2a163222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 10 Apr 2024 14:48:58 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=E5=86=85=E7=BD=AE=E7=AE=97=E7=A8=8E?= =?UTF-8?q?=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/salarysob/IncomeCategoryEnum.java | 24 +- .../GetDeclareTaxResultFeedbackResponse.java | 257 +++++++++++++++++- 2 files changed, 260 insertions(+), 21 deletions(-) diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index f0564f27c..fbce1c59b 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -139,36 +139,36 @@ public enum IncomeCategoryEnum implements BaseEnum { NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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); + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); return result; } }, NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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); + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); return result; } }, NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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); + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); return result; } }, NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 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); + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); return result; } }; diff --git a/src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java index 3abdd210b..6691cdb96 100644 --- a/src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/declare/GetDeclareTaxResultFeedbackResponse.java @@ -51,19 +51,16 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { // * 分类所得 必填:是 见分类所得计算结果 // */ // private 对象 flsd; -// /** -// * 非居民所得 必填:是 见非居民所得计算结果 -// */ -// private fjmsd fjmsd; -// /** + /** + * 非居民所得 必填:是 见非居民所得计算结果 + */ + private fjmsd fjmsd; + + // /** // * 限售股所得 必填:是 见限售股所得计算结果 // */ // private 对象 xsgsd; - /** - * 人员申报失败列表 必填:是 参考人员代报结果对象 - */ - private List rysbsblb; @Data public static class zhsd { @@ -660,6 +657,248 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { } + + @Data + public static class fjmsd { + /** + * 正常工资薪金(无住所个人正常工资薪金)所得列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx wjgzxjlb; + /** + * 无住所个人数月奖金列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx wjrysyjjlb; + /** + * 劳务报酬列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx lwbclb; + /** + * 稿酬所得列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx gcsdlb; + /** + * 利息姑息红利所得列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx lxgxhllb; + /** + * 股权转让列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx gqzrlb; + /** + * 其他财产转让列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx qtcczrlb; + /** + * 偶然所得列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx orsdlb; + /** + * 解除劳动合同一次性补偿金列表 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx jcldhtycxbcjlb; + /** + * 保险营销员薪金算税结果对象 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx bxyxy; + /** + * 证券经纪人薪金算税结果对象 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx zqjjr; + /** + * 个人股权激励结果对象 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx grgqjl; + /** + * 特许权使用费所得 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx txqsyfsd; + /** + * 个人房屋出租所得 参考非居民所得算税结果对象 + */ + private fjmsdssjgdx grfwczsd; + + /** + * 非居民所得算税结果对象 + */ + @Data + public static class fjmsdssjgdx { + /** + * 非居民算税成功列表 参考输入报文非居民所得输出结果报文 + */ + private List sscglb; + /** + * 非居民算税失败列表 参考输入报文非居民所得输出结果报文 + */ + private List sssblb; + /** + * 非居民算税失败原因列表 参考算税失败原因对象 + */ + private List sssbyylb; + /** + * 参与非居民算税总人数 + */ + private int sszrs; + /** + * 非居民算税失败总人数 + */ + private int sssbrs; + + /** + * 4.4.1.3.4.2非居民所得输出结果报文 + */ + @Data + public static class fjmsdscbw { + /** + * 姓名 必填:是 + */ + @SalaryTableColumn(text = "姓名", width = "10%", column = "xm") + @ExcelHead(title = "姓名", dataIndex = "xm") + private String xm; + + /** + * 证件类型名称 必填:是 + */ + @SalaryTableColumn(text = "证件类型", width = "10%", column = "zzlx") + @ExcelHead(title = "证件类型", dataIndex = "zzlx") + private String zzlx; + + /** + * 证件号码 必填:是 + */ + @SalaryTableColumn(text = "证件号码", width = "10%", column = "zzhm") + @ExcelHead(title = "证件号码", dataIndex = "zzhm") + private String zzhm; + + /** + * 收入额 必填:是 + */ + @SalaryTableColumn(text = "收入额", width = "10%", column = "sre") + @ExcelHead(title = "收入额", dataIndex = "sre") + private String sre; + + /** + * 累计收入(不含本次) 必填:是 + */ + @SalaryTableColumn(text = "累计收入(不含本次)", width = "10%", column = "ljsre") + @ExcelHead(title = "累计收入(不含本次)", dataIndex = "ljsre") + private String ljsre; + + /** + * 免税收入 必填:是 + */ + @SalaryTableColumn(text = "免税收入", width = "10%", column = "mssd") + @ExcelHead(title = "免税收入", dataIndex = "mssd") + private String mssd; + /** + * 财产原值 必填:是 + */ + private String ccyz; + /** + * 允许扣除的税费 必填:是 + */ + private String yxkcsf; + /** + * 投资抵扣 必填:是 + */ + private String tzdk; + /** + * 其他 必填:是 + */ + private String qt; + /** + * 备注 必填:是 + */ + private String bz; + /** + * 实际工作年限 必填:是 + */ + private String sjgznxs; + /** + * 减除费用 必填:是 + */ + private String jcfy; + /** + * 准予扣除的捐赠额 必填:是 + */ + @SalaryTableColumn(text = "准予扣除的捐赠额", width = "10%", column = "zykcjze") + @ExcelHead(title = "准予扣除的捐赠额", dataIndex = "zykcjze") + private String zykcjze; + /** + * 税前扣除项目合计 必填:是 + */ + private String sqkcxmhj; + /** + * 应纳税额所得额 必填:是 + */ + @SalaryTableColumn(text = "应纳税额所得额", width = "10%", column = "ynssde") + @ExcelHead(title = "应纳税额所得额", dataIndex = "ynssde") + private String ynssde; + /** + * 应纳税额 必填:是 + */ + @SalaryTableColumn(text = "应纳税额", width = "10%", column = "ynse") + @ExcelHead(title = "应纳税额", dataIndex = "ynse") + private String ynse; + /** + * 减免税额 必填:是 + */ + private String jmse; + /** + * 应扣缴税额 必填:是 + */ + @SalaryTableColumn(text = "应扣缴税额", width = "10%", column = "yingkjse") + @ExcelHead(title = "应扣缴税额", dataIndex = "yingkjse") + private String yingkjse; + /** + * 已扣缴税额 必填:是 无需填写该值,按0处理 + */ + @SalaryTableColumn(text = "已扣缴税额", width = "10%", column = "ykjse") + @ExcelHead(title = "已扣缴税额", dataIndex = "ykjse") + private String ykjse; + /** + * 税率 必填:是 + */ + @SalaryTableColumn(text = "税率", width = "10%", column = "sl") + @ExcelHead(title = "税率", dataIndex = "sl") + private String sl; + /** + * 速算扣除数 必填:是 + */ + @SalaryTableColumn(text = "速算扣除数", width = "10%", column = "sskcs") + @ExcelHead(title = "速算扣除数", dataIndex = "sskcs") + private String sskcs; + /** + * 代报方式 必填:是 + */ + private String sbfs; + /** + * 应补退税额 必填:是 + */ + @SalaryTableColumn(text = "应补退税额", width = "10%", column = "ybtse") + @ExcelHead(title = "应补退税额", dataIndex = "ybtse") + private String ybtse; + /** + * 非居民所得项目名字 必填:是非居民所得薪金类别-无住所个人正常工资薪金、全年一次性奖金收入 + */ + private String sdxm; + /** + * 所得期间起 必填:是 YYYY-MM + */ + private String sdqjq; + /** + * 所得期间止 必填:是 YYYY-MM + */ + private String sdqjz; + } + } + } + + + /** + * 人员申报失败列表 必填:是 参考人员代报结果对象 + */ + private List rysbsblb; + /** * 4.4.1.3.1.1人员代报结果对象 */ From a2a18245bd730c192218478faf2b04a02aa74e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 11 Apr 2024 10:59:36 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E5=A4=84=E7=90=86=E7=BC=B4=E6=AC=BE?= =?UTF-8?q?=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TaxDeclareStatusService.java | 6 +++--- .../impl/AbstractTaxPaymentService.java | 4 +--- .../service/impl/SIArchivesServiceImpl.java | 2 -- .../impl/SalaryAcctCalcServiceImpl.java | 1 - .../impl/SalaryArchiveExcelServiceImpl.java | 1 - .../service/impl/SalaryArchiveServiceImpl.java | 1 - .../TaxDeclarationApiFlowWarnServiceImpl.java | 4 +--- .../impl/TaxDeclareRecordServiceImpl.java | 18 ++++++++++++------ .../impl/TaxDeclareStatusServiceImpl.java | 8 +++++--- .../TaxPaymentWithheldVoucherServiceImpl.java | 2 -- .../impl/TaxPaymentWithholdingServiceImpl.java | 9 ++++----- ...axPaymentWithholdingVoucherServiceImpl.java | 4 ---- .../wrapper/TaxDeclareRecordWrapper.java | 2 +- 13 files changed, 27 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/service/TaxDeclareStatusService.java b/src/com/engine/salary/service/TaxDeclareStatusService.java index b2c970ef9..b40b2c738 100644 --- a/src/com/engine/salary/service/TaxDeclareStatusService.java +++ b/src/com/engine/salary/service/TaxDeclareStatusService.java @@ -23,15 +23,15 @@ public interface TaxDeclareStatusService { TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType); /** - * 获取申报记录状态列表 + * 更新主记录,返回申报记录状态列表 * @param id * @return */ - List getOrInitTaxReports(Long id); + List updateRecord(Long id); /** * 更新申报状态,同时更新主记录 * @param declareStatus */ - void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus); + void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus,boolean updateRecord); } diff --git a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java index a0b762c91..25078bcf0 100644 --- a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java +++ b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java @@ -26,13 +26,12 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxpayment.TaxPaymentRequestMapper; import com.engine.salary.service.*; import com.engine.salary.util.*; -import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.transaction.annotation.Transactional; import weaver.hrm.User; import java.math.BigDecimal; @@ -145,7 +144,6 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa return new TempWrapper(apiConfigPO, taxReturnPO, taxAgentPO, taxDeclareRecord); } - @Transactional(rollbackFor = Exception.class) public String getRequestId(TaxPaymentQueryParam param) { TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); QuerySpecialAmountResponse queryResponse = getRequestIdResponse(tempWrapper.taxReturnPO, tempWrapper.taxAgentPO.getName(), diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 811127514..fbdf3f0b6 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -314,7 +314,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * @param currentEmployeeId */ @Override - @Transactional(rollbackFor = Exception.class) public void handleStayDelData(long currentEmployeeId) { log.info("福利档案中待减员数据自动处理逻辑开始:"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); @@ -351,7 +350,6 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * 福利档案中增量数据处理 * @param currentEmployeeId */ - @Transactional(rollbackFor = Exception.class) @Override public void handleChangeData(long currentEmployeeId) { try { diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalcServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalcServiceImpl.java index c48450772..1df986fef 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalcServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalcServiceImpl.java @@ -135,7 +135,6 @@ // } // // @Override -// @Transactional(rollbackFor = Exception.class) // public void calcByEmployeeIds(Long salaryAcctRecordId, Collection salaryAcctEmployeeIds, DataCollectionEmployee simpleEmployee) throws Exception { // SalaryAcctRateDTO salaryAcctRate = new SalaryAcctRateDTO("" + salaryAcctRecordId); // try { diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 8e0986007..c34c1fcc3 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -403,7 +403,6 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // * 导入薪资档案 // */ // @BatchImportHandler("importSalaryArchive") -// @Transactional(rollbackFor = Exception.class) // public void importSalaryArchive() { // BatchDocumentMessage message = BatchImportContext.getBatchDocumentMessage(); // log.info("【薪资档案】接收到上传的数据:{}", String.format("batchTaskId=%s, fileName=%s", message.getBatchTaskId(), message.getBatchFile().getName())); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index c6b3032c6..22b6eb738 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -253,7 +253,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * * @param currentEmployeeId */ - @Transactional(rollbackFor = Exception.class) public void handleSuspendData(Long currentEmployeeId) { List personnelStatuss = new ArrayList() {{ add("4"); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationApiFlowWarnServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationApiFlowWarnServiceImpl.java index 97833c197..276f3ab71 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationApiFlowWarnServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationApiFlowWarnServiceImpl.java @@ -28,13 +28,12 @@ import com.engine.salary.service.TaxDeclarationApiFlowWarnService; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; -import com.engine.salary.util.db.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.transaction.annotation.Transactional; import weaver.common.MessageUtil; import weaver.email.EmailWorkRunnable; import weaver.general.BaseBean; @@ -103,7 +102,6 @@ public class TaxDeclarationApiFlowWarnServiceImpl extends Service implements Tax } @Override - @Transactional(rollbackFor = Exception.class) public void deleteReceiver(Long id) { TaxDeclarationApiFlowWarnReceiverPO receiverPO = getWarnReceiverPOById(id); SalaryAssert.notNull(receiverPO, "该提醒对象不存在,请刷新页面后重试"); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 468e53afa..7ab44eb0c 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -724,7 +724,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARING.getValue()); declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); declareStatus.setTaxDeclareErrorMsg(""); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus,true); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -831,7 +831,9 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setPersonNum(Integer.parseInt(Optional.ofNullable(declareTaxFeedbackResponse.getBody().get("nsrc")).orElse("0").toString())); declareStatus.setDeclareRequestId(declareStatus.getRequestId()); declareStatus.setRequestId(""); + //实缴(不含滞纳金) BigDecimal purePaidAmount = SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount()); + //应缴 BigDecimal payAmount = SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount()); if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.equals(taxDeclareStatusEnum) || TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.equals(taxDeclareStatusEnum)) { // 如果是已缴纳状态,则更新已缴纳金额,判断是否需要线下退税 @@ -850,7 +852,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxPayAmount(payAmount.subtract(purePaidAmount).toString()); } //更新申报状态 - getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus,true); // 如果申报失败 if (CollectionUtils.isNotEmpty(taxDeclareFails)) { @@ -921,7 +923,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 更新个税申报状态 declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()); declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus,true); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -978,7 +980,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe //更新个税申报状态 declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); declareStatus.setRequestId(""); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus,true); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); @@ -1021,7 +1023,11 @@ 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) + .filter(incomeCategoryEnum -> incomeCategoryEnum.getReportType().getValue().equals(param.getReportType())) + .collect(Collectors.toList()).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); return ExcelUtil.genWorkbookV2(map); } @@ -1065,7 +1071,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); declareStatus.setTaxDeclareStatus(NOT_DECLARE.getValue()); declareStatus.setRequestId(""); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus,true); // 记录日志 TaxAgentPO taxAgent = taxDeclareRequest.getTaxAgent(); diff --git a/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java index f5d10ee62..d2db18c73 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java @@ -56,17 +56,19 @@ public class TaxDeclareStatusServiceImpl extends Service implements TaxDeclareSt @Override - public void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus) { + public void updateTaxDeclareStatus(TaxDeclareStatusPO declareStatus, boolean updateRecord) { //更新申报表状态 getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); //更新主记录 - getOrInitTaxReports(declareStatus.getTaxDeclareRecordId()); + if (updateRecord) { + updateRecord(declareStatus.getTaxDeclareRecordId()); + } } @Override - public List getOrInitTaxReports(Long id) { + public List updateRecord(Long id) { // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordMapper().getById(id); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java index 22a5c0015..235bdeefd 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java @@ -17,7 +17,6 @@ import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -42,7 +41,6 @@ public class TaxPaymentWithheldVoucherServiceImpl extends AbstractTaxPaymentServ return postRequest(apiConfig, url, requestParam, clazz); } - @Transactional(rollbackFor = Exception.class) @Override public TaxWithheldVoucherResultDTO getWithheldVoucher(TaxPaymentQueryParam param) { TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 67b2a0c2a..930a0f201 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -56,7 +56,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService } List statuses = getTaxDeclareRecordService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); - for (TaxDeclareStatusPO status:statuses) { + for (TaxDeclareStatusPO status : statuses) { WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) .map(WithholdingFeedbackResponse::getBody) .map(body -> { @@ -99,14 +99,13 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService status.setTaxPaidAmount(totalPaid.toString()); status.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); status.setTaxPayAmount(BigDecimal.ZERO.toString()); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(status); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(status, false); } TaxAmountFormDTO taxAmountFormDTO = queryTaxAmount(param); -// // 更新个税申报记录状态为已缴款 -// TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO(); -// updateTaxDeclareRecord(param, totalPaid); + //更新主记录 + getTaxDeclareStatusService(user).updateRecord(param.getTaxDeclareRecordId()); // 更新缴款请求为已反馈 updateTaxPaymentRequest(param); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index 9fec5d913..de73ad3bb 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -23,7 +23,6 @@ import com.engine.salary.enums.taxdeclaration.TaxPaymentStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; -import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; @@ -44,7 +43,6 @@ import java.util.stream.Collectors; public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentService { @Override - @Transactional(rollbackFor = Exception.class) public TaxFeedbackResultDTO getFeedback(TaxPaymentQueryParam param) { WithholdingVoucherFeedbackResponse feedbackResponse = (WithholdingVoucherFeedbackResponse) checkBeforeGetFeedbackResponse(param); // 校验请求结果 @@ -130,7 +128,6 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS } @Override - @Transactional(rollbackFor = Exception.class) public void syncWithholdingFeedback(TaxPaymentQueryParam param) { TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); SyncWithholdingFeedbackResponse response = getRequestIdResponse(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), @@ -166,7 +163,6 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS } @Override - @Transactional(rollbackFor = Exception.class) public void cancelWithholdingVoucher(TaxPaymentQueryParam param) { TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 10ef95a47..b6eaa2e0b 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -892,6 +892,6 @@ public class TaxDeclareRecordWrapper extends Service { } public List getTaxReports(Long id) { - return getTaxDeclareStatusService(user).getOrInitTaxReports(id); + return getTaxDeclareStatusService(user).updateRecord(id); } } From 4aa66ea587d4acd7303fd7ef36540c285a60767b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 11 Apr 2024 18:57:56 +0800 Subject: [PATCH 12/15] =?UTF-8?q?=E5=A4=96=E7=B1=8D=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../employeedeclare/bo/EmployeeDeclareBO.java | 22 +-- .../bo/EmployeeDeclareRequest.java | 2 +- .../dto/EmployeeDeclareExcelDTO.java | 53 +++++- .../employeedeclare/po/EmployeeDeclarePO.java | 4 + .../bo/TaxDeclarationRequest.java | 2 +- .../bo/TaxDeclarationValueList.java | 2 +- .../bo/TaxDeclareEmployeeBO.java | 2 +- .../enums/employeedeclare/CardTypeEnum.java | 16 +- .../enums/employeedeclare/GenderEnum.java | 10 ++ .../impl/EmployeeDeclareExcelServiceImpl.java | 160 +++++++++++++----- .../TaxPaymentWithholdingServiceImpl.java | 2 +- .../wrapper/EmployeeDeclareWrapper.java | 2 +- 12 files changed, 207 insertions(+), 70 deletions(-) diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java index 48898d83d..1e3b7243c 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareBO.java @@ -2,11 +2,8 @@ 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.exception.SalaryRunTimeException; -import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; -import org.apache.commons.lang3.StringUtils; /** * @author Harryxzy @@ -23,22 +20,27 @@ public class EmployeeDeclareBO { EmployeeDeclarePO po = EmployeeDeclarePO.builder() .jobNum(dto.getJobNum()) .employeeName(dto.getEmployeeName()) - .cardType(dto.getCardType() == null ? null :CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue()) + .cardType(dto.getCardType()) .cardNum(dto.getCardNum()) - .employmentStatus(StringUtils.isBlank(dto.getEmploymentStatus()) ? null : new Integer(dto.getEmploymentStatus())) - .employmentType(StringUtils.isBlank(dto.getEmploymentType()) ? null : new Integer(dto.getEmploymentType())) + .nationality(dto.getNationality()) + .employmentStatus(dto.getEmploymentStatus()) + .employmentType(dto.getEmploymentType()) .employmentFirstYear(dto.getEmploymentFirstYear()) .mobile(dto.getMobile()) - .employmentDate(StringUtils.isBlank(dto.getEmploymentDate()) ? null : SalaryDateUtil.stringToDate(dto.getEmploymentDate()) ) - .dismissDate(StringUtils.isBlank(dto.getDismissDate()) ? null : SalaryDateUtil.stringToDate(dto.getDismissDate())) + .employmentDate(dto.getEmploymentDate()) + .dismissDate(dto.getDismissDate()) .disability(dto.getDisability()) .disabilityCardNo(dto.getDisabilityCardNo()) .martyrDependents(dto.getMartyrDependents()) .martyrDependentsCardNo(dto.getMartyrDependentsCardNo()) .lonelyOld(dto.getLonelyOld()) .deductExpenses(dto.getDeductExpenses()) - .gender(StringUtils.isBlank(dto.getGender()) ? null : new Integer(dto.getGender())) - .birthday(StringUtils.isBlank(dto.getBirthday()) ? null : SalaryDateUtil.stringToDate(dto.getBirthday())) + .entryDate(dto.getEntryDate()) + .departureDate(dto.getDepartureDate()) + .gender(dto.getGender()) + .birthplace(dto.getBirthplace()) + .birthday(dto.getBirthday()) + .taxReasons(dto.getTaxReasons()) .build(); return po; } diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java index b7a08373e..5527df49e 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRequest.java @@ -42,7 +42,7 @@ public class EmployeeDeclareRequest { // *姓名 employeeInfoMap.put("xm", employeeDeclare.getEmployeeName()); // *证件类型 - CardTypeEnum cardTypeEnum = CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()); + CardTypeEnum cardTypeEnum = CardTypeEnum.getByValue(employeeDeclare.getCardType()); employeeInfoMap.put("zzlx", cardTypeEnum.getDefaultLabel()); // *证件号码 employeeInfoMap.put("zzhm", employeeDeclare.getCardNum()); diff --git a/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareExcelDTO.java b/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareExcelDTO.java index 8880ce557..0da6dea75 100644 --- a/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareExcelDTO.java +++ b/src/com/engine/salary/entity/employeedeclare/dto/EmployeeDeclareExcelDTO.java @@ -11,6 +11,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.Date; import java.util.Set; /** @@ -67,27 +68,39 @@ public class EmployeeDeclareExcelDTO { // 证件类型 @SalaryTableColumn(text = "证件类型", width = "10%", column = "cardType") @TableTitle(title = "证件类型", dataIndex = "cardType", key = "cardType") - private String cardType; + private Integer cardType; // 证件号码 @SalaryTableColumn(text = "证件号码", width = "10%", column = "cardNum") @TableTitle(title = "证件号码", dataIndex = "cardNum", key = "cardNum") private String cardNum; + // 性别 + @SalaryTableColumn(text = "国籍", width = "10%", column = "nationality") + @TableTitle(title = "国籍", dataIndex = "nationality", key = "nationality") + private String nationality; + // 性别 @SalaryTableColumn(text = "性别", width = "10%", column = "gender") @TableTitle(title = "性别", dataIndex = "gender", key = "gender") - private String gender; + private Integer gender; + + /** + * 出生地 + */ + @SalaryTableColumn(text = "出生地", width = "10%", column = "birthplace") + @TableTitle(title = "出生地", dataIndex = "birthplace", key = "birthplace") + private String birthplace; // 出生日期 @SalaryTableColumn(text = "出生日期", width = "10%", column = "birthday") @TableTitle(title = "出生日期", dataIndex = "birthday", key = "birthday") - private String birthday; + private Date birthday; // 人员状态 @SalaryTableColumn(text = "人员状态", width = "10%", column = "employmentStatus") @TableTitle(title = "人员状态", dataIndex = "employmentStatus", key = "employmentStatus") - private String employmentStatus; + private Integer employmentStatus; // 手机号码 @SalaryTableColumn(text = "手机号码", width = "10%", column = "mobile") @@ -97,12 +110,12 @@ public class EmployeeDeclareExcelDTO { // 任职受雇从业类型 @SalaryTableColumn(text = "任职受雇从业类型", width = "10%", column = "employmentType") @TableTitle(title = "任职受雇从业类型", dataIndex = "employmentType", key = "employmentType") - private String employmentType; + private Integer employmentType; // 任职受雇从业日期 @SalaryTableColumn(text = "任职受雇从业日期", width = "10%", column = "employmentDate") @TableTitle(title = "任职受雇从业日期", dataIndex = "employmentDate", key = "employmentDate") - private String employmentDate; + private Date employmentDate; // 入职年度就业情形 private String employmentFirstYear; @@ -111,7 +124,33 @@ public class EmployeeDeclareExcelDTO { // 离职日期 @SalaryTableColumn(text = "离职日期", width = "10%", column = "dismissDate") @TableTitle(title = "离职日期", dataIndex = "dismissDate", key = "dismissDate") - private String dismissDate; + private Date dismissDate; + + /** + * 首次入境时间 + */ + @SalaryTableColumn(text = "首次入境时间", width = "10%", column = "entryDate") + @TableTitle(title = "首次入境时间", dataIndex = "entryDate", key = "entryDate") + private Date entryDate; + + /** + * 预计离境时间 + */ + @SalaryTableColumn(text = "预计离境时间", width = "10%", column = "departureDate") + @TableTitle(title = "预计离境时间", dataIndex = "departureDate", key = "departureDate") + private Date departureDate; + + /** + * 涉税事由, + * 任职受雇 + * 提供临时劳务 + * 转让财产 + * 从事投资和经营活动 + * 其他 + */ + @SalaryTableColumn(text = "涉税事由", width = "10%", column = "taxReasons") + @TableTitle(title = "涉税事由", dataIndex = "taxReasons", key = "taxReasons") + private String taxReasons; // 是否残疾 private Integer disability; diff --git a/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java index 6e954de8f..b282f68a8 100644 --- a/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java +++ b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclarePO.java @@ -2,6 +2,8 @@ package com.engine.salary.entity.employeedeclare.po; import com.engine.hrmelog.annotation.ElogTransform; +import com.engine.salary.enums.employeedeclare.CardTypeEnum; +import com.engine.salary.enums.employeedeclare.GenderEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -78,6 +80,7 @@ public class EmployeeDeclarePO { /** * 证件类型 + * @see CardTypeEnum */ @ElogTransform(name = "证件类型") private Integer cardType; @@ -102,6 +105,7 @@ public class EmployeeDeclarePO { /** * 性别 + * @see GenderEnum */ @ElogTransform(name = "性别") private Integer gender; diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java index 8e1cf9c1a..b64ac8b12 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java @@ -146,7 +146,7 @@ public class TaxDeclarationRequest { // 姓名 requestParam.put("xm", employeeDeclare.getEmployeeName()); // 证件类型 - requestParam.put("zzlx", CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()).getDefaultLabel()); + requestParam.put("zzlx", CardTypeEnum.getByValue(employeeDeclare.getCardType()).getDefaultLabel()); // 证件号码 requestParam.put("zzhm", employeeDeclare.getCardNum()); // 所得项目 diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java index 8208035b4..f5e8acf8c 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationValueList.java @@ -92,7 +92,7 @@ public class TaxDeclarationValueList { if (employeeDeclare != null) { dataMap.put(cnKey ? "工号" : "jobNum", employeeDeclare.getJobNum()); dataMap.put(cnKey ? "姓名" : "username", employeeDeclare.getEmployeeName()); - dataMap.put(cnKey ? "证件类型" : "cardType",CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()).getDefaultLabel() ); + dataMap.put(cnKey ? "证件类型" : "cardType",CardTypeEnum.getByValue(employeeDeclare.getCardType()).getDefaultLabel() ); dataMap.put(cnKey ? "证件号码" : "cardNum", employeeDeclare.getCardNum()); } else if (taxDeclarationValue.getEmployeeType() == null || Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue())) { DataCollectionEmployee simpleEmployee = simpleEmployeeMap.get(taxDeclarationValue.getEmployeeId()); diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java index 46bd2cf8b..1765ddc65 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclareEmployeeBO.java @@ -56,7 +56,7 @@ public class TaxDeclareEmployeeBO { abnormalEmployeeListDTO .setEmployeeName(employeeDeclare.getEmployeeName()) .setJobNum(employeeDeclare.getJobNum()) - .setCardType(CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType()).getDefaultLabel()) + .setCardType(CardTypeEnum.getByValue(employeeDeclare.getCardType()).getDefaultLabel()) .setCardNum(employeeDeclare.getCardNum()) .setDeclareStatus(declareStatusEnum) .setDeclareStatusDesc(declareStatusEnum == null ? "" : SalaryI18nUtil.getI18nLabel(declareStatusEnum.getLabelId(), declareStatusEnum.getDefaultLabel())); diff --git a/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java b/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java index 0378a49ba..4b0af0325 100644 --- a/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java +++ b/src/com/engine/salary/enums/employeedeclare/CardTypeEnum.java @@ -2,6 +2,7 @@ package com.engine.salary.enums.employeedeclare; import com.engine.salary.enums.BaseEnum; +import java.util.Arrays; import java.util.Objects; /** @@ -44,7 +45,7 @@ public enum CardTypeEnum implements BaseEnum { return labelId; } - public static CardTypeEnum getDefaultLabelByValue(Integer value) { + public static CardTypeEnum getByValue(Integer value) { for (CardTypeEnum e : CardTypeEnum.values()) { if (Objects.equals(e.getValue(), value)) { return e; @@ -52,4 +53,17 @@ public enum CardTypeEnum implements BaseEnum { } return RESIDENT_IDENTITY_CARDS; } + + public static CardTypeEnum getByDefaultLabel(String defaultLabel) { + if (defaultLabel == null) { + return null; + } + CardTypeEnum[] enumAry = CardTypeEnum.values(); + for(int i = 0; i < Arrays.asList(enumAry).size(); i++){ + if (enumAry[i].getDefaultLabel().equals(defaultLabel)) { + return enumAry[i]; + } + } + return null; + } } diff --git a/src/com/engine/salary/enums/employeedeclare/GenderEnum.java b/src/com/engine/salary/enums/employeedeclare/GenderEnum.java index a4849d129..f6590e131 100644 --- a/src/com/engine/salary/enums/employeedeclare/GenderEnum.java +++ b/src/com/engine/salary/enums/employeedeclare/GenderEnum.java @@ -3,6 +3,7 @@ package com.engine.salary.enums.employeedeclare; import com.engine.salary.enums.BaseEnum; import java.util.Arrays; +import java.util.Objects; /** * 性别 @@ -56,4 +57,13 @@ public enum GenderEnum implements BaseEnum { } return null; } + + public static GenderEnum getDefaultLabelByValue(Integer value) { + for (GenderEnum e : GenderEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return MALE; + } } diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java index de5a7a82a..98589a15f 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java @@ -16,10 +16,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; -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.employeedeclare.EmploymentTypeEnum; +import com.engine.salary.enums.employeedeclare.*; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -101,14 +98,20 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee List row = Lists.newArrayList(); row.add(employeeDeclare.getJobNum()); row.add(employeeDeclare.getEmployeeName()); - row.add(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel()); + row.add(CardTypeEnum.getByValue(employeeDeclare.getCardType()).getDefaultLabel()); row.add(employeeDeclare.getCardNum()); + row.add(employeeDeclare.getNationality()); + row.add(GenderEnum.getDefaultLabelByValue(employeeDeclare.getGender()).getDefaultLabel()); + row.add(employeeDeclare.getBirthplace()); + row.add(employeeDeclare.getBirthday()); row.add(employmentStatusEnum == null ? "" : employmentStatusEnum.getDefaultLabel()); - row.add(employmentTypeEnum == null ? EmploymentTypeEnum.EMPLOYEE.getDefaultLabel() : employmentTypeEnum.getDefaultLabel()); - row.add(employeeDeclare.getEmploymentFirstYear()); row.add(employeeDeclare.getMobile()); + row.add(employmentTypeEnum == null ? EmploymentTypeEnum.EMPLOYEE.getDefaultLabel() : employmentTypeEnum.getDefaultLabel()); row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getEmploymentDate())); row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getDismissDate())); + row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getEntryDate())); + row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getDepartureDate())); + row.add(employeeDeclare.getTaxReasons()); row.add(Objects.equals(employeeDeclare.getDisability(), 1) ? yesI18 : noI18); row.add(employeeDeclare.getDisabilityCardNo()); row.add(Objects.equals(employeeDeclare.getMartyrDependents(), 1) ? yesI18 : noI18); @@ -211,7 +214,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); // 表头 List headers = ExcelSupport.getSheetHeader(sheet, 0); - + // 检查表头 String isCorrectHeader = checkHeader(headers, headerList); if (isCorrectHeader != null) { @@ -235,7 +238,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee EmployeeDeclareExcelDTO employeeDeclareExcel = new EmployeeDeclareExcelDTO(); for (String dataKey : headerList) { String dataValue = Util.null2String(map.get(dataKey)); - if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel( 0, "工号"))) { + if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "工号"))) { if (StringUtils.equals(checkType, "jobNum") && StringUtils.isEmpty(dataValue)) { isError = true; Map errorMessageMap = Maps.newHashMap(); @@ -253,30 +256,66 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee employeeDeclareExcel.setEmployeeName(dataValue); } } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "证件类型"))) { - employeeDeclareExcel.setCardType(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue().toString()); + if (StringUtils.isEmpty(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件类型不能为空")); + errorData.add(errorMessageMap); + } else { + CardTypeEnum cardTypeEnum = CardTypeEnum.getByDefaultLabel(dataValue); + if (cardTypeEnum == null) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件类型填写错误,只能填写居民身份证、外国护照")); + errorData.add(errorMessageMap); + } else { + employeeDeclareExcel.setCardType(cardTypeEnum.getValue()); + } + } } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "证件号码"))) { if (StringUtils.isEmpty(dataValue)) { isError = true; Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件号码不能为空")); errorData.add(errorMessageMap); - } else if (!SalaryCardUtil.checkIdNum(dataValue)) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件号码格式不正确")); - errorData.add(errorMessageMap); } else { // 身份证号全部转为大写 employeeDeclareExcel.setCardNum(dataValue.toUpperCase()); - employeeDeclareExcel.setGender(SalaryCardUtil.judgeGender(dataValue).getValue().toString()); - employeeDeclareExcel.setBirthday(SalaryCardUtil.judgeBirthday(dataValue).toString()); +// employeeDeclareExcel.setGender(SalaryCardUtil.judgeGender(dataValue).getValue().toString()); +// employeeDeclareExcel.setBirthday(SalaryCardUtil.judgeBirthday(dataValue).toString()); } - } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "人员状态"))) { + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "国籍"))) { + employeeDeclareExcel.setNationality(dataValue); + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "性别"))) { + Integer gender = GenderEnum.getValueByDefaultLabel(dataValue); + if (gender == null) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "性别填写有误!")); + errorData.add(errorMessageMap); + } else { + employeeDeclareExcel.setGender(gender); + } + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "出生地"))) { + employeeDeclareExcel.setBirthplace(dataValue); + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "出生日期"))) { + if (StringUtils.isNotBlank(dataValue) && dataValue.length() >= 10) { + dataValue = dataValue.substring(0, 10); + } + if (!SalaryDateUtil.checkDay(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确")); + errorData.add(errorMessageMap); + } else { + employeeDeclareExcel.setBirthday(SalaryDateUtil.dateStrToLocalDate(dataValue)); + } + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "状态"))) { boolean legalDataValue = false; for (EmploymentStatusEnum employmentStatusEnum : EmploymentStatusEnum.values()) { if (StringUtils.equals(dataValue, employmentStatusEnum.getDefaultLabel())) { legalDataValue = true; - employeeDeclareExcel.setEmploymentStatus(employmentStatusEnum.getValue().toString()); + employeeDeclareExcel.setEmploymentStatus(employmentStatusEnum.getValue()); break; } } @@ -286,23 +325,6 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "人员状态只能填写正常或非正常")); errorData.add(errorMessageMap); } - } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型"))) { - boolean legalDataValue = false; - for (EmploymentTypeEnum employmentTypeEnum : EmploymentTypeEnum.values()) { - if (StringUtils.equals(dataValue, employmentTypeEnum.getDefaultLabel())) { - legalDataValue = true; - employeeDeclareExcel.setEmploymentType(employmentTypeEnum.getValue().toString()); - break; - } - } - if (!legalDataValue) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型填写错误")); - errorData.add(errorMessageMap); - } - } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "入职年度就业情形"))) { - employeeDeclareExcel.setEmploymentFirstYear(dataValue); } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "手机号码"))) { if (StringUtils.isEmpty(dataValue)) { isError = true; @@ -317,6 +339,21 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee } else { employeeDeclareExcel.setMobile(dataValue); } + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型"))) { + boolean legalDataValue = false; + for (EmploymentTypeEnum employmentTypeEnum : EmploymentTypeEnum.values()) { + if (StringUtils.equals(dataValue, employmentTypeEnum.getDefaultLabel())) { + legalDataValue = true; + employeeDeclareExcel.setEmploymentType(employmentTypeEnum.getValue()); + break; + } + } + if (!legalDataValue) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型填写错误")); + errorData.add(errorMessageMap); + } } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "任职受雇从业日期"))) { if (StringUtils.isEmpty(dataValue)) { if (!Objects.equals(employeeDeclareExcel.getEmploymentType(), EmploymentTypeEnum.OTHER.getValue().toString())) { @@ -327,7 +364,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee } } else { if (StringUtils.isNotBlank(dataValue) && dataValue.length() >= 10) { - dataValue = dataValue.substring(0,10); + dataValue = dataValue.substring(0, 10); } if (!SalaryDateUtil.checkDay(dataValue)) { isError = true; @@ -335,7 +372,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确")); errorData.add(errorMessageMap); } else { - employeeDeclareExcel.setEmploymentDate(SalaryDateUtil.getFormatDate(SalaryDateUtil.dateStrToLocalDate(dataValue))); + employeeDeclareExcel.setEmploymentDate(SalaryDateUtil.dateStrToLocalDate(dataValue)); } } } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "离职日期"))) { @@ -348,7 +385,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee } } else { if (StringUtils.isNotBlank(dataValue) && dataValue.length() >= 10) { - dataValue = dataValue.substring(0,10); + dataValue = dataValue.substring(0, 10); } if (!SalaryDateUtil.checkDay(dataValue)) { isError = true; @@ -356,9 +393,35 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确")); errorData.add(errorMessageMap); } else { - employeeDeclareExcel.setDismissDate(SalaryDateUtil.getFormatDate(SalaryDateUtil.dateStrToLocalDate(dataValue))); + employeeDeclareExcel.setDismissDate(SalaryDateUtil.dateStrToLocalDate(dataValue)); } } + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "首次入境时间"))) { + if (StringUtils.isNotBlank(dataValue) && dataValue.length() >= 10) { + dataValue = dataValue.substring(0, 10); + } + if (!SalaryDateUtil.checkDay(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确")); + errorData.add(errorMessageMap); + } else { + employeeDeclareExcel.setEntryDate(SalaryDateUtil.dateStrToLocalDate(dataValue)); + } + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "预计离境时间"))) { + if (StringUtils.isNotBlank(dataValue) && dataValue.length() >= 10) { + dataValue = dataValue.substring(0, 10); + } + if (!SalaryDateUtil.checkDay(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确")); + errorData.add(errorMessageMap); + } else { + employeeDeclareExcel.setDepartureDate(SalaryDateUtil.dateStrToLocalDate(dataValue)); + } + } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "涉税事由"))) { + employeeDeclareExcel.setTaxReasons(dataValue); } else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "是否残疾"))) { if (StringUtils.equals(dataValue, SalaryOnOffEnum.ON.getDefaultLabel())) { employeeDeclareExcel.setDisability(SalaryOnOffEnum.ON.getValue()); @@ -528,12 +591,12 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee } - public static String[] getNullPropertyNames (Object source) { + public static String[] getNullPropertyNames(Object source) { final BeanWrapper src = new BeanWrapperImpl(source); PropertyDescriptor[] pds = src.getPropertyDescriptors(); Set emptyNames = new HashSet<>(); - for(PropertyDescriptor pd : pds) { + for (PropertyDescriptor pd : pds) { Object srcValue = src.getPropertyValue(pd.getName()); // 此处判断可根据需求修改 if (srcValue == null) { @@ -545,7 +608,6 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee } - private EmployeeDeclarePO buildEmployeeDeclare(DataCollectionEmployee extEmployee, DataCollectionEmployee simpleEmployee, EmployeeDeclareExcelDTO employeeDeclareExcel, Long taxAgentId, Date taxCycle, Date now) { @@ -1086,12 +1148,18 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee headers.add(SalaryI18nUtil.getI18nLabel(111111, "姓名")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "证件类型")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "证件号码")); - headers.add(SalaryI18nUtil.getI18nLabel(111111, "人员状态")); - headers.add(SalaryI18nUtil.getI18nLabel(111111, "任职受雇从业类型")); - headers.add(SalaryI18nUtil.getI18nLabel(111111, "入职年度就业情形")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "国籍")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "性别")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "出生地")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "出生日期")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "状态")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "手机号码")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "任职受雇从业类型")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "任职受雇从业日期")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "离职日期")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "首次入境时间")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "预计离境时间")); + headers.add(SalaryI18nUtil.getI18nLabel(111111, "涉税事由")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "是否残疾")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "残疾证号")); headers.add(SalaryI18nUtil.getI18nLabel(111111, "是否烈属")); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 930a0f201..0f8e4622f 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -141,7 +141,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService protected TempWrapper checkBeforeGetRequestIdResponse(TaxPaymentQueryParam param) { TempWrapper tempWrapper = super.checkBeforeGetRequestIdResponse(param); Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); - requestParam.put("sblx", 1); + requestParam.put("sblx", param.getReportType()); cancelWithholdingVoucher(tempWrapper.getApiConfigPO(), tempWrapper.getTaxDeclareRecord(), requestParam); return tempWrapper; } diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 953f01a78..f4ab000ff 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -284,7 +284,7 @@ public class EmployeeDeclareWrapper extends Service { .setNationality(employeeDeclare.getNationality()) .setEntryDate(employeeDeclare.getEntryDate()) .setDepartureDate(employeeDeclare.getDepartureDate()) - .setCardType(CardTypeEnum.getDefaultLabelByValue(employeeDeclare.getCardType())) + .setCardType(CardTypeEnum.getByValue(employeeDeclare.getCardType())) .setCardNum(employeeDeclare.getCardNum()) .setGender(SalaryEnumUtil.enumMatchByValue(employeeDeclare.getGender(), GenderEnum.class)) .setBirthday(employeeDeclare.getBirthday()) From 0e6449e1e2933e2a63ddeafcf50d2b5b92a420e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 12 Apr 2024 17:46:53 +0800 Subject: [PATCH 13/15] =?UTF-8?q?=E5=A4=96=E7=B1=8D=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202404120303.sql | 18 +++++++++ resource/sqlupgrade/GS/sql202404120303.sql | 18 +++++++++ resource/sqlupgrade/JC/sql202404120303.sql | 18 +++++++++ resource/sqlupgrade/Mysql/sql202404120303.sql | 17 +++++++++ .../sqlupgrade/Oracle/sql202404120303.sql | 17 +++++++++ resource/sqlupgrade/PG/sql202404120303.sql | 17 +++++++++ .../sqlupgrade/SQLServer/sql202404120303.sql | 18 +++++++++ resource/sqlupgrade/ST/sql202404120303.sql | 18 +++++++++ .../service/TaxDeclareRecordService.java | 3 -- .../service/TaxDeclareStatusService.java | 3 ++ .../impl/TaxDeclareRecordServiceImpl.java | 5 +-- .../impl/TaxDeclareStatusServiceImpl.java | 5 +++ .../TaxPaymentWithholdingServiceImpl.java | 37 ++++++++++--------- ...xPaymentWithholdingVoucherServiceImpl.java | 8 +++- 14 files changed, 177 insertions(+), 25 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202404120303.sql create mode 100644 resource/sqlupgrade/GS/sql202404120303.sql create mode 100644 resource/sqlupgrade/JC/sql202404120303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202404120303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202404120303.sql create mode 100644 resource/sqlupgrade/PG/sql202404120303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202404120303.sql create mode 100644 resource/sqlupgrade/ST/sql202404120303.sql diff --git a/resource/sqlupgrade/DM/sql202404120303.sql b/resource/sqlupgrade/DM/sql202404120303.sql new file mode 100644 index 000000000..3ce4e54d0 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202404120303.sql @@ -0,0 +1,18 @@ +CREATE TABLE hrsa_tax_declare_status ( +id NUMBER(38,0) primary key NOT NULL, +tax_declare_record_id NUMBER(38,0) NULL , +report_type number NULL , +request_id varchar2(100) , +tax_declare_type number NULL , +tax_declare_status number NULL , +display_update_icon number NULL , +tax_declare_error_msg varchar2(1000) , +person_num number NULL , +tax_pay_amount varchar2(255) , +tax_paid_amount varchar2(255) , +tax_pure_paid_amount varchar2(255) , +declare_request_id varchar2(100) , +delete_type number NULL +); +/ + diff --git a/resource/sqlupgrade/GS/sql202404120303.sql b/resource/sqlupgrade/GS/sql202404120303.sql new file mode 100644 index 000000000..3ce4e54d0 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202404120303.sql @@ -0,0 +1,18 @@ +CREATE TABLE hrsa_tax_declare_status ( +id NUMBER(38,0) primary key NOT NULL, +tax_declare_record_id NUMBER(38,0) NULL , +report_type number NULL , +request_id varchar2(100) , +tax_declare_type number NULL , +tax_declare_status number NULL , +display_update_icon number NULL , +tax_declare_error_msg varchar2(1000) , +person_num number NULL , +tax_pay_amount varchar2(255) , +tax_paid_amount varchar2(255) , +tax_pure_paid_amount varchar2(255) , +declare_request_id varchar2(100) , +delete_type number NULL +); +/ + diff --git a/resource/sqlupgrade/JC/sql202404120303.sql b/resource/sqlupgrade/JC/sql202404120303.sql new file mode 100644 index 000000000..3ce4e54d0 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202404120303.sql @@ -0,0 +1,18 @@ +CREATE TABLE hrsa_tax_declare_status ( +id NUMBER(38,0) primary key NOT NULL, +tax_declare_record_id NUMBER(38,0) NULL , +report_type number NULL , +request_id varchar2(100) , +tax_declare_type number NULL , +tax_declare_status number NULL , +display_update_icon number NULL , +tax_declare_error_msg varchar2(1000) , +person_num number NULL , +tax_pay_amount varchar2(255) , +tax_paid_amount varchar2(255) , +tax_pure_paid_amount varchar2(255) , +declare_request_id varchar2(100) , +delete_type number NULL +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202404120303.sql b/resource/sqlupgrade/Mysql/sql202404120303.sql new file mode 100644 index 000000000..67da1a7d2 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202404120303.sql @@ -0,0 +1,17 @@ +CREATE TABLE hrsa_tax_declare_status ( +id bigint(0) NOT NULL , +tax_declare_record_id bigint(0) NULL , +report_type int(0) NULL , +request_id varchar(100) , +tax_declare_type tinyint(0) NULL , +tax_declare_status tinyint(0) NULL , +display_update_icon tinyint(0) NULL , +tax_declare_error_msg varchar(1000) , +person_num int(0) NULL , +tax_pay_amount varchar(255) , +tax_paid_amount varchar(255) , +tax_pure_paid_amount varchar(255) , +declare_request_id varchar(100) , +delete_type int(0) NULL, +PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202404120303.sql b/resource/sqlupgrade/Oracle/sql202404120303.sql new file mode 100644 index 000000000..c024ae2a7 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202404120303.sql @@ -0,0 +1,17 @@ +CREATE TABLE hrsa_tax_declare_status ( +id NUMBER(38,0) primary key NOT NULL, +tax_declare_record_id NUMBER(38,0) NULL , +report_type number NULL , +request_id varchar2(100) , +tax_declare_type number NULL , +tax_declare_status number NULL , +display_update_icon number NULL , +tax_declare_error_msg varchar2(1000) , +person_num number NULL , +tax_pay_amount varchar2(255) , +tax_paid_amount varchar2(255) , +tax_pure_paid_amount varchar2(255) , +declare_request_id varchar2(100) , +delete_type number NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202404120303.sql b/resource/sqlupgrade/PG/sql202404120303.sql new file mode 100644 index 000000000..6bad5c7fb --- /dev/null +++ b/resource/sqlupgrade/PG/sql202404120303.sql @@ -0,0 +1,17 @@ +CREATE TABLE hrsa_tax_declare_status ( +id bigserial NOT NULL , +tax_declare_record_id bigint NULL , +report_type int NULL , +request_id varchar(100) , +tax_declare_type int NULL , +tax_declare_status int NULL , +display_update_icon int NULL , +tax_declare_error_msg varchar(1000) , +person_num int NULL , +tax_pay_amount varchar(255) , +tax_paid_amount varchar(255) , +tax_pure_paid_amount varchar(255) , +declare_request_id varchar(100) , +delete_type int NULL, +PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202404120303.sql b/resource/sqlupgrade/SQLServer/sql202404120303.sql new file mode 100644 index 000000000..2a9169a28 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202404120303.sql @@ -0,0 +1,18 @@ +create table hrsa_tax_declare_status +( +id bigint primary key , +tax_declare_record_id bigint NULL , +report_type int NULL , +request_id varchar(100) , +tax_declare_type tinyint NULL , +tax_declare_status tinyint NULL , +display_update_icon tinyint NULL , +tax_declare_error_msg varchar(1000) , +person_num int NULL , +tax_pay_amount varchar(255) , +tax_paid_amount varchar(255) , +tax_pure_paid_amount varchar(255) , +declare_request_id varchar(100) , +delete_type int NULL +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202404120303.sql b/resource/sqlupgrade/ST/sql202404120303.sql new file mode 100644 index 000000000..3ce4e54d0 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202404120303.sql @@ -0,0 +1,18 @@ +CREATE TABLE hrsa_tax_declare_status ( +id NUMBER(38,0) primary key NOT NULL, +tax_declare_record_id NUMBER(38,0) NULL , +report_type number NULL , +request_id varchar2(100) , +tax_declare_type number NULL , +tax_declare_status number NULL , +display_update_icon number NULL , +tax_declare_error_msg varchar2(1000) , +person_num number NULL , +tax_pay_amount varchar2(255) , +tax_paid_amount varchar2(255) , +tax_pure_paid_amount varchar2(255) , +declare_request_id varchar2(100) , +delete_type number NULL +); +/ + diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index ad6319472..424e296d4 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -8,7 +8,6 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; -import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -134,8 +133,6 @@ public interface TaxDeclareRecordService { */ void declare(Long id, Integer reportType); - List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId); - /** * 个税申报获取反馈 * diff --git a/src/com/engine/salary/service/TaxDeclareStatusService.java b/src/com/engine/salary/service/TaxDeclareStatusService.java index b40b2c738..f6f6674b0 100644 --- a/src/com/engine/salary/service/TaxDeclareStatusService.java +++ b/src/com/engine/salary/service/TaxDeclareStatusService.java @@ -14,6 +14,9 @@ import java.util.List; **/ public interface TaxDeclareStatusService { + List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId); + + /** * 获取申报记录状态 * @param taxDeclareRecordId diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 7ab44eb0c..847f694ff 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -740,10 +740,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } - @Override - public List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId) { - return getTaxDeclareStatusMapper().listSome(TaxDeclareStatusPO.builder().taxDeclareRecordId(taxDeclareRecordId).build()); - } + @Override public void getDeclareFeedback(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate) { diff --git a/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java index d2db18c73..88e92f045 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareStatusServiceImpl.java @@ -49,6 +49,11 @@ public class TaxDeclareStatusServiceImpl extends Service implements TaxDeclareSt return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); } + @Override + public List getTaxDeclareStatusByTaxDeclareRecordId(Long taxDeclareRecordId) { + return getTaxDeclareStatusMapper().listSome(TaxDeclareStatusPO.builder().taxDeclareRecordId(taxDeclareRecordId).build()); + } + @Override public TaxDeclareStatusPO getTaxDeclareStatus(Long taxDeclareRecordId, Integer reportType) { return getTaxDeclareStatusMapper().getDeclareStatus(taxDeclareRecordId, reportType); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 0f8e4622f..743f1631c 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -55,7 +55,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService throw new SalaryRunTimeException(msg); } - List statuses = getTaxDeclareRecordService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); + List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); for (TaxDeclareStatusPO status : statuses) { WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) .map(WithholdingFeedbackResponse::getBody) @@ -141,7 +141,6 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService protected TempWrapper checkBeforeGetRequestIdResponse(TaxPaymentQueryParam param) { TempWrapper tempWrapper = super.checkBeforeGetRequestIdResponse(param); Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); - requestParam.put("sblx", param.getReportType()); cancelWithholdingVoucher(tempWrapper.getApiConfigPO(), tempWrapper.getTaxDeclareRecord(), requestParam); return tempWrapper; } @@ -155,22 +154,26 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService .taxYearMonth(taxDeclareRecord.getTaxCycle()) .build()); -// if (paymentRequestPO != null) { - String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; - QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); - SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) - .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); - SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) - || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); +// if (paymentRequestPO != null) { + List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); + statuses.forEach(status -> { + requestParam.put("sblx", status.getReportType()); + String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; + QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); + SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) + .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); + SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); - getTaxPaymentRequestMapper().updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO - .builder() - .feedback(SalaryOnOffEnum.ON.getValue()) - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxAgentId(taxDeclareRecord.getTaxAgentId()) - .taxYearMonth(taxDeclareRecord.getTaxCycle()) - .build()); -// } + getTaxPaymentRequestMapper().updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO + .builder() + .feedback(SalaryOnOffEnum.ON.getValue()) + .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) + .taxAgentId(taxDeclareRecord.getTaxAgentId()) + .taxYearMonth(taxDeclareRecord.getTaxCycle()) + .build()); + }); + +// } } protected BaseResponse getFeedbackResponse(TaxDeclarationApiConfigPO apiConfig, String requestId) { diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index de73ad3bb..028a86c7c 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxagent.response.SzyhResponseHead; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.entity.taxpayment.bo.TaxPaymentBO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; import com.engine.salary.entity.taxpayment.dto.TaxWithholdingVoucherFeedbackDTO; @@ -112,6 +113,11 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS .taxYearMonth(taxDeclareRecord.getTaxCycle()) .build()); // if (paymentRequestPO != null) { + + List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); + statuses.forEach(status -> { + requestParam.put("sblx", status.getReportType()); + String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) @@ -124,6 +130,7 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS .taxAgentId(taxDeclareRecord.getTaxAgentId()) .taxYearMonth(taxDeclareRecord.getTaxCycle()) .build()); + }); // } } @@ -166,7 +173,6 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS public void cancelWithholdingVoucher(TaxPaymentQueryParam param) { TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); - requestParam.put("sblx", 1); cancelWithholdingVoucher(tempWrapper.getApiConfigPO(), tempWrapper.getTaxDeclareRecord(), requestParam); } From 149674548834980a8a8a8aa0b171e741d142328b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Apr 2024 20:12:48 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=E4=BD=9C=E5=BA=9F=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/EmployeeInformationChangeParam.java | 43 +++++++++++ .../param/EmployeeInvalidParam.java | 31 ++++++++ .../taxagent/TaxAgentTaxReturnMapper.xml | 3 +- .../remote/tax/client/EmployeeClient.java | 73 +++++++++++++++++-- .../BatchInvalidSubmissionRequest.java | 71 ++++++++++++++++++ .../employee/InformationChangeRequest.java | 60 +++++++++++++++ .../service/EmployeeDeclareService.java | 14 ++++ .../impl/EmployeeDeclareServiceImpl.java | 41 +++++++++++ .../salary/web/EmployeeDeclareController.java | 16 ++++ .../wrapper/EmployeeDeclareWrapper.java | 11 +++ 10 files changed, 357 insertions(+), 6 deletions(-) create mode 100644 src/com/engine/salary/entity/employeedeclare/param/EmployeeInformationChangeParam.java create mode 100644 src/com/engine/salary/entity/employeedeclare/param/EmployeeInvalidParam.java create mode 100644 src/com/engine/salary/remote/tax/request/employee/BatchInvalidSubmissionRequest.java create mode 100644 src/com/engine/salary/remote/tax/request/employee/InformationChangeRequest.java diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeInformationChangeParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeInformationChangeParam.java new file mode 100644 index 000000000..7809661f7 --- /dev/null +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeInformationChangeParam.java @@ -0,0 +1,43 @@ +package com.engine.salary.entity.employeedeclare.param; + +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.enums.employeedeclare.CardTypeEnum; +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 人员报送 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EmployeeInformationChangeParam extends BaseQueryParam { + + /** + * 人员记录id + */ + @DataCheck(require = true,message = "参数错误,id不能为空") + private Long id; + + /** + * + */ + private String name; + + //证件类型 + private CardTypeEnum cardType; + + //证件号码 + private String cardNum; + + +} diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeInvalidParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeInvalidParam.java new file mode 100644 index 000000000..fa67731ce --- /dev/null +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeInvalidParam.java @@ -0,0 +1,31 @@ +package com.engine.salary.entity.employeedeclare.param; + +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 人员报送 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EmployeeInvalidParam extends BaseQueryParam { + + /** + * 人员记录id + */ + @DataCheck(require = true,message = "参数错误,id不能为空") + private Long id; + + +} diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml index 59ce83251..da28243a6 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentTaxReturnMapper.xml @@ -70,7 +70,8 @@ - SELECT FROM hrsa_tax_agent_tax_return t diff --git a/src/com/engine/salary/remote/tax/client/EmployeeClient.java b/src/com/engine/salary/remote/tax/client/EmployeeClient.java index 90da29385..f1f452c13 100644 --- a/src/com/engine/salary/remote/tax/client/EmployeeClient.java +++ b/src/com/engine/salary/remote/tax/client/EmployeeClient.java @@ -2,7 +2,9 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareParam; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnPasswordTypeEnum; +import com.engine.salary.remote.tax.request.employee.BatchInvalidSubmissionRequest; import com.engine.salary.remote.tax.request.employee.GetCompanyEmployeeRequest; +import com.engine.salary.remote.tax.request.employee.InformationChangeRequest; import com.engine.salary.remote.tax.response.employee.GetCompanyEmployeeResponse; import com.engine.salary.util.HttpUtil; import com.engine.salary.util.JsonUtil; @@ -13,6 +15,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.Map; +import java.util.UUID; /** * 人员信息登记报送客户端 @@ -34,8 +37,8 @@ public class EmployeeClient extends TaxBaseClient { String url = super.apiConfig.getHost() + "gateway/iit/data/getCompanyEmployee"; GetCompanyEmployeeRequest getCompanyEmployeeRequest = new GetCompanyEmployeeRequest(); - getCompanyEmployeeRequest.setNsrsbh( returnPO.getTaxCode()); - getCompanyEmployeeRequest.setQymc(""); + getCompanyEmployeeRequest.setNsrsbh(returnPO.getTaxCode()); + getCompanyEmployeeRequest.setQymc(returnPO.getTaxAgentName()); getCompanyEmployeeRequest.setDjxhid(StringUtils.isNotEmpty(returnPO.getTaxRegistrationNumber()) ? returnPO.getTaxRegistrationNumber() : null); getCompanyEmployeeRequest.setAreaid(returnPO.getAreaCode()); getCompanyEmployeeRequest.setBmbh(StringUtils.isNotEmpty(returnPO.getDepartmentCode()) ? returnPO.getDepartmentCode() : null); @@ -45,10 +48,10 @@ public class EmployeeClient extends TaxBaseClient { getCompanyEmployeeRequest.setSmzh(realNamePwd ? returnPO.getRealAccount() : null); getCompanyEmployeeRequest.setSmmm(realNamePwd ? returnPO.getPwd() : null); getCompanyEmployeeRequest.setJmsmmm("0"); - getCompanyEmployeeRequest.setMmlx(""+returnPO.getPasswordType()); + getCompanyEmployeeRequest.setMmlx("" + returnPO.getPasswordType()); getCompanyEmployeeRequest.setSsyf(SalaryDateUtil.getFormatYYYYMM(param.getTaxCycle())); - getCompanyEmployeeRequest.setPageNo(""+param.getCurrent()); - getCompanyEmployeeRequest.setPageSize(""+param.getPageSize()); + getCompanyEmployeeRequest.setPageNo("" + param.getCurrent()); + getCompanyEmployeeRequest.setPageSize("" + param.getPageSize()); String reqJson = JsonUtil.toJsonString(getCompanyEmployeeRequest); log.info("getCompanyEmployee params --- \n{}\n", reqJson); @@ -62,4 +65,64 @@ public class EmployeeClient extends TaxBaseClient { } + public String batchInvalidSubmission(BatchInvalidSubmissionRequest batchInvalidSubmissionRequest) { + + String url = super.apiConfig.getHost() + "gateway/iit/declare/batchInvalidSubmission"; + batchInvalidSubmissionRequest.setNsrsbh(returnPO.getTaxCode()); + batchInvalidSubmissionRequest.setBizNo(UUID.randomUUID().toString().replace("-", "")); + batchInvalidSubmissionRequest.setQymc(returnPO.getTaxAgentName()); + batchInvalidSubmissionRequest.setDjxhid(StringUtils.isNotEmpty(returnPO.getTaxRegistrationNumber()) ? returnPO.getTaxRegistrationNumber() : null); + batchInvalidSubmissionRequest.setAreaid(returnPO.getAreaCode()); + batchInvalidSubmissionRequest.setBmbh(StringUtils.isNotEmpty(returnPO.getDepartmentCode()) ? returnPO.getDepartmentCode() : null); + boolean realNamePwd = TaxAgentTaxReturnPasswordTypeEnum.REAL_NAME_PASSWORD.getValue().equals(returnPO.getPasswordType()); + batchInvalidSubmissionRequest.setSbmm(realNamePwd ? null : returnPO.getPwd()); + batchInvalidSubmissionRequest.setJmsbmm("0"); + batchInvalidSubmissionRequest.setSmzh(realNamePwd ? returnPO.getRealAccount() : null); + batchInvalidSubmissionRequest.setSmmm(realNamePwd ? returnPO.getPwd() : null); + batchInvalidSubmissionRequest.setJmsmmm("0"); + batchInvalidSubmissionRequest.setMmlx("" + returnPO.getPasswordType()); + + + String reqJson = JsonUtil.toJsonString(batchInvalidSubmissionRequest); + log.info("batchInvalidSubmission params --- \n{}\n", reqJson); + Map params = new HashMap<>(1); + Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); + + // 开始请求 + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + log.info("batchInvalidSubmission res --- {}", res); +// return JsonUtil.parseObject(res, GetCompanyEmployeeResponse.class); + return res; + } + + public String informationChange(InformationChangeRequest informationChangeRequest) { + + String url = super.apiConfig.getHost() + "gateway/iit/employee/informationChange"; + informationChangeRequest.setNsrsbh(returnPO.getTaxCode()); + informationChangeRequest.setBizNo(UUID.randomUUID().toString().replace("-", "")); + informationChangeRequest.setQymc(returnPO.getTaxAgentName()); + informationChangeRequest.setDjxhid(StringUtils.isNotEmpty(returnPO.getTaxRegistrationNumber()) ? returnPO.getTaxRegistrationNumber() : null); + informationChangeRequest.setAreaid(returnPO.getAreaCode()); + informationChangeRequest.setBmbh(StringUtils.isNotEmpty(returnPO.getDepartmentCode()) ? returnPO.getDepartmentCode() : null); + boolean realNamePwd = TaxAgentTaxReturnPasswordTypeEnum.REAL_NAME_PASSWORD.getValue().equals(returnPO.getPasswordType()); + informationChangeRequest.setSbmm(realNamePwd ? null : returnPO.getPwd()); + informationChangeRequest.setJmsbmm("0"); + informationChangeRequest.setSmzh(realNamePwd ? returnPO.getRealAccount() : null); + informationChangeRequest.setSmmm(realNamePwd ? returnPO.getPwd() : null); + informationChangeRequest.setJmsmmm("0"); + informationChangeRequest.setMmlx("" + returnPO.getPasswordType()); + + + String reqJson = JsonUtil.toJsonString(informationChangeRequest); + log.info("informationChangeRequest params --- \n{}\n", reqJson); + Map params = new HashMap<>(1); + Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); + + // 开始请求 + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + log.info("informationChangeRequest res --- {}", res); +// return JsonUtil.parseObject(res, GetCompanyEmployeeResponse.class); + return res; + } + } diff --git a/src/com/engine/salary/remote/tax/request/employee/BatchInvalidSubmissionRequest.java b/src/com/engine/salary/remote/tax/request/employee/BatchInvalidSubmissionRequest.java new file mode 100644 index 000000000..a56c5103f --- /dev/null +++ b/src/com/engine/salary/remote/tax/request/employee/BatchInvalidSubmissionRequest.java @@ -0,0 +1,71 @@ +package com.engine.salary.remote.tax.request.employee; + +import lombok.Data; + +import java.util.List; + +@Data +public class BatchInvalidSubmissionRequest { + + + private String bizNo; + + /** + * 税号 必填:是 扣缴单位纳税人识别号 + */ + private String nsrsbh; + /** + * 企业名称 必填:是 扣缴义务人名称:例如:测试网络科技有限公司 + */ + private String qymc; + /** + * 登记序号 必填:条件必填 存在多个登记序号时,需要指定传入一个.例:10117440105249764755 + */ + private String djxhid; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:条件必填 分部门代报时必传 + */ + private String bmbh; + /** + * 申报密码 必填:条件必填 当mmlx=0时,必填 + */ + private String sbmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 + */ + private String jmsbmm; + /** + * 实名账号 必填:是 + */ + private String smzh; + /** + * 实名密码 必填:是 + */ + private String smmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 参考3.4代报、实名密码加密说明 + */ + private String jmsmmm; + + /** + * 密码类型 必填:是 0表示申报密码; 2表示实名账号实名密码 + */ + private String mmlx; + + /** + * 人员列表 必填:是 + */ + protected List rylb; + + + @Data + public static class RY { + private String xm; + private String zzhm; + private String zzlx; + } +} diff --git a/src/com/engine/salary/remote/tax/request/employee/InformationChangeRequest.java b/src/com/engine/salary/remote/tax/request/employee/InformationChangeRequest.java new file mode 100644 index 000000000..32d364545 --- /dev/null +++ b/src/com/engine/salary/remote/tax/request/employee/InformationChangeRequest.java @@ -0,0 +1,60 @@ +package com.engine.salary.remote.tax.request.employee; + +import lombok.Data; + +@Data +public class InformationChangeRequest { + + + private String bizNo; + + /** + * 税号 必填:是 扣缴单位纳税人识别号 + */ + private String nsrsbh; + /** + * 企业名称 必填:是 扣缴义务人名称:例如:测试网络科技有限公司 + */ + private String qymc; + /** + * 登记序号 必填:条件必填 存在多个登记序号时,需要指定传入一个.例:10117440105249764755 + */ + private String djxhid; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:条件必填 分部门代报时必传 + */ + private String bmbh; + /** + * 申报密码 必填:条件必填 当mmlx=0时,必填 + */ + private String sbmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 + */ + private String jmsbmm; + /** + * 实名账号 必填:是 + */ + private String smzh; + /** + * 实名密码 必填:是 + */ + private String smmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 参考3.4代报、实名密码加密说明 + */ + private String jmsmmm; + + /** + * 密码类型 必填:是 0表示申报密码; 2表示实名账号实名密码 + */ + private String mmlx; + + private String xm; + private String zzlx; + private String zzhm; +} diff --git a/src/com/engine/salary/service/EmployeeDeclareService.java b/src/com/engine/salary/service/EmployeeDeclareService.java index ed184159a..3243a0234 100644 --- a/src/com/engine/salary/service/EmployeeDeclareService.java +++ b/src/com/engine/salary/service/EmployeeDeclareService.java @@ -176,6 +176,19 @@ public interface EmployeeDeclareService{ */ void getDeclareFeedback(EmployeeDeclareParam param, EmployeeDeclareRateDTO employeeDeclareRate); + /** + * 作废人员 + * @param param + */ + String invalid(EmployeeInvalidParam param); + + /** + * 关键信息变更 + * @param param + * @return + */ + String informationChange(EmployeeInformationChangeParam param); + /** * 同步任职受雇日期为入职日期 * @@ -184,4 +197,5 @@ public interface EmployeeDeclareService{ String syncEmploymentDate(EmployeeDeclareSyncStartDateParam param); void batchInsert(List insertList); + } diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java index 3fb74033c..f21a640c0 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java @@ -42,6 +42,9 @@ import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; import com.engine.salary.enums.taxdeclaration.EnumDeclareApiBusinessType; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.employeedeclare.EmployeeDeclareMapper; +import com.engine.salary.remote.tax.client.EmployeeClient; +import com.engine.salary.remote.tax.request.employee.BatchInvalidSubmissionRequest; +import com.engine.salary.remote.tax.request.employee.InformationChangeRequest; import com.engine.salary.service.*; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; @@ -718,6 +721,44 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla } } + @Override + public String invalid(EmployeeInvalidParam param) { + List employeeDeclarePOS = listByIds(Collections.singletonList(param.getId())); + if (CollectionUtils.isEmpty(employeeDeclarePOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "未找到该人员")); + } + + BatchInvalidSubmissionRequest request = new BatchInvalidSubmissionRequest(); + List rys = employeeDeclarePOS.stream().map(po -> { + BatchInvalidSubmissionRequest.RY ry = new BatchInvalidSubmissionRequest.RY(); + ry.setXm(po.getEmployeeName()); + ry.setZzhm(po.getCardNum()); + ry.setZzlx(CardTypeEnum.getByValue(po.getCardType()).getDefaultLabel()); + return ry; + }).collect(Collectors.toList()); + request.setRylb(rys); + + EmployeeClient employeeClient = new EmployeeClient(employeeDeclarePOS.get(0).getTaxAgentId()); + String s = employeeClient.batchInvalidSubmission(request); + return s; + } + + @Override + public String informationChange(EmployeeInformationChangeParam param) { + EmployeeDeclarePO employeeDeclarePO = getById(param.getId()); + if (employeeDeclarePO == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "未找到该人员")); + } + + InformationChangeRequest request =new InformationChangeRequest(); + request.setXm(param.getName()); + request.setZzlx(param.getCardType().getDefaultLabel()); + request.setZzhm(param.getCardNum()); + EmployeeClient employeeClient = new EmployeeClient(employeeDeclarePO.getTaxAgentId()); + String s = employeeClient.informationChange(request); + return s; + } + @Override public String syncEmploymentDate(EmployeeDeclareSyncStartDateParam param) { List employeeList = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL); diff --git a/src/com/engine/salary/web/EmployeeDeclareController.java b/src/com/engine/salary/web/EmployeeDeclareController.java index fa54d79f3..c94c9da12 100644 --- a/src/com/engine/salary/web/EmployeeDeclareController.java +++ b/src/com/engine/salary/web/EmployeeDeclareController.java @@ -242,6 +242,22 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::getDeclareFeedback, employeeDeclareParam); } + @POST + @Path("/invalid") + @Produces(MediaType.APPLICATION_JSON) + public String invalid(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeInvalidParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::invalid, param); + } + + @POST + @Path("/informationChange") + @Produces(MediaType.APPLICATION_JSON) + public String informationChange(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeInformationChangeParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::informationChange, param); + } + /** * 人员报送-后端业务逻辑是否已经完成 * diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index f4ab000ff..fe681eb07 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -543,6 +543,17 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String invalid(EmployeeInvalidParam param) { + return getEmployeeDeclareService(user).invalid(param); + } + + public String informationChange(EmployeeInformationChangeParam param) { + return getEmployeeDeclareService(user).informationChange(param); + } + + + + /** * 获取人员报送相关后端接口是否已经完成 * From a27ad1f0701c16d536f7fc5ca0cd1459a8dcfd04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Apr 2024 20:26:56 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E5=B9=B6=E6=A1=A3=E6=A1=88=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/tax/client/EmployeeClient.java | 45 ++++++++++++ .../MergedEmployeeArchivesRequest.java | 71 +++++++++++++++++++ .../impl/EmployeeDeclareServiceImpl.java | 1 + 3 files changed, 117 insertions(+) create mode 100644 src/com/engine/salary/remote/tax/request/employee/MergedEmployeeArchivesRequest.java diff --git a/src/com/engine/salary/remote/tax/client/EmployeeClient.java b/src/com/engine/salary/remote/tax/client/EmployeeClient.java index f1f452c13..0bbee002f 100644 --- a/src/com/engine/salary/remote/tax/client/EmployeeClient.java +++ b/src/com/engine/salary/remote/tax/client/EmployeeClient.java @@ -5,6 +5,7 @@ import com.engine.salary.enums.taxagent.TaxAgentTaxReturnPasswordTypeEnum; import com.engine.salary.remote.tax.request.employee.BatchInvalidSubmissionRequest; import com.engine.salary.remote.tax.request.employee.GetCompanyEmployeeRequest; import com.engine.salary.remote.tax.request.employee.InformationChangeRequest; +import com.engine.salary.remote.tax.request.employee.MergedEmployeeArchivesRequest; import com.engine.salary.remote.tax.response.employee.GetCompanyEmployeeResponse; import com.engine.salary.util.HttpUtil; import com.engine.salary.util.JsonUtil; @@ -13,6 +14,7 @@ import com.engine.salary.util.SingnatureData; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -125,4 +127,47 @@ public class EmployeeClient extends TaxBaseClient { return res; } + + public String mergedEmployeeArchives(MergedEmployeeArchivesRequest mergedEmployeeArchivesRequest) { + + String url = super.apiConfig.getHost() + "gateway/iit/mergedEmployeeArchives/query"; + mergedEmployeeArchivesRequest.setNsrsbh(returnPO.getTaxCode()); + mergedEmployeeArchivesRequest.setBizNo(UUID.randomUUID().toString().replace("-", "")); + mergedEmployeeArchivesRequest.setQymc(returnPO.getTaxAgentName()); + mergedEmployeeArchivesRequest.setDjxhid(StringUtils.isNotEmpty(returnPO.getTaxRegistrationNumber()) ? returnPO.getTaxRegistrationNumber() : null); + mergedEmployeeArchivesRequest.setAreaid(returnPO.getAreaCode()); + mergedEmployeeArchivesRequest.setBmbh(StringUtils.isNotEmpty(returnPO.getDepartmentCode()) ? returnPO.getDepartmentCode() : null); + boolean realNamePwd = TaxAgentTaxReturnPasswordTypeEnum.REAL_NAME_PASSWORD.getValue().equals(returnPO.getPasswordType()); + mergedEmployeeArchivesRequest.setSbmm(realNamePwd ? null : returnPO.getPwd()); + mergedEmployeeArchivesRequest.setJmsbmm("0"); + mergedEmployeeArchivesRequest.setSmzh(realNamePwd ? returnPO.getRealAccount() : null); + mergedEmployeeArchivesRequest.setSmmm(realNamePwd ? returnPO.getPwd() : null); + mergedEmployeeArchivesRequest.setJmsmmm("0"); + mergedEmployeeArchivesRequest.setMmlx("" + returnPO.getPasswordType()); + + + String reqJson = JsonUtil.toJsonString(mergedEmployeeArchivesRequest); + log.info("mergedEmployeeArchivesRequest params --- \n{}\n", reqJson); + Map params = new HashMap<>(1); + Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); + + // 开始请求 + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + log.info("mergedEmployeeArchivesRequest res --- {}", res); +// return JsonUtil.parseObject(res, GetCompanyEmployeeResponse.class); + return res; + } + + public String mergedEmployeeArchivesFeedback(String requestId) { + + String url = super.apiConfig.getHost() + "gateway/iit/mergedEmployeeArchives/getFeedback"; + Map params = new HashMap<>(1); + params.put("requestId", requestId); + log.info("mergedEmployeeArchivesFeedback requestId --- \n{}\n", requestId); + Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.getRequest(url, header, params); + log.info("mergedEmployeeArchivesFeedback res --- {}", res); +// return JsonUtil.parseObject(res, GetCompanyEmployeeResponse.class); + return res; + } } diff --git a/src/com/engine/salary/remote/tax/request/employee/MergedEmployeeArchivesRequest.java b/src/com/engine/salary/remote/tax/request/employee/MergedEmployeeArchivesRequest.java new file mode 100644 index 000000000..fa6c67adf --- /dev/null +++ b/src/com/engine/salary/remote/tax/request/employee/MergedEmployeeArchivesRequest.java @@ -0,0 +1,71 @@ +package com.engine.salary.remote.tax.request.employee; + +import lombok.Data; + +import java.util.List; + +@Data +public class MergedEmployeeArchivesRequest { + + + private String bizNo; + + /** + * 税号 必填:是 扣缴单位纳税人识别号 + */ + private String nsrsbh; + /** + * 企业名称 必填:是 扣缴义务人名称:例如:测试网络科技有限公司 + */ + private String qymc; + /** + * 登记序号 必填:条件必填 存在多个登记序号时,需要指定传入一个.例:10117440105249764755 + */ + private String djxhid; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:条件必填 分部门代报时必传 + */ + private String bmbh; + /** + * 申报密码 必填:条件必填 当mmlx=0时,必填 + */ + private String sbmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 + */ + private String jmsbmm; + /** + * 实名账号 必填:是 + */ + private String smzh; + /** + * 实名密码 必填:是 + */ + private String smmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 参考3.4代报、实名密码加密说明 + */ + private String jmsmmm; + + /** + * 密码类型 必填:是 0表示申报密码; 2表示实名账号实名密码 + */ + private String mmlx; + + /** + * 人员列表 必填:是 + */ + protected List bdrys; + + + @Data + public static class RY { + private String xm; + private String zzlx; + private String zzhm; + } +} diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java index f21a640c0..a88612e7e 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java @@ -759,6 +759,7 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla return s; } + @Override public String syncEmploymentDate(EmployeeDeclareSyncStartDateParam param) { List employeeList = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL);