diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index 24be7d7cc..d1a30653c 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=3.0.2.2504.01 -openFormulaForcedEditing=false \ No newline at end of file +version=3.0.2.2504.03 +openFormulaForcedEditing=true \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202411190103.sql b/resource/sqlupgrade/DM/sql202411190103.sql index 1d13e52dd..a02da0e03 100644 --- a/resource/sqlupgrade/DM/sql202411190103.sql +++ b/resource/sqlupgrade/DM/sql202411190103.sql @@ -32,39 +32,3 @@ CREATE TABLE hrsa_push_setting_item ); / -CREATE TABLE hrsa_push_record -( - id NUMBER(38,0) NOT NULL, - name varchar2(200), - setting_id NUMBER(38,0), - mode_id number, - table_name varchar2(100), - acct_record_id NUMBER(38,0), - type number, - status number, - start_time date, - end_time date, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - -CREATE TABLE hrsa_push_record_detail -( - id NUMBER(38,0) NOT NULL, - record_id NUMBER(38,0), - acct_emp_id NUMBER(38,0), - formula CLOB, - execute_time date, - status number, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - diff --git a/resource/sqlupgrade/DM/sql202504020203.sql b/resource/sqlupgrade/DM/sql202504020203.sql index d54eff0ca..fb88e05b0 100644 --- a/resource/sqlupgrade/DM/sql202504020203.sql +++ b/resource/sqlupgrade/DM/sql202504020203.sql @@ -1,3 +1,39 @@ +CREATE TABLE hrsa_push_record +( + id NUMBER(38,0) NOT NULL, + name varchar2(200), + setting_id NUMBER(38,0), + mode_id number, + table_name varchar2(100), + acct_record_id NUMBER(38,0), + type number, + status number, + start_time date, + end_time date, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + +CREATE TABLE hrsa_push_record_detail +( + id NUMBER(38,0) NOT NULL, + record_id NUMBER(38,0), + acct_emp_id NUMBER(38,0), + formula CLOB, + execute_time date, + status number, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + ALTER TABLE hrsa_push_record ADD fail_reason varchar2(4000); / diff --git a/resource/sqlupgrade/GS/sql202411190103.sql b/resource/sqlupgrade/GS/sql202411190103.sql index 1d13e52dd..a02da0e03 100644 --- a/resource/sqlupgrade/GS/sql202411190103.sql +++ b/resource/sqlupgrade/GS/sql202411190103.sql @@ -32,39 +32,3 @@ CREATE TABLE hrsa_push_setting_item ); / -CREATE TABLE hrsa_push_record -( - id NUMBER(38,0) NOT NULL, - name varchar2(200), - setting_id NUMBER(38,0), - mode_id number, - table_name varchar2(100), - acct_record_id NUMBER(38,0), - type number, - status number, - start_time date, - end_time date, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - -CREATE TABLE hrsa_push_record_detail -( - id NUMBER(38,0) NOT NULL, - record_id NUMBER(38,0), - acct_emp_id NUMBER(38,0), - formula CLOB, - execute_time date, - status number, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - diff --git a/resource/sqlupgrade/GS/sql202504020203.sql b/resource/sqlupgrade/GS/sql202504020203.sql index d54eff0ca..fb88e05b0 100644 --- a/resource/sqlupgrade/GS/sql202504020203.sql +++ b/resource/sqlupgrade/GS/sql202504020203.sql @@ -1,3 +1,39 @@ +CREATE TABLE hrsa_push_record +( + id NUMBER(38,0) NOT NULL, + name varchar2(200), + setting_id NUMBER(38,0), + mode_id number, + table_name varchar2(100), + acct_record_id NUMBER(38,0), + type number, + status number, + start_time date, + end_time date, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + +CREATE TABLE hrsa_push_record_detail +( + id NUMBER(38,0) NOT NULL, + record_id NUMBER(38,0), + acct_emp_id NUMBER(38,0), + formula CLOB, + execute_time date, + status number, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + ALTER TABLE hrsa_push_record ADD fail_reason varchar2(4000); / diff --git a/resource/sqlupgrade/JC/sql202411190103.sql b/resource/sqlupgrade/JC/sql202411190103.sql index 1d13e52dd..a02da0e03 100644 --- a/resource/sqlupgrade/JC/sql202411190103.sql +++ b/resource/sqlupgrade/JC/sql202411190103.sql @@ -32,39 +32,3 @@ CREATE TABLE hrsa_push_setting_item ); / -CREATE TABLE hrsa_push_record -( - id NUMBER(38,0) NOT NULL, - name varchar2(200), - setting_id NUMBER(38,0), - mode_id number, - table_name varchar2(100), - acct_record_id NUMBER(38,0), - type number, - status number, - start_time date, - end_time date, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - -CREATE TABLE hrsa_push_record_detail -( - id NUMBER(38,0) NOT NULL, - record_id NUMBER(38,0), - acct_emp_id NUMBER(38,0), - formula CLOB, - execute_time date, - status number, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - diff --git a/resource/sqlupgrade/JC/sql202504020203.sql b/resource/sqlupgrade/JC/sql202504020203.sql index d54eff0ca..fb88e05b0 100644 --- a/resource/sqlupgrade/JC/sql202504020203.sql +++ b/resource/sqlupgrade/JC/sql202504020203.sql @@ -1,3 +1,39 @@ +CREATE TABLE hrsa_push_record +( + id NUMBER(38,0) NOT NULL, + name varchar2(200), + setting_id NUMBER(38,0), + mode_id number, + table_name varchar2(100), + acct_record_id NUMBER(38,0), + type number, + status number, + start_time date, + end_time date, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + +CREATE TABLE hrsa_push_record_detail +( + id NUMBER(38,0) NOT NULL, + record_id NUMBER(38,0), + acct_emp_id NUMBER(38,0), + formula CLOB, + execute_time date, + status number, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + ALTER TABLE hrsa_push_record ADD fail_reason varchar2(4000); / diff --git a/resource/sqlupgrade/Mysql/sql202411190103.sql b/resource/sqlupgrade/Mysql/sql202411190103.sql index fdfc32280..9ceb2c5b9 100644 --- a/resource/sqlupgrade/Mysql/sql202411190103.sql +++ b/resource/sqlupgrade/Mysql/sql202411190103.sql @@ -33,39 +33,3 @@ CREATE TABLE hrsa_push_setting_item PRIMARY KEY (id) USING BTREE ); - -CREATE TABLE hrsa_push_record -( - id bigint(0) NOT NULL, - name varchar(200), - setting_id bigint(0), - mode_id int(0), - table_name varchar(100), - acct_record_id bigint(0), - type int(0), - status int(0), - start_time datetime(0), - end_time datetime(0), - creator bigint(0), - create_time datetime(0), - update_time datetime(0), - delete_type int(0), - tenant_key varchar(10), - PRIMARY KEY (id) USING BTREE -); - -CREATE TABLE hrsa_push_record_detail -( - id bigint(0) NOT NULL, - record_id bigint(0), - acct_emp_id bigint(0), - formula text, - execute_time datetime(0), - status int(0), - creator bigint(0), - create_time datetime(0), - update_time datetime(0), - delete_type int(0), - tenant_key varchar(10), - PRIMARY KEY (id) USING BTREE -); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202504020203.sql b/resource/sqlupgrade/Mysql/sql202504020203.sql index f7f94d4b6..43798afc8 100644 --- a/resource/sqlupgrade/Mysql/sql202504020203.sql +++ b/resource/sqlupgrade/Mysql/sql202504020203.sql @@ -1,3 +1,39 @@ +CREATE TABLE hrsa_push_record +( + id bigint(0) NOT NULL, + name varchar(200), + setting_id bigint(0), + mode_id int(0), + table_name varchar(100), + acct_record_id bigint(0), + type int(0), + status int(0), + start_time datetime(0), + end_time datetime(0), + creator bigint(0), + create_time datetime(0), + update_time datetime(0), + delete_type int(0), + tenant_key varchar(10), + PRIMARY KEY (id) USING BTREE +); + +CREATE TABLE hrsa_push_record_detail +( + id bigint(0) NOT NULL, + record_id bigint(0), + acct_emp_id bigint(0), + formula text, + execute_time datetime(0), + status int(0), + creator bigint(0), + create_time datetime(0), + update_time datetime(0), + delete_type int(0), + tenant_key varchar(10), + PRIMARY KEY (id) USING BTREE +); + ALTER TABLE hrsa_push_record ADD COLUMN fail_reason varchar(4000); ALTER TABLE hrsa_push_record_detail ADD COLUMN fail_reason varchar(4000) ; diff --git a/resource/sqlupgrade/Oracle/sql202411190103.sql b/resource/sqlupgrade/Oracle/sql202411190103.sql index 09f3ee1bd..68b19ec3e 100644 --- a/resource/sqlupgrade/Oracle/sql202411190103.sql +++ b/resource/sqlupgrade/Oracle/sql202411190103.sql @@ -31,41 +31,4 @@ CREATE TABLE hrsa_push_setting_item delete_type number, tenant_key varchar2(10) ) -/ - - -CREATE TABLE hrsa_push_record -( - id NUMBER(38,0) NOT NULL, - name varchar2(200), - setting_id NUMBER(38,0), - mode_id number, - table_name varchar2(100), - acct_record_id NUMBER(38,0), - type number, - status number, - start_time date, - end_time date, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -) -/ - -CREATE TABLE hrsa_push_record_detail -( - id NUMBER(38,0) NOT NULL, - record_id NUMBER(38,0), - acct_emp_id NUMBER(38,0), - formula CLOB, - execute_time date, - status number, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -) / \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202504020203.sql b/resource/sqlupgrade/Oracle/sql202504020203.sql index ea71581d2..b6737d61f 100644 --- a/resource/sqlupgrade/Oracle/sql202504020203.sql +++ b/resource/sqlupgrade/Oracle/sql202504020203.sql @@ -1,5 +1,41 @@ -ALTER TABLE hrsa_push_record ADD fail_reason varchar2(4000); +CREATE TABLE hrsa_push_record +( + id NUMBER(38,0) NOT NULL, + name varchar2(200), + setting_id NUMBER(38,0), + mode_id number, + table_name varchar2(100), + acct_record_id NUMBER(38,0), + type number, + status number, + start_time date, + end_time date, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +) / -ALTER TABLE hrsa_push_record_detail ADD fail_reason varchar2(4000); +CREATE TABLE hrsa_push_record_detail +( + id NUMBER(38,0) NOT NULL, + record_id NUMBER(38,0), + acct_emp_id NUMBER(38,0), + formula CLOB, + execute_time date, + status number, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +) +/ + +ALTER TABLE hrsa_push_record ADD fail_reason varchar2(4000) +/ + +ALTER TABLE hrsa_push_record_detail ADD fail_reason varchar2(4000) / \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202504030103.sql b/resource/sqlupgrade/Oracle/sql202504030103.sql index 8c2ab620f..37869d261 100644 --- a/resource/sqlupgrade/Oracle/sql202504030103.sql +++ b/resource/sqlupgrade/Oracle/sql202504030103.sql @@ -1,5 +1,5 @@ -ALTER TABLE hrsa_push_setting_item ADD sorted_index NUMBER; +ALTER TABLE hrsa_push_setting_item ADD sorted_index NUMBER / -ALTER TABLE hrsa_push_record_detail ADD data_id NUMBER(38,0); +ALTER TABLE hrsa_push_record_detail ADD data_id NUMBER(38,0) / \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202411190103.sql b/resource/sqlupgrade/PG/sql202411190103.sql index 5f4272388..3874c397f 100644 --- a/resource/sqlupgrade/PG/sql202411190103.sql +++ b/resource/sqlupgrade/PG/sql202411190103.sql @@ -31,41 +31,4 @@ CREATE TABLE hrsa_push_setting_item delete_type int, tenant_key varchar(10), PRIMARY KEY (id) -); - - -CREATE TABLE hrsa_push_record -( - id bigint NOT NULL, - name varchar(200), - setting_id bigint, - mode_id int, - table_name varchar(100), - acct_record_id bigint, - type int, - status int, - start_time timestamp, - end_time timestamp, - creator bigint, - create_time timestamp, - update_time timestamp, - delete_type int, - tenant_key varchar(10), - PRIMARY KEY (id) -); - -CREATE TABLE hrsa_push_record_detail -( - id bigint NOT NULL, - record_id bigint, - acct_emp_id bigint, - formula text, - execute_time timestamp, - status int, - creator bigint, - create_time timestamp, - update_time timestamp, - delete_type int, - tenant_key varchar(10), - PRIMARY KEY (id) ); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202504020203.sql b/resource/sqlupgrade/PG/sql202504020203.sql index adb7b31e2..6643f1adf 100644 --- a/resource/sqlupgrade/PG/sql202504020203.sql +++ b/resource/sqlupgrade/PG/sql202504020203.sql @@ -1,3 +1,39 @@ +CREATE TABLE hrsa_push_record +( + id bigint NOT NULL, + name varchar(200), + setting_id bigint, + mode_id int, + table_name varchar(100), + acct_record_id bigint, + type int, + status int, + start_time timestamp, + end_time timestamp, + creator bigint, + create_time timestamp, + update_time timestamp, + delete_type int, + tenant_key varchar(10), + PRIMARY KEY (id) +); + +CREATE TABLE hrsa_push_record_detail +( + id bigint NOT NULL, + record_id bigint, + acct_emp_id bigint, + formula text, + execute_time timestamp, + status int, + creator bigint, + create_time timestamp, + update_time timestamp, + delete_type int, + tenant_key varchar(10), + PRIMARY KEY (id) +); + alter table hrsa_push_record add fail_reason VARCHAR(4000) ; alter table hrsa_push_record_detail add fail_reason VARCHAR(4000) ; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202411190103.sql b/resource/sqlupgrade/SQLServer/sql202411190103.sql index dd06040a8..334e78b42 100644 --- a/resource/sqlupgrade/SQLServer/sql202411190103.sql +++ b/resource/sqlupgrade/SQLServer/sql202411190103.sql @@ -33,43 +33,4 @@ CREATE TABLE hrsa_push_setting_item tenant_key varchar(10), PRIMARY KEY (id) ) -GO - - -CREATE TABLE hrsa_push_record -( - id bigint NOT NULL, - name varchar(200), - setting_id bigint, - mode_id int, - table_name varchar(100), - acct_record_id bigint, - type int, - status int, - start_time datetime, - end_time datetime, - creator bigint, - create_time datetime, - update_time datetime, - delete_type int, - tenant_key varchar(10), - PRIMARY KEY (id) -) -GO - -CREATE TABLE hrsa_push_record_detail -( - id bigint NOT NULL, - record_id bigint, - acct_emp_id bigint, - formula text, - execute_time datetime, - status int, - creator bigint, - create_time datetime, - update_time datetime, - delete_type int, - tenant_key varchar(10), - PRIMARY KEY (id) -) GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202504020203.sql b/resource/sqlupgrade/SQLServer/sql202504020203.sql index 312077f79..fbedb9edd 100644 --- a/resource/sqlupgrade/SQLServer/sql202504020203.sql +++ b/resource/sqlupgrade/SQLServer/sql202504020203.sql @@ -1,3 +1,41 @@ +CREATE TABLE hrsa_push_record +( + id bigint NOT NULL, + name varchar(200), + setting_id bigint, + mode_id int, + table_name varchar(100), + acct_record_id bigint, + type int, + status int, + start_time datetime, + end_time datetime, + creator bigint, + create_time datetime, + update_time datetime, + delete_type int, + tenant_key varchar(10), + PRIMARY KEY (id) +) +GO + +CREATE TABLE hrsa_push_record_detail +( + id bigint NOT NULL, + record_id bigint, + acct_emp_id bigint, + formula text, + execute_time datetime, + status int, + creator bigint, + create_time datetime, + update_time datetime, + delete_type int, + tenant_key varchar(10), + PRIMARY KEY (id) +) +GO + alter table hrsa_push_record add fail_reason VARCHAR(4000) go diff --git a/resource/sqlupgrade/ST/sql202411190103.sql b/resource/sqlupgrade/ST/sql202411190103.sql index 1d13e52dd..a02da0e03 100644 --- a/resource/sqlupgrade/ST/sql202411190103.sql +++ b/resource/sqlupgrade/ST/sql202411190103.sql @@ -32,39 +32,3 @@ CREATE TABLE hrsa_push_setting_item ); / -CREATE TABLE hrsa_push_record -( - id NUMBER(38,0) NOT NULL, - name varchar2(200), - setting_id NUMBER(38,0), - mode_id number, - table_name varchar2(100), - acct_record_id NUMBER(38,0), - type number, - status number, - start_time date, - end_time date, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - -CREATE TABLE hrsa_push_record_detail -( - id NUMBER(38,0) NOT NULL, - record_id NUMBER(38,0), - acct_emp_id NUMBER(38,0), - formula CLOB, - execute_time date, - status number, - creator NUMBER(38,0), - create_time date, - update_time date, - delete_type number, - tenant_key varchar2(10) -); -/ - diff --git a/resource/sqlupgrade/ST/sql202504020203.sql b/resource/sqlupgrade/ST/sql202504020203.sql index d54eff0ca..fb88e05b0 100644 --- a/resource/sqlupgrade/ST/sql202504020203.sql +++ b/resource/sqlupgrade/ST/sql202504020203.sql @@ -1,3 +1,39 @@ +CREATE TABLE hrsa_push_record +( + id NUMBER(38,0) NOT NULL, + name varchar2(200), + setting_id NUMBER(38,0), + mode_id number, + table_name varchar2(100), + acct_record_id NUMBER(38,0), + type number, + status number, + start_time date, + end_time date, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + +CREATE TABLE hrsa_push_record_detail +( + id NUMBER(38,0) NOT NULL, + record_id NUMBER(38,0), + acct_emp_id NUMBER(38,0), + formula CLOB, + execute_time date, + status number, + creator NUMBER(38,0), + create_time date, + update_time date, + delete_type number, + tenant_key varchar2(10) +); +/ + ALTER TABLE hrsa_push_record ADD fail_reason varchar2(4000); / diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java index 72191b404..539285926 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java @@ -147,6 +147,12 @@ public class EmployeeDeclareRefresh { employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); } + + //二开,过滤起始发薪日期>=当前税款所属期的 + Date payStartDate = salaryArchive.getPayStartDate(); + if (!payStartDate.before(dto.getTaxCycle())) { + continue; + } } employeeIds.add(employeeDeclare.getEmployeeId()); result.getNewEmployeeDeclares().add(employeeDeclare); diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java index d5155f0ae..d5399daab 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryacct.bo; +import cn.hutool.core.util.StrUtil; import com.engine.salary.constant.TaxDeclarationDataIndexConstant; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -73,6 +74,9 @@ public class SalaryAcctConsolidatedTaxBO { .filter(e -> Objects.equals(e.getSalaryItemId(), optional.get())) .map(e -> SalaryEntityUtil.empty2Zero(e.getResultValue())) .reduce(BigDecimal.ZERO, BigDecimal::add); + if (StrUtil.isBlank(resultValue)) { + resultValue = "0.00"; + } return new BigDecimal(resultValue).add(income).toPlainString(); } // 个税调差为0 @@ -98,6 +102,9 @@ public class SalaryAcctConsolidatedTaxBO { .map(e -> SalaryEntityUtil.empty2Zero(e.getResultValue())) .reduce(BigDecimal.ZERO, BigDecimal::add); } + if (StrUtil.isBlank(resultValue)) { + resultValue = "0.00"; + } return new BigDecimal(resultValue).add(refundedOrSupplementedTax).subtract(taxAdjustment).toPlainString(); } return resultValue; diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java index 52c3b7f13..d07b79a6b 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java @@ -20,7 +20,7 @@ import java.util.Collection; @Builder @NoArgsConstructor @AllArgsConstructor -public class SalaryAcctCalculateParam { +public class SalaryAcctCalculateParam { //核算人员的id,不是employeeId而是salaryAcctEmpId private Collection ids; diff --git a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationListDTO.java b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationListDTO.java index 5104871b5..94e015dd6 100644 --- a/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationListDTO.java +++ b/src/com/engine/salary/entity/taxdeclaration/dto/TaxDeclarationListDTO.java @@ -38,6 +38,10 @@ public class TaxDeclarationListDTO { @TableTitle(title = "薪资类型", dataIndex = "incomeCategory", key = "incomeCategory") private String incomeCategory; + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") + @TableTitle(title = "税款所属期", dataIndex = "taxCycle", key = "taxCycle") + private Date taxCycle; + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") @TableTitle(title = "薪资所属月", dataIndex = "salaryMonth", key = "salaryMonth") private Date salaryMonth; @@ -48,10 +52,6 @@ public class TaxDeclarationListDTO { @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") private String taxAgentName; - @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") - @TableTitle(title = "税款所属期", dataIndex = "taxCycle", key = "taxCycle") - private Date taxCycle; - //@TableTitle(title = "操作人id", dataIndex = "operateEmployeeId", key = "operateEmployeeId") private Long operateEmployeeId; diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationListQueryParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationListQueryParam.java index 83f65672c..a7de714a9 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationListQueryParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationListQueryParam.java @@ -7,6 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; + import java.util.Date; /** diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclarationPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclarationPO.java index 6cf891cb3..85946e041 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclarationPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclarationPO.java @@ -110,6 +110,11 @@ public class TaxDeclarationPO { LocalDateRange taxMonths; + //"开始日期 + private Date taxCycleFromDate; + + //结束日期 + private Date taxCycleEndDate; private Collection taxAgentIds; private Set opts; diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 83892cf9a..504e7d3d7 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -711,7 +711,7 @@ public enum IncomeCategoryEnum implements BaseEnum { } List rysbsblb = feedbackResponse.getBody().getRysbsblb(); if (CollectionUtil.isNotEmpty(rysbsblb)) { - String err = rysbsblb.stream().map(GetASynIndividualIncomeTaxFeedbackResponse.Body.rysbsb::getSbyy).collect(Collectors.joining(";")); + String err = rysbsblb.stream().map(sb -> Util.null2String(sb.getXm()) + Util.null2String(sb.getSbyy())).collect(Collectors.joining(";")); throw new OnlineCalculateTaxException(err); } } diff --git a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml index 3b84589f3..3b12becbf 100644 --- a/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml +++ b/src/com/engine/salary/mapper/taxdeclaration/TaxDeclarationMapper.xml @@ -69,6 +69,12 @@ AND tax_cycle #{taxMonths.endDate} + + AND tax_cycle = ]]> #{taxCycleFromDate} + + + AND tax_cycle #{taxCycleEndDate} + AND tax_agent_id IN diff --git a/src/com/engine/salary/service/impl/PushServiceImpl.java b/src/com/engine/salary/service/impl/PushServiceImpl.java index 3dbfbf061..a96a34c1e 100644 --- a/src/com/engine/salary/service/impl/PushServiceImpl.java +++ b/src/com/engine/salary/service/impl/PushServiceImpl.java @@ -121,16 +121,16 @@ public class PushServiceImpl extends Service implements PushService { Map sobPOMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getId); List list = pushSettingPOS.stream() - .filter(po -> StrUtil.isBlank(param.getName()) || po.getName().contains(param.getName())).map( - po -> PushSettingDTO.builder() - .id(po.getId()) - .name(po.getName()) - .tableName(po.getTableName()) - .modeName(po.getModeName()) - .modeId(po.getModeId()) - .able(po.getAble()) - .salarySobs(po.getSalarySobIds().stream().map(sobPOMap::get).collect(Collectors.toList())) - .build()).collect(Collectors.toList()); + .filter(po -> StrUtil.isBlank(param.getName()) || po.getName().contains(param.getName())) + .map(po -> PushSettingDTO.builder() + .id(po.getId()) + .name(po.getName()) + .tableName(po.getTableName()) + .modeName(po.getModeName()) + .modeId(po.getModeId()) + .able(po.getAble()) + .salarySobs(po.getSalarySobIds().stream().map(sobPOMap::get).collect(Collectors.toList())) + .build()).collect(Collectors.toList()); return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), list, PushSettingDTO.class); } @@ -541,8 +541,9 @@ public class PushServiceImpl extends Service implements PushService { @Override public PageInfo recordList(RecordListQueryParam param) { List pushRecordPOS = getPushRecordMapper().listAll(); - List listDTOS = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pushRecordPOS) + List listDTOS = pushRecordPOS .stream() + .filter(po -> StrUtil.isBlank(param.getName()) || po.getName().contains(param.getName())) .map(po -> PushRecordDTO.builder() .id(po.getId()) .name(po.getName()) @@ -559,7 +560,6 @@ public class PushServiceImpl extends Service implements PushService { .collect(Collectors.toList()); PageInfo pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PushRecordDTO.class); - pageInfo.setTotal(pushRecordPOS.size()); return pageInfo; } diff --git a/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java index 79f3ee877..39d4116b7 100644 --- a/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAComparisonResultServiceImpl.java @@ -172,7 +172,8 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() .filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization()) - && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) + && !f.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue()) + ) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); accountExportPOS = accountExportPOS.stream().filter(v -> canAccountIds.contains(v.getEmployeeId())).collect(Collectors.toList()); diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 8be2801da..b485b65ba 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -3,24 +3,37 @@ 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.kq.service.KQGroupService; +import com.engine.kq.service.impl.KQGroupServiceImpl; import com.engine.salary.biz.SalarySobBiz; import com.engine.salary.biz.SalarySobItemBiz; import com.engine.salary.biz.SalarySobItemGroupBiz; import com.engine.salary.biz.SalarySobItemHideBiz; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.AddUpDeduction; +import com.engine.salary.entity.datacollection.AddUpSituation; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.datacollection.dto.AttendQuoteDataDTO; +import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.datacollection.po.OtherDeductionPO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.salaryacct.bo.CalculateFormulaVarBO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; -import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salaryformula.ExpressFormula; -import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryformula.config.FormluaConfig; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO; +import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; @@ -30,14 +43,15 @@ import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; import com.engine.salary.enums.salaryformula.SalarySQLReferenceEnum; -import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobDefaultItemMapper; import com.engine.salary.mapper.salarysob.SalarySobEmpFieldMapper; import com.engine.salary.mapper.salarysob.SalarySobItemMapper; import com.engine.salary.service.*; +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; @@ -46,11 +60,13 @@ import com.engine.salary.util.valid.ValidUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.general.BaseBean; import weaver.hrm.User; +import java.time.Month; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -121,6 +137,65 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe } // private LoggerTemplate salarySobLoggerTemplate; + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SIAccountService getSIAccountService(User user) { + return ServiceUtil.getService(SIAccountServiceImpl.class, user); + } + + private AttendQuoteFieldService getAttendQuoteFieldService(User user) { + return ServiceUtil.getService(AttendQuoteFieldServiceImpl.class, user); + } + + private VariableItemService getVariableItemService(User user) { + return ServiceUtil.getService(VariableItemServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private AddUpSituationService getAddUpSituationService(User user) { + return ServiceUtil.getService(AddUpSituationServiceImpl.class, user); + } + + private AddUpDeductionService getAddUpDeductionService(User user) { + return ServiceUtil.getService(AddUpDeductionServiceImpl.class, user); + } + + private OtherDeductionService getOtherDeductionService(User user) { + return ServiceUtil.getService(OtherDeductionServiceImpl.class, user); + } + + private AttendQuoteDataService getAttendQuoteDataService(User user) { + return ServiceUtil.getService(AttendQuoteDataServiceImpl.class, user); + } + + private VariableArchiveService getVariableArchiveService(User user) { + return ServiceUtil.getService(VariableArchiveServiceImpl.class, user); + } + + private KQGroupService getKQGroupService() { + User user = new User(); + user.setUid(1); + user.setLoginid("sysadmin"); + return (KQGroupService) ServiceUtil.getService(KQGroupServiceImpl.class, user); + } + @Override public List list() { return salarySobItemMapper.listAll(); @@ -623,7 +698,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe } salarySobItemPO.setFormula(formulaPO); } - if(SalaryEntityUtil.isNotNullOrEmpty(salarySobItemPO.getSalaryItemId())){ + if (SalaryEntityUtil.isNotNullOrEmpty(salarySobItemPO.getSalaryItemId())) { SalaryItemPO salaryItemPO = itemIdMap.get(salarySobItemPO.getSalaryItemId()); salarySobItemPO.setSalaryItem(salaryItemPO); } @@ -671,7 +746,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe salarySobItemFormDTO .setId(salarySobItemPO.getId()) .setName(salaryItemPO.getName()) - .setItemHide(salarySobItemPO.getItemHide()==null?0:Integer.parseInt(salarySobItemPO.getItemHide().toString())) + .setItemHide(salarySobItemPO.getItemHide() == null ? 0 : Integer.parseInt(salarySobItemPO.getItemHide().toString())) .setDataType(salaryItemPO.getDataType()) .setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()) .setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()) @@ -720,7 +795,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe salaryItemTopologyDTO.setSalaryItemId(salaryItemPO.getId()); salaryItemTopologyDTO.setSalaryItemName(salaryItemPO.getName()); salaryItemTopologyDTO.setFormula(expressFormula); - salaryItemTopologyDTO.setResult(topologyData.getResultItemMap().getOrDefault(salaryItemPO.getId(), "")); + salaryItemTopologyDTO.setResult(topologyData.getResultItemMap().getOrDefault(SalaryFormulaReferenceEnum.SALARY_ITEM.getValue() + "_" + salaryItemPO.getCode(), "")); topology(salaryItemTopologyDTO, topologyData); @@ -761,7 +836,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe for (int i = 0; i < parameters.size(); i++) { FormulaVar formulaVar = parameters.get(i); String source = formulaVar.getSource(); - String fieldId = formulaVar.getFieldId().replace(source + "_", ""); + String fieldId = formulaVar.getFieldId(); + String code = fieldId.replace(source + "_", ""); String name = formulaVar.getName(); String fieldName = formulaVar.getFieldName(); //是否是薪资项目 @@ -779,26 +855,26 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe } ExpressFormula expressFormula; - if (salarySobItemCodeMap.containsKey(fieldId)) { + if (salarySobItemCodeMap.containsKey(code)) { // 如果薪资账套下重新定义了薪资项目的公式,则使用薪资账套下的公式,否则使用薪资项目本身的公式 - expressFormula = expressFormulaIdMap.get(salarySobItemCodeMap.get(fieldId).getFormulaId()); - } else if (salaryItemCodeMap.containsKey(fieldId)) { - expressFormula = expressFormulaIdMap.get(salaryItemCodeMap.get(fieldId).getFormulaId()); + expressFormula = expressFormulaIdMap.get(salarySobItemCodeMap.get(code).getFormulaId()); + } else if (salaryItemCodeMap.containsKey(code)) { + expressFormula = expressFormulaIdMap.get(salaryItemCodeMap.get(code).getFormulaId()); } else { expressFormula = null; } - SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(fieldId) : new SalaryItemPO(); + SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(code) : new SalaryItemPO(); SalaryItemTopologyDTO salaryItemTopologyChild = new SalaryItemTopologyDTO(); salaryItemTopologyChild.setSalaryItemId(isSalaryItemVar ? salaryItemChild.getId() : null); salaryItemTopologyChild.setSalaryItemName(isSalaryItemVar ? salaryItemChild.getName() : fieldName); salaryItemTopologyChild.setFormula(expressFormula); - salaryItemTopologyChild.setResult(isSalaryItemVar ? topologyData.getResultItemMap().getOrDefault(salaryItemChild.getId(), "") : ""); + salaryItemTopologyChild.setResult(topologyData.getResultItemMap().getOrDefault(fieldId, "")); salaryItemTopologyDTOChildren.add(salaryItemTopologyChild); if (isSalaryItemVar) { - SalaryItemPO salaryItemChildChild = salaryItemCodeMap.get(fieldId); + SalaryItemPO salaryItemChildChild = salaryItemCodeMap.get(code); SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(salaryItemChildChild.getValueType()); if (salaryValueTypeEnum != SalaryValueTypeEnum.INPUT) { topologyData.setSalaryItemId(salaryItemChildChild.getId()); @@ -843,9 +919,116 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe //薪资结果 Long acctEmpId = param.getAcctEmpId(); if (acctEmpId != null) { - List results = getSalaryAcctResultService(user).listBySalaryAcctEmployeeId(acctEmpId); - Map resultItemMap = SalaryEntityUtil.convert2Map(results, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); - topologyData.setResultItemMap(resultItemMap); + SalaryAcctEmployeePO acctEmployeePO = getSalaryAcctEmployeeService(user).getById(acctEmpId); + List acctEmployeePOS = new ArrayList<>(); + acctEmployeePOS.add(acctEmployeePO); + + Long salaryAcctRecordId = acctEmployeePO.getSalaryAcctRecordId(); + + // 1、查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + //查询对应账套 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除")); + } + + // 不是查询薪资账套下实时的薪资项目,而是查询发起薪资核算时存储的薪资项目快照 + SalaryAcctConfig salaryAcctSobConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordId); + + // 2、查询薪资核算记录的薪资周期、考勤周期等 + SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctRecordId); + // 3、查询薪资核算记录所用薪资账套的薪资项目副本 + List salarySobItemPOS = salaryAcctSobConfig.getSalarySobItems(); + // 回算薪资项目 + List salarySobBackItems = Collections.emptyList(); + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { + salarySobBackItems = salaryAcctSobConfig.getSalarySobBackItems(); + } + // 4、查询当前租户的所有薪资项目 + List salaryItemPOS = getSalaryItemService(user).listAll(); + // 6、查询社保福利的所有字段 + Map welfareColumns = getSIAccountService(user).welfareColumns(); + // 7、查询考勤引用的所有字段 + List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); + List variableItemPOS = getVariableItemService(user).listAll(); + + // 8、查询公式详情 + Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); + formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); + formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getFormulaId)); + List formulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 本次运算的回算薪资项目所涉及的变量 +// Set issuedFieldIds = getIssuedFieldIds(salarySobBackItems); + + // 10、根据id查询其他合并计税的薪资核算记录 + List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId()); + + // 12.3、生成本次运算的key + String calculateKey = UUID.randomUUID().toString(); + // 12.5、多线程运算,运算结果存放在临时表中 + SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() + .setSalaryAcctRecordPO(salaryAcctRecordPO) + .setSalarySobPO(salarySobPO) + .setSalarySobCycleDTO(salarySobCycleDTO) + .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) + .setSalarySobItemPOS(salarySobItemPOS) + .setSalaryItemIdWithPriorityList(new ArrayList<>()) + .setExpressFormulas(formulas) + .setSalaryItemPOS(salaryItemPOS) + .setSalarySobAdjustRulePOS(new ArrayList<>()) + .setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)) + .setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS) + .setSalaryAcctEmployeePOS(acctEmployeePOS) + .setIssuedFieldIds(new HashSet<>()) + .setResults(null) + .setCalculateKey(calculateKey) + .setVariableItems(variableItemPOS) + .setTaxDeclarationFunction(null) + .setTaxIds(null); + + + List employeeIds = Collections.singletonList(acctEmployeePO.getEmployeeId()); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); + List taxAgentIds = salaryAcctCalculateBO.getSalarySobPO().getTaxAgentIds(); + List salaryArchiveData = getSalaryArchiveService(user).getSalaryArchiveData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentIds); + List addUpSituationPOS; + if (salarySobCycleDTO.getTaxCycle().getMonth() == Month.JANUARY) { + // 3.1、如果当前税款所属期是本年度第一个税款所属期,就不需要查询往期累计情况 + addUpSituationPOS = Collections.emptyList(); + } else { + addUpSituationPOS = getAddUpSituationService(user).getAddUpSituationList(salarySobCycleDTO.getTaxCycle().plusMonths(-1), employeeIds); + } + List addUpDeductionPOS = getAddUpDeductionService(user).getAddUpDeductionList(salarySobCycleDTO.getTaxCycle(), employeeIds, taxAgentIds); + List otherDeductionPOS = getOtherDeductionService(user).getOtherDeductionList(salarySobCycleDTO.getTaxCycle(), employeeIds, taxAgentIds); + List> welfareData = new ArrayList<>(); + taxAgentIds.forEach(id -> { + welfareData.addAll(getSIAccountService(user).welfareData(salarySobCycleDTO.getSocialSecurityCycle().toString(), employeeIds, id)); + }); + List attendQuoteDataDTOS = getAttendQuoteDataService(user).getAttendQuoteData(salarySobCycleDTO.getSalaryMonth(), salarySobCycleDTO.getSalarySobId(), employeeIds); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList()); + List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + List> variableArchiveList = getVariableArchiveService(user).listBySalaryMonthAndEmployeeIds(salarySobCycleDTO.getSalaryMonth(), employeeIds, taxAgentIds); + Map> collect = salaryAcctResultPOS.stream().collect(Collectors.groupingBy(k -> k.getEmployeeId() + "-" + k.getTaxAgentId() + "-" + k.getSalaryItemId())); + Map salaryAcctResultPOMap = new HashMap<>(); + for (Map.Entry> et : collect.entrySet()) { + salaryAcctResultPOMap.put(et.getKey(), et.getValue().get(0).getOriginResultValue()); + } + List lastMonthResultPOS = getSalaryAcctResultService(user).listBySobSalaryMonth(SalaryDateUtil.toDate(salarySobCycleDTO.getSalaryMonth().minusMonths(1), 1), salaryAcctCalculateBO.getSalarySobPO().getId(), employeeIds); + CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, salaryArchiveData, addUpSituationPOS, addUpDeductionPOS, otherDeductionPOS, welfareData, attendQuoteDataDTOS, salaryAcctResultPOS, variableArchiveList, lastMonthResultPOS); + KQGroupService kqGroupService = getKQGroupService(); + Map> formulaVarMap = calculateFormulaVarBO.convert2FormulaVar(salaryAcctCalculateBO, kqGroupService, null); + + Map resultMap = new HashMap<>(); + formulaVarMap.entrySet().forEach(e -> { + e.getValue().forEach(f -> { + resultMap.put(f.getFieldId(), f.getFieldValue()); + }); + }); + topologyData.setResultItemMap(resultMap); } else { topologyData.setResultItemMap(new HashMap<>()); } @@ -879,7 +1062,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe /** * 核算结果 */ - Map resultItemMap; + Map resultItemMap; } diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 1fa88b14d..072c68985 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -687,29 +687,15 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { return taxAgentManageRangeEmployeeList; } - List taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - if (employeeStatus != null) { - List personnelStatusList; - // 查询人员状态 -// if (employeeStatus.equals(SalaryEmployeeStatusEnum.NORMAL)) { -// allEmployees = allEmployees.stream().filter(f -> UserStatusEnum.getNormalStatus().contains(f.getStatus())).collect(Collectors.toList()); -// } else if (employeeStatus.equals(SalaryEmployeeStatusEnum.UNAVAILABLE)) { -// allEmployees = allEmployees.stream().filter(f -> UserStatusEnum.getUnavailableStatus().contains(f.getStatus())).collect(Collectors.toList()); -// } - } + TaxAgentQueryParam param = TaxAgentQueryParam.builder().build(); + param.setFilterType(AuthFilterTypeEnum.QUERY_DATA); + List taxAgentList = listAuth(param); + List taxAgentIds = SalaryEntityUtil.properties(taxAgentList, TaxAgentPO::getId, Collectors.toList()); - // 是否开启分权 - if (!isOpenDevolution() || isChief(employeeId)) { - return getTaxAgentEmp(allTaxAgents, taxAgentIds); - } - // 1.判断自己是否是管理员, 如果是管理员,就是能够操作所属个税扣缴义务人下的所有人的数据 - List taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIdsAndEmployeeId(taxAgentIds, (long) user.getUID()); - // 是管理员的列表 - List adminTaxAgentIds = taxAgentAdminList.stream().map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList()); - - if (CollectionUtils.isNotEmpty(adminTaxAgentIds)) { - taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds)); + if (CollectionUtils.isNotEmpty(taxAgentIds)) { + List taxAgentEmp = getTaxAgentEmp(allTaxAgents, taxAgentIds); + taxAgentManageRangeEmployeeList.addAll(taxAgentEmp); } return taxAgentManageRangeEmployeeList; diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index dd5755d7c..55f6e6a1b 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.StrUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -157,20 +158,24 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration public PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam) { // 分页参数 TaxDeclarationPO po = TaxDeclarationPO.builder().build(); - LocalDateRange localDateRange = new LocalDateRange(); if (Objects.nonNull(queryParam.getFromSalaryMonth())) { - localDateRange.setFromDate(queryParam.getFromSalaryMonth()); + po.setTaxCycleFromDate(queryParam.getFromSalaryMonth()); } if (Objects.nonNull(queryParam.getEndSalaryMonth())) { - localDateRange.setEndDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.localDate2YearMonth(queryParam.getEndSalaryMonth()).atEndOfMonth())); + po.setTaxCycleEndDate(queryParam.getEndSalaryMonth()); } - po.setSalaryMonths(localDateRange); // 查询个税申报表 List taxDeclarationPOS = getTaxDeclarationMapper().listSome(po); - taxDeclarationPOS = getAuthService(user).auth(taxDeclarationPOS, AuthFilterTypeEnum.DATA_OPT, TaxDeclarationPO.class); + if (StrUtil.isNotBlank(queryParam.getTaxAgentName())) { + List taxAgentPOs = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(queryParam.getTaxAgentName()).build()); + Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOs, TaxAgentPO::getId); + taxDeclarationPOS = taxDeclarationPOS.stream().filter(tax -> taxAgentIds.contains(tax.getTaxAgentId())).collect(Collectors.toList()); + } + + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), taxDeclarationPOS, TaxDeclarationPO.class); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index af3d81c1c..51d0b2949 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -1,5 +1,7 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -23,6 +25,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobAddUpRulePO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; import com.engine.salary.entity.taxagent.bo.TaxAgentTaxReturnBO; +import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO; @@ -52,6 +55,8 @@ import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; 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.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; @@ -179,6 +184,10 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe return ServiceUtil.getService(OtherDeductionServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + private TaxPaymentServiceFactory taxPaymentServiceFactory = new TaxPaymentServiceFactory(user); @@ -250,6 +259,13 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } List taxDeclareRecordPOS = getTaxDeclareRecordMapper().listSome(build); + + if (StrUtil.isNotBlank(queryParam.getTaxAgentName())) { + List taxAgentPOs = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(queryParam.getTaxAgentName()).build()); + Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOs, TaxAgentPO::getId); + taxDeclareRecordPOS = taxDeclareRecordPOS.stream().filter(tax -> taxAgentIds.contains(tax.getTaxAgentId())).collect(Collectors.toList()); + } + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), taxDeclareRecordPOS, TaxDeclareRecordPO.class); } @@ -274,12 +290,19 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe salaryAcctTaxAgents = salaryAcctTaxAgents.stream().filter(e -> taxAgentIds.contains(e.getTaxAgentId())).collect(Collectors.toList()); List salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getSalaryAcctRecordId, Collectors.toList()); salaryAcctRecords = salaryAcctRecords.stream().filter(e -> salaryAcctRecordIds.contains(e.getId())).collect(Collectors.toList()); + + //二开,自离账套不参与申报 + String notaxsobids = getSalarySysConfService(user).getValueByCode("notaxsobids"); + List noTaxSobIds = Arrays.stream(notaxsobids.split(",")).map(Long::valueOf).collect(Collectors.toList()); + salaryAcctRecords = salaryAcctRecords.stream().filter(e -> !noTaxSobIds.contains(e.getSalarySobId())).collect(Collectors.toList()); + + List finalSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId, Collectors.toList()); // 校验是否可以生成个税申报表 // 返回目前已经生成的个税申报表 List taxDeclareRecords = checkBeforeSave(saveParam, taxAgentNameMap, salaryAcctRecords, salaryAcctTaxAgents); Map taxDeclareRecordMap = SalaryEntityUtil.convert2Map(taxDeclareRecords, e -> e.getTaxCycle() + "-" + e.getTaxAgentId()); // 查询薪资核算人员 - List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByRecordIdsAndEmpIdAndTaxAgentId(salaryAcctRecordIds, null, taxAgents.stream().findFirst().orElse(new TaxAgentPO()).getId()); + List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByRecordIdsAndEmpIdAndTaxAgentId(finalSalaryAcctRecordIds, null, taxAgents.stream().findFirst().orElse(new TaxAgentPO()).getId()); // 薪资核算人员按照税款所属期聚合分类 Map> taxCycleKeyEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getTaxCycle); for (Map.Entry> taxCycleEntry : taxCycleKeyEmployeeMap.entrySet()) { @@ -369,6 +392,12 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe .taxCycle(taxDeclareRecord.getTaxCycle()) .build(); List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByTaxCycleAndTaxAgentId(salaryAcctEmployeeQueryParam); + + //二开,自离账套不参与申报 + String notaxsobids = getSalarySysConfService(user).getValueByCode("notaxsobids"); + List noTaxSobIds = Arrays.stream(notaxsobids.split(",")).map(Long::valueOf).collect(Collectors.toList()); + salaryAcctEmployees = salaryAcctEmployees.stream().filter(e -> !noTaxSobIds.contains(e.getSalarySobId())).collect(Collectors.toList()); + // 查询薪资核算记录 Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getSalaryAcctRecordId); List salaryAcctRecords = getSalaryAcctRecordService(user).listByIds(salaryAcctRecordIds); @@ -908,7 +937,8 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); // 申报类型 declareStatus.setTaxPayAmount(Util.null2String(declareTaxFeedbackResponse.getBody().get("ykjse"))); - declareStatus.setPersonNum(Integer.parseInt(Optional.ofNullable(declareTaxFeedbackResponse.getBody().get("nsrc")).orElse("0").toString())); + String nsrc = Util.null2String(declareTaxFeedbackResponse.getBody().get("nsrc")); + declareStatus.setPersonNum(Integer.parseInt(NumberUtil.isNumber(nsrc) ? nsrc : "0")); declareStatus.setDeclareRequestId(declareStatus.getRequestId()); declareStatus.setRequestId(""); //实缴(不含滞纳金) diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 07de26c60..2131c6f38 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -136,7 +136,7 @@ public class ExcelUtilPlus { for (int i = 0; i < header.size(); i++) { WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) header.get(i); XSSFCell rowZeroCell = row0.createCell(i, CellType.STRING); - rowZeroCell.setCellValue(columnGroupItem.getText().toString()); + rowZeroCell.setCellValue(columnGroupItem.getText()); rowZeroCell.setCellStyle(titleCellStyle); //设置列宽 sheet.setColumnWidth(i, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256); diff --git a/src/com/engine/salary/util/valid/ValidUtil.java b/src/com/engine/salary/util/valid/ValidUtil.java index 906718077..bcdec10d6 100644 --- a/src/com/engine/salary/util/valid/ValidUtil.java +++ b/src/com/engine/salary/util/valid/ValidUtil.java @@ -250,7 +250,9 @@ public class ValidUtil { .replace("between", "between") .replace("BETWEEN", "BETWEEN") .replace("union", "union") - .replace("UNION", "UNION"); + .replace("UNION", "UNION") + .replace("substr", "substr") + .replace("SUBSTR", "SUBSTR"); } setValue(t, field.getName(), result); } else if (valueTypeEnum == ValueTypeEnum.OBJECT) { diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index ef45368c9..e5a5ecb84 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -72,7 +72,7 @@ public class TaxDeclarationController { @POST @Path("/list") @Produces(MediaType.APPLICATION_JSON) - public String listTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationListQueryParam queryParam) { + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationListQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::listPage, queryParam); } diff --git a/src/com/engine/salary/wrapper/SalarySobRangeWrapper.java b/src/com/engine/salary/wrapper/SalarySobRangeWrapper.java index 1ae272efc..b308f7b82 100644 --- a/src/com/engine/salary/wrapper/SalarySobRangeWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobRangeWrapper.java @@ -97,7 +97,10 @@ public class SalarySobRangeWrapper extends Service { .replace("between", "between") .replace("BETWEEN", "BETWEEN") .replace("union", "union") - .replace("UNION", "UNION")); + .replace("UNION", "UNION") + .replace("substr", "substr") + .replace("SUBSTR", "SUBSTR") + ); } }); @@ -127,7 +130,10 @@ public class SalarySobRangeWrapper extends Service { .replace("between", "between") .replace("BETWEEN", "BETWEEN") .replace("union", "union") - .replace("UNION", "UNION")); + .replace("UNION", "UNION") + .replace("substr", "substr") + .replace("SUBSTR", "SUBSTR") + ); } }); diff --git a/src/com/engine/salary/wrapper/TaxAgentWrapper.java b/src/com/engine/salary/wrapper/TaxAgentWrapper.java index 2ea504ee9..8be11eef3 100644 --- a/src/com/engine/salary/wrapper/TaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentWrapper.java @@ -352,7 +352,10 @@ public class TaxAgentWrapper extends Service { .replace("between", "between") .replace("BETWEEN", "BETWEEN") .replace("union", "union") - .replace("UNION", "UNION")); + .replace("UNION", "UNION") + .replace("substr", "substr") + .replace("SUBSTR", "SUBSTR") + ); } }); @@ -386,7 +389,10 @@ public class TaxAgentWrapper extends Service { .replace("between", "between") .replace("BETWEEN", "BETWEEN") .replace("union", "union") - .replace("UNION", "UNION")); + .replace("UNION", "UNION") + .replace("substr", "substr") + .replace("SUBSTR", "SUBSTR") + ); } });