diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar index 7589cfeae..ba4091f61 100644 Binary files a/resource/WEB-INF/lib/hrmelog.jar and b/resource/WEB-INF/lib/hrmelog.jar differ diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index c558fd72d..5aa04d438 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.04 +version=3.0.6.2510.01.ts openFormulaForcedEditing=false \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql2025010801039TEST.sql b/resource/sqlupgrade/DM/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/DM/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/DM/sql202507110103.sql b/resource/sqlupgrade/DM/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/sqlupgrade/GS/sql2025010801039TEST.sql b/resource/sqlupgrade/GS/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/GS/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/GS/sql202507110103.sql b/resource/sqlupgrade/GS/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/sqlupgrade/JC/sql2025010801039TEST.sql b/resource/sqlupgrade/JC/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/JC/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/JC/sql202507110103.sql b/resource/sqlupgrade/JC/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/sqlupgrade/Mysql/sql2025010801039TEST.sql b/resource/sqlupgrade/Mysql/sql2025010801039TEST.sql new file mode 100644 index 000000000..655a1452b --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql2025010801039TEST.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_record ADD COLUMN run_status varchar(200) ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202507110103.sql b/resource/sqlupgrade/Mysql/sql202507110103.sql new file mode 100644 index 000000000..ab9b6cb2e --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202507110103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_tax_payment_request ADD COLUMN report_type int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql b/resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql new file mode 100644 index 000000000..6d4a29add --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql @@ -0,0 +1,15 @@ +CREATE TABLE hrsa_employee_declare_opt +( + id bigint(0) NOT NULL, + create_time datetime(0), + update_time datetime(0), + creator bigint(0), + delete_type int(0), + tenant_key varchar(10), + tax_agent_id bigint(0), + status varchar(255), + last_operate_time datetime(0), + last_operate varchar(255), + tax_cycle datetime(0), + PRIMARY KEY (id) USING BTREE +); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql b/resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql new file mode 100644 index 000000000..26a17cd3a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_record ADD COLUMN msg text; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql b/resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql new file mode 100644 index 000000000..225184460 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_bill_batch ADD COLUMN fc int(255) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql2025010801039TEST.sql b/resource/sqlupgrade/Oracle/sql2025010801039TEST.sql new file mode 100644 index 000000000..b5f15e56e --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql2025010801039TEST.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202507110103.sql b/resource/sqlupgrade/Oracle/sql202507110103.sql new file mode 100644 index 000000000..40452d2a6 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202507110103.sql @@ -0,0 +1,2 @@ +alter table hrsa_tax_payment_request add report_type number(11) null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql2025010801039TEST.sql b/resource/sqlupgrade/PG/sql2025010801039TEST.sql new file mode 100644 index 000000000..7870635b2 --- /dev/null +++ b/resource/sqlupgrade/PG/sql2025010801039TEST.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_record ADD COLUMN run_status varchar(200) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202501150103.sql b/resource/sqlupgrade/PG/sql202501150103.sql index d62aea72f..3841048c5 100644 --- a/resource/sqlupgrade/PG/sql202501150103.sql +++ b/resource/sqlupgrade/PG/sql202501150103.sql @@ -1,41 +1,42 @@ -CREATE TABLE hrsa_hrm_snapshot ( - ID bigint(0) NOT NULL, +CREATE TABLE hrsa_hrm_snapshot +( + ID bigint NOT NULL, snapshot_time timestamp, - employee_id bigint(0), + employee_id bigint, loginid varchar(100), LASTNAME varchar(60), SEX char(1), BIRTHDAY char(10) , - NATIONALITY int(0) , + NATIONALITY int , MARITALSTATUS char(1) , TELEPHONE varchar(60), MOBILE varchar(60) , MOBILECALL varchar(60) , EMAIL varchar(60), - LOCATIONID int(0), + LOCATIONID int, WORKROOM varchar(60), HOMEADDRESS varchar(100), RESOURCETYPE char(1) , STARTDATE char(10) , ENDDATE char(10), - JOBTITLE int(0) , + JOBTITLE int , JOBTITLENAME varchar(200) , JOBACTIVITYDESC varchar(200), - JOBLEVEL int(0) , - SECLEVEL int(0) , - DEPARTMENTID int(0) , + JOBLEVEL int , + SECLEVEL int , + DEPARTMENTID int , DEPARTMENTNAME varchar(200) , - SUBCOMPANYID1 int(0) , + SUBCOMPANYID1 int , SUBCOMPANYNAME varchar(200) , - COSTCENTERID int(0) , - MANAGERID int(0) , - ASSISTANTID int(0), - BANKID1 int(0) , + COSTCENTERID int , + MANAGERID int , + ASSISTANTID int, + BANKID1 int , ACCOUNTID1 varchar(100) , LASTLOGINDATE char(10) , CERTIFICATENUM varchar(60) , NATIVEPLACE varchar(100) , - EDUCATIONLEVEL int(0) , + EDUCATIONLEVEL int , BEMEMBERDATE char(10) , BEPARTYDATE char(10) , WORKCODE varchar(60) , @@ -44,8 +45,8 @@ CREATE TABLE hrsa_hrm_snapshot ( RESIDENTPLACE varchar(200) , POLICY varchar(30) , DEGREE varchar(30) , - USEKIND int(0) , - JOBCALL int(0) , + USEKIND int , + JOBCALL int , jobcallname varchar(200) , ACCUMFUNDACCOUNT varchar(30), BIRTHPLACE varchar(60) , @@ -54,14 +55,14 @@ CREATE TABLE hrsa_hrm_snapshot ( RESIDENTPOSTCODE varchar(60) , EXTPHONE varchar(50) , MANAGERSTR varchar(500), - STATUS int(0) , + STATUS int , FAX varchar(60) , ISLABOUUNION char(1), TEMPRESIDENTNUMBER varchar(60), PROBATIONENDDATE char(10), - COUNTRYID int(0) , - ACCOUNTTYPE int(0) , - BELONGTO int(0) , + COUNTRYID int , + ACCOUNTTYPE int , + BELONGTO int , ACCOUNTNAME varchar(200) , companystartdate varchar(10), workstartdate varchar(10) , diff --git a/resource/sqlupgrade/PG/sql202507110103.sql b/resource/sqlupgrade/PG/sql202507110103.sql new file mode 100644 index 000000000..b59e15941 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202507110103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_tax_payment_request ADD COLUMN report_type int ; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql b/resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql new file mode 100644 index 000000000..4651f7cd3 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_acct_record ADD run_status varchar(200) NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202507110103.sql b/resource/sqlupgrade/SQLServer/sql202507110103.sql new file mode 100644 index 000000000..19d102aa7 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202507110103.sql @@ -0,0 +1,2 @@ +alter table hrsa_tax_payment_request add report_type int null +go \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql b/resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql new file mode 100644 index 000000000..da411610d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_acct_record ADD msg text +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql b/resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql new file mode 100644 index 000000000..af25ff5f3 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql @@ -0,0 +1,2 @@ +alter table hrsa_bill_batch add fc int +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql2025010801039TEST.sql b/resource/sqlupgrade/ST/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/ST/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/ST/sql202507110103.sql b/resource/sqlupgrade/ST/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties new file mode 100644 index 000000000..e54b05bd6 --- /dev/null +++ b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties @@ -0,0 +1,2 @@ +actualWorkplaceField=field2 +socialManagerRoleId=28 diff --git a/resource/wiki/删除档案.txt b/resource/wiki/删除档案.txt index a3a0c6dbd..a9aab191b 100644 --- a/resource/wiki/删除档案.txt +++ b/resource/wiki/删除档案.txt @@ -18,7 +18,8 @@ update hrsa_salary_archive set delete_type=3 where tax_agent_id=扣缴义务人 二、删除停薪员工档案 -update hrsa_salary_archive set delete_type=3 where run_status in ('STOP_FROM_PENDING','STOP_FROM_SUSPEND') +update hrsa_salary_archive set delete_type=3 where delete_type=0 and run_status in ('STOP_FROM_PENDING','STOP_FROM_SUSPEND') +update hrsa_salary_archive_item set delete_type=3 where delete_type=0 二、删除停薪员工社保档案 update hrsa_insurance_base_info set delete_type=3 where run_status in ('4','5') @@ -28,10 +29,10 @@ update hrsa_insurance_base_info set delete_type=3 where run_status in ('4','5') --删除社保福利档案 -update hrsa_insurance_base_info set delete_type=3 WHERE employee_id = ? and payment_organization =? -update hrsa_social_archives set delete_type=3 WHERE employee_id = ? and payment_organization =? -update hrsa_fund_archives set delete_type=3 WHERE employee_id = ? and payment_organization =? -update hrsa_other_archives set delete_type=3 WHERE employee_id = ? and payment_organization =? +update hrsa_insurance_base_info set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? +update hrsa_social_archives set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? +update hrsa_fund_archives set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? +update hrsa_other_archives set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? -- 删除薪资档案 update hrsa_salary_archive set delete_type=3 where employee_id = ? and tax_agent_id=? @@ -45,4 +46,13 @@ update hrsa_other_archives set delete_type=3; update hrsa_tax_agent_emp set delete_type=3; +-- 删除核算记录 +update hrsa_salary_acct_record set delete_type=3 where delete_type=0 and id= 核算记录id; +update hrsa_salary_acct_emp set delete_type=3 where delete_type=0 and salary_acct_record_id=核算记录id; +update hrsa_salary_acct_result set delete_type=3 where delete_type=0 and salary_acct_record_id = 核算记录id; + +--删除工资单信息 +update hrsa_salary_send set delete_type=3 where delete_type=0 and salary_accounting_id = 核算记录id; +update hrsa_salary_send_info set delete_type=3 where delete_type=0 and salary_acct_record_id = 核算记录id; + diff --git a/resource/wiki/人员生成不了档案.sql b/resource/wiki/常见问题.md similarity index 58% rename from resource/wiki/人员生成不了档案.sql rename to resource/wiki/常见问题.md index 7060a660e..747980c74 100644 --- a/resource/wiki/人员生成不了档案.sql +++ b/resource/wiki/常见问题.md @@ -1,3 +1,5 @@ + +## 薪资档案生成不了 select id from hrsa_tax_agent_emp where tax_agent_id =扣缴义务人id and delete_type = 0 @@ -6,5 +8,14 @@ and employee_id not in where tax_agent_id =扣缴义务人id and delete_type = 0) -update hrsa_tax_agent_emp set delete_type = 3 -where tax_agent_id=扣缴义务人id and delete_type = 0 and employee_id not in (select employee_id from hrsa_salary_archive where tax_agent_id =扣缴义务人id and delete_type = 0) \ No newline at end of file +update hrsa_tax_agent_emp set delete_type = 3 where delete_type = 0 +where tax_agent_id=扣缴义务人id and delete_type = 0 and employee_id not in (select employee_id from hrsa_salary_archive where tax_agent_id =扣缴义务人id and delete_type = 0) + + + +## 考勤引用 +drop sequence HRSA_ATTEND_QUOTE_ID +/ + +drop trigger HRSA_ATTEND_QUOTE_TRI +/ \ No newline at end of file diff --git a/resource/wiki/扩展功能/hrmSalaryQZBB.properties b/resource/wiki/扩展功能/hrmSalaryQZBB.properties new file mode 100644 index 000000000..824bff4e4 --- /dev/null +++ b/resource/wiki/扩展功能/hrmSalaryQZBB.properties @@ -0,0 +1,5 @@ +# ?????? +bcylbx=1731899239050 + +# ???? +dbbx=1731899212789 \ No newline at end of file diff --git a/src/com/engine/salary/action/CheckEditSIArchiveAction.java b/src/com/engine/salary/action/CheckEditSIArchiveAction.java index 2a0bbccb7..ed494aebe 100644 --- a/src/com/engine/salary/action/CheckEditSIArchiveAction.java +++ b/src/com/engine/salary/action/CheckEditSIArchiveAction.java @@ -80,6 +80,8 @@ public class CheckEditSIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, CheckEditSIArchiveAction.SalaryField::getSalaryName, CheckEditSIArchiveAction.SalaryField::getValue)); + log.info("CheckEditSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); + //福利执行状态 String runStatus = list.stream().filter(f -> f.salaryName.equals("档案状态")).findFirst().map(CheckEditSIArchiveAction.SalaryField::getValue).orElse("1"); diff --git a/src/com/engine/salary/action/CheckEditSalaryAction.java b/src/com/engine/salary/action/CheckEditSalaryAction.java index f8c2dcb75..8534d665a 100644 --- a/src/com/engine/salary/action/CheckEditSalaryAction.java +++ b/src/com/engine/salary/action/CheckEditSalaryAction.java @@ -78,6 +78,7 @@ public class CheckEditSalaryAction implements Action { List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); + log.info("CheckEditSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() .importDatas(importData) .build(); diff --git a/src/com/engine/salary/action/CheckInitSalaryAction.java b/src/com/engine/salary/action/CheckInitSalaryAction.java index 157ecab8a..b744167dc 100644 --- a/src/com/engine/salary/action/CheckInitSalaryAction.java +++ b/src/com/engine/salary/action/CheckInitSalaryAction.java @@ -98,7 +98,7 @@ public class CheckInitSalaryAction implements Action { list.add(new SalaryField(processField, salaryName, value)); } Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - + log.info("CheckInitSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪检查异常", e); diff --git a/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java b/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java index 6adfa8299..37ba3b7a0 100644 --- a/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java @@ -89,6 +89,7 @@ public class CheckStayAddToPaySIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStayAddToPaySIArchiveAction.SalaryField::getSalaryName, CheckStayAddToPaySIArchiveAction.SalaryField::getValue); + log.info("CheckStayAddToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java b/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java index ef816fbd8..f467c0bbe 100644 --- a/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java +++ b/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java @@ -88,6 +88,7 @@ public class CheckStayDelToStopSIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStayDelToStopSIArchiveAction.SalaryField::getSalaryName, CheckStayDelToStopSIArchiveAction.SalaryField::getValue); + log.info("CheckStayDelToStopSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/CheckStopSalaryAction.java b/src/com/engine/salary/action/CheckStopSalaryAction.java index 6243e6ed5..da42be210 100644 --- a/src/com/engine/salary/action/CheckStopSalaryAction.java +++ b/src/com/engine/salary/action/CheckStopSalaryAction.java @@ -92,6 +92,7 @@ public class CheckStopSalaryAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStopSalaryAction.SalaryField::getSalaryName, CheckStopSalaryAction.SalaryField::getValue); + log.info("CheckStopSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/CopyToPaySIArchiveAction.java b/src/com/engine/salary/action/CopyToPaySIArchiveAction.java index 8f0421c71..3de1dd620 100644 --- a/src/com/engine/salary/action/CopyToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/CopyToPaySIArchiveAction.java @@ -88,6 +88,7 @@ public class CopyToPaySIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, CopyToPaySIArchiveAction.SalaryField::getSalaryName, CopyToPaySIArchiveAction.SalaryField::getValue)); + log.info("CopyToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //操作人 String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(CopyToPaySIArchiveAction.SalaryField::getValue).orElse("1"); //增员 diff --git a/src/com/engine/salary/action/EditSIArchiveAction.java b/src/com/engine/salary/action/EditSIArchiveAction.java index 4cb6eb505..d29b4eac3 100644 --- a/src/com/engine/salary/action/EditSIArchiveAction.java +++ b/src/com/engine/salary/action/EditSIArchiveAction.java @@ -79,6 +79,7 @@ public class EditSIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, EditSIArchiveAction.SalaryField::getSalaryName, EditSIArchiveAction.SalaryField::getValue)); + log.info("EditSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //福利执行状态 String runStatus = list.stream().filter(f -> f.salaryName.equals("档案状态")).findFirst().map(EditSIArchiveAction.SalaryField::getValue).orElse("1"); diff --git a/src/com/engine/salary/action/EditSalaryAction.java b/src/com/engine/salary/action/EditSalaryAction.java index 3c8dd5446..b4be034b7 100644 --- a/src/com/engine/salary/action/EditSalaryAction.java +++ b/src/com/engine/salary/action/EditSalaryAction.java @@ -77,7 +77,7 @@ public class EditSalaryAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); - + log.info("EditSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() .importDatas(importData) .build(); diff --git a/src/com/engine/salary/action/EditToPaySIArchiveAction.java b/src/com/engine/salary/action/EditToPaySIArchiveAction.java index 31259e94a..4a68f0111 100644 --- a/src/com/engine/salary/action/EditToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/EditToPaySIArchiveAction.java @@ -97,6 +97,7 @@ public class EditToPaySIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, EditToPaySIArchiveAction.SalaryField::getSalaryName, EditToPaySIArchiveAction.SalaryField::getValue)); + log.info("EditToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //福利执行状态 String runStatus = EmployeeStatusEnum.STAY_ADD.getValue(); diff --git a/src/com/engine/salary/action/EditToStopSIArchiveAction.java b/src/com/engine/salary/action/EditToStopSIArchiveAction.java index 1f2a612fd..599548cef 100644 --- a/src/com/engine/salary/action/EditToStopSIArchiveAction.java +++ b/src/com/engine/salary/action/EditToStopSIArchiveAction.java @@ -97,6 +97,7 @@ public class EditToStopSIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, EditToStopSIArchiveAction.SalaryField::getSalaryName, EditToStopSIArchiveAction.SalaryField::getValue)); + log.info("EditToStopSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //福利执行状态 String runStatus = EmployeeStatusEnum.PAYING.getValue(); diff --git a/src/com/engine/salary/action/InitSalaryAction.java b/src/com/engine/salary/action/InitSalaryAction.java index af3ab875e..3600eb506 100644 --- a/src/com/engine/salary/action/InitSalaryAction.java +++ b/src/com/engine/salary/action/InitSalaryAction.java @@ -100,7 +100,7 @@ public class InitSalaryAction implements Action { } Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - + log.info("InitSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪异常", e); diff --git a/src/com/engine/salary/action/RehireAction.java b/src/com/engine/salary/action/RehireAction.java index f0ac107f3..772d6ae9e 100644 --- a/src/com/engine/salary/action/RehireAction.java +++ b/src/com/engine/salary/action/RehireAction.java @@ -108,6 +108,7 @@ public class RehireAction implements Action { list.add(new SalaryField(processField, salaryName, value)); } Map salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); + log.info("RehireAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), salaryFieldMap); String taxAgentName = salaryFieldMap.getOrDefault("个税扣缴义务人", "").toString(); String empIdStr = salaryFieldMap.getOrDefault("员工id", "").toString(); if (StringUtils.isBlank(taxAgentName) || StringUtils.isBlank(empIdStr)) { diff --git a/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java b/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java index 371bdd8ee..8de687242 100644 --- a/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java @@ -93,6 +93,7 @@ public class StayAddToPaySIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StayAddToPaySIArchiveAction.SalaryField::getSalaryName, StayAddToPaySIArchiveAction.SalaryField::getValue); + log.info("StayAddToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java b/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java index b715b9eea..25ce39614 100644 --- a/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java +++ b/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java @@ -94,6 +94,7 @@ public class StayDelToStopSIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StayDelToStopSIArchiveAction.SalaryField::getSalaryName, StayDelToStopSIArchiveAction.SalaryField::getValue); + log.info("StayDelToStopSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java index 10d4d765a..9d564816b 100644 --- a/src/com/engine/salary/action/StopSalaryAction.java +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -99,6 +99,7 @@ public class StopSalaryAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StopSalaryAction.SalaryField::getSalaryName, StopSalaryAction.SalaryField::getValue); + log.info("StopSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); //操作人 String uid = importDataMap.getOrDefault("操作人","1").toString(); User user = new User(Integer.parseInt(uid)); diff --git a/src/com/engine/salary/action/UpdateSISchemeDetailAction.java b/src/com/engine/salary/action/UpdateSISchemeDetailAction.java index 91c93c377..57a947a02 100644 --- a/src/com/engine/salary/action/UpdateSISchemeDetailAction.java +++ b/src/com/engine/salary/action/UpdateSISchemeDetailAction.java @@ -117,6 +117,7 @@ public class UpdateSISchemeDetailAction implements Action { rs.beforFirst(); // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, UpdateSISchemeDetailAction.SalaryField::getSalaryName, UpdateSISchemeDetailAction.SalaryField::getValue); + log.info("UpdateSISchemeDetailAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); //设置更新对象元素 String schemeId = importDataMap.getOrDefault("福利方案id", "").toString(); String schemeName = importDataMap.getOrDefault("福利方案名称", "").toString(); diff --git a/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java b/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java index 117c6bb56..54fecc40d 100644 --- a/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java +++ b/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java @@ -31,4 +31,6 @@ public class AttendQuoteQueryParam extends BaseQueryParam { //薪资所属月 private List salaryYearMonth; private List salaryYearMonthDate; + + private List taxAgentIds; } diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java index 72191b404..e9749c515 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.employeedeclare.bo; +import cn.hutool.core.date.DateUtil; import com.api.formmode.page.util.Util; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -27,6 +28,7 @@ import java.util.*; public class EmployeeDeclareRefresh { public static Result refresh(EmployeeDeclareRefreshDTO dto, Long employeeId) { + Date taxCycle = dto.getTaxCycle(); Result result = new Result(); // 本月已有的需要报送的人员 Set employeeIds = SalaryEntityUtil.properties(dto.getEmployeeDeclares(), EmployeeDeclarePO::getEmployeeId); @@ -43,10 +45,16 @@ public class EmployeeDeclareRefresh { || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()))) { if (Objects.equals(employeeDeclare.getEmploymentStatus(), EmploymentStatusEnum.ABNORMAL.getValue()) || Objects.equals(Util.null2String(employeeDeclare.getDismissDate()), Util.null2String(salaryArchive.getPayEndDate()))) { - employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); - employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); - employeeDeclare.setNewEmployeeInfo(1); - employeeDeclare.setUpdateTime(now); + Date payEndDate = salaryArchive.getPayEndDate(); + payEndDate = SalaryDateUtil.plusMonths(payEndDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payEndDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payEndDate.before(taxCycle)) { + employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); + employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); + employeeDeclare.setDismissDate(payEndDate); + employeeDeclare.setNewEmployeeInfo(1); + employeeDeclare.setUpdateTime(now); + } result.getEmployeeDeclares().add(employeeDeclare); } } @@ -76,10 +84,15 @@ public class EmployeeDeclareRefresh { SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId()); if (salaryArchive != null && (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()) || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()))) { - employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); - employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); - employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); - employeeDeclare.setNewEmployeeInfo(1); + Date payEndDate = salaryArchive.getPayEndDate(); + payEndDate = SalaryDateUtil.plusMonths(payEndDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payEndDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payEndDate.before(taxCycle)) { + employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); + employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); + employeeDeclare.setDismissDate(payEndDate); + employeeDeclare.setNewEmployeeInfo(1); + } } // if (salaryArchive != null && !Objects.equals(Util.null2String(employeeDeclare.getEmploymentType()), salaryArchive.getEmploymentType())) { // employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); @@ -141,11 +154,25 @@ public class EmployeeDeclareRefresh { SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId()); if (salaryArchive != null) { // employeeDeclare.setEmploymentType(Util.getIntValue(salaryArchive.getEmploymentType())); - employeeDeclare.setEmploymentDate(salaryArchive.getPayStartDate()); + //钱智二开,薪资档案时间作为受雇从业日期以及结束日期,调整为以薪资档案时间往后延一个月作为雇从业日期以、结束日期。 + Date payStartDate = salaryArchive.getPayStartDate(); + payStartDate = SalaryDateUtil.plusMonths(payStartDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payStartDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payStartDate.after(taxCycle)) { + continue; + } + + employeeDeclare.setEmploymentDate(payStartDate); + if (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()) || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { - employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); - employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); + Date payEndDate = salaryArchive.getPayEndDate(); + payEndDate = SalaryDateUtil.plusMonths(payEndDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payEndDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payEndDate.before(taxCycle)) { + employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); + employeeDeclare.setDismissDate(payEndDate); + } } } employeeIds.add(employeeDeclare.getEmployeeId()); diff --git a/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java b/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java index a241b008e..56e12666e 100644 --- a/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java +++ b/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java @@ -1,11 +1,14 @@ package com.engine.salary.entity.employeedeclare.dto; +import com.engine.salary.annotation.TableTitle; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.Date; import java.util.Set; /** @@ -27,7 +30,28 @@ public class TaxAgentDeclareListDTO { private Long id; // 个税扣缴义务人 + @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") private String taxAgentName; + /** + * 最后操作功能 + */ + @TableTitle(title = "最后操作功能", dataIndex = "lastOperate", key = "lastOperate") + private String lastOperate; + + /** + * 最后操作时间 + */ + @TableTitle(title = "最后操作时间", dataIndex = "lastOperateTime", key = "lastOperateTime") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date lastOperateTime; + + /** + * 报送状态 + */ + @TableTitle(title = "报送状态", dataIndex = "status", key = "status") + public String status; + + Set opts; } diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java index 8af42f76a..036a3ad7a 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; +import java.util.List; /** * 人员报送 @@ -34,4 +35,10 @@ public class EmployeeDeclareParam extends BaseQueryParam { */ @DataCheck(require = true,message = "参数错误,税款所属期参数格式错误") private Date taxCycle; + + /** + * 批量报送,个税扣缴义务人id集合 + */ + private List taxAgentIds; + } diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java index b70cba7b5..073dd793a 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; +import java.util.List; /** * 刷新报送人员 @@ -25,12 +26,18 @@ public class EmployeeDeclareRefreshParam { /** * 个税扣缴义务人id */ - @DataCheck(require = true,message = "参数错误,个税扣缴义务人id不能为空") + @DataCheck(require = true, message = "参数错误,个税扣缴义务人id不能为空") private Long taxAgentId; /** * 税款所属期 */ - @DataCheck(require = true,message = "参数错误,税款所属期参数格式错误") + @DataCheck(require = true, message = "参数错误,税款所属期参数格式错误") private Date taxCycle; + + + /** + * 批量操作,个税扣缴义务人id集合 + */ + private List taxAgentIds; } diff --git a/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java b/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java index 6daffceb3..e05cbf7f8 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** * 人员报送(个税扣缴义务人)查询条件 *

Copyright: Copyright (c) 2023

@@ -22,4 +24,13 @@ public class TaxAgentDeclareListQueryParam extends BaseQueryParam { // "个税扣缴义务人名称" private String taxAgentName; + + + // 最后操作 + private List lastOperates; + + /** + * 操作状态 + */ + private List statuses; } diff --git a/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java new file mode 100644 index 000000000..9f833b95a --- /dev/null +++ b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java @@ -0,0 +1,101 @@ +package com.engine.salary.entity.employeedeclare.po; + +import com.engine.hrmelog.annotation.ElogTransform; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * 人员报送 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_employee_declare_opt +public class EmployeeDeclareOptPO { + /** + * ID + */ + @ElogTransform(name = "ID") + private Long id; + + /** + * 个税扣缴义务人 + */ + @ElogTransform(name = "个税扣缴义务人") + private Long taxAgentId; + + /** + * 税款所属期 + */ + @ElogTransform(name = "税款所属期") + private Date taxCycle; + + /** + * 报送状态 + */ + @ElogTransform(name = "操作状态") + private String status; + + /** + * 最后操作 + */ + @ElogTransform(name = "最后操作") + private String lastOperate; + + /** + * 最后操作时间 + */ + @ElogTransform(name = "最后操作时间") + private Date lastOperateTime; + + + /** + * 创建时间 + */ + @ElogTransform(name = "创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ElogTransform(name = "修改时间") + private Date updateTime; + + /** + * 创建人id + */ + @ElogTransform(name = "创建人id") + private Long creator; + + /** + * 是否删除 + */ + @ElogTransform(name = "是否删除") + private Integer deleteType; + + + /** + * 租户KEY + */ + @ElogTransform(name = "租户KEY") + private String tenantKey; + + + //主键id集合 + private Collection ids; + + private Collection taxAgentIds; + + private Collection lastOperates; + + private Collection statuses; + + +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java new file mode 100644 index 000000000..40f529cc5 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 工资单批量操作参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalarySendBatParam { + +// 工资单发放Id + private List salarySendIds; + +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java index 408da743f..1a534b2f9 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java @@ -107,6 +107,7 @@ public class SalaryAcctRecordBO { .updateTime(SalaryDateUtil.getFormatLocalDateTime(salaryAcctRecordPO.getUpdateTime())) .description(salaryAcctRecordPO.getDescription()) .approvalStatus(salaryAcctRecordPO.getApprovalStatus()) + .runStatus(salaryAcctRecordPO.getRunStatus()) .operate(btnList) .opts(salaryAcctRecordPO.getOpts()) .build(); @@ -124,7 +125,7 @@ public class SalaryAcctRecordBO { */ public static SalaryAcctRecordPO convert2PO(SalaryAcctRecordSaveParam saveParam, SalarySobCycleDTO salarySobCycle, - int acctTimes, Long employeeId) { + int acctTimes, Long employeeId, String runStatus) { Date now = new Date(); return new SalaryAcctRecordPO() .setSalaryMonth(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1))) @@ -138,6 +139,7 @@ public class SalaryAcctRecordBO { .setCreator(employeeId) .setCreateTime(now) .setUpdateTime(now) + .setRunStatus(runStatus) .setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); } diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index b906a6a37..3b248a95c 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -176,7 +176,11 @@ public class SalaryAcctResultBO { List columns = Lists.newArrayList(); // 员工信息字段 for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) { - columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName(), 0), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + if (salarySobEmpFieldDTO.getFieldId().equals("taxAgentName")) { + columns.add(new WeaTableColumnGroup("300", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + } else { + columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName(), 0), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + } } // 薪资项目分组下的薪资项目 for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) { diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java index 5a78052ab..c9eeab561 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java @@ -36,4 +36,6 @@ public class SalaryAcctRecordFormDTO { //周期提示信息 private SalarySobCycleDTO cycleInfo; + + private String msg; } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java index e3d9b8fcc..f383583be 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java @@ -67,6 +67,9 @@ public class SalaryAcctRecordListDTO { @TableTitle(title = "审批状态", dataIndex = "approvalStatus", key = "approvalStatus") private String approvalStatus; + @TableTitle(title = "批量操作状态", dataIndex = "runStatus", key = "runStatus") + private String runStatus; + @TableTitle(title = "操作", dataIndex = "operate", key = "operate") private List operate; diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java new file mode 100644 index 000000000..63dc4310a --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java @@ -0,0 +1,34 @@ +package com.engine.salary.entity.salaryacct.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * 批量操作参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctBatParam { + + //薪资所属月 + private Date salaryMonth; + //薪资账套id + private List salarySobIds; + //备注 + private String description; + + + private List salaryAcctRecordIds; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java new file mode 100644 index 000000000..aad8d394b --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java @@ -0,0 +1,37 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryAcctRecordBatchSaveParam + * @date 2025/06/09 9:45 + * @description 薪资核算基本信息保存参数 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//薪资核算基本信息保存参数 +public class SalaryAcctRecordBatchSaveParam { + + //薪资所属月 + @DataCheck(require = true, message = "薪资所属月格式错误") + private Date salaryMonth; + + private String salaryMonthStr; + + //薪资账套id + private List salarySobIds; + + //备注 + @DataCheck(max = 80, message = "备注不能超过80个字符") + private String description; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java index 8424aa765..983d2cdf5 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java @@ -39,4 +39,10 @@ public class SalaryAcctRecordQueryParam extends BaseQueryParam { private String startMonthStr; private String endMonthStr; + + /** + * 最后操作 + * SalaryAcctOptEnum + */ + private List lastOperates; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java index 62890c5da..de134d6af 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java @@ -36,4 +36,6 @@ public class SalaryAcctRecordSaveParam { //备注 @DataCheck(max = 80, message = "备注不能超过80个字符") private String description; + + private String runStatus; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java new file mode 100644 index 000000000..7721d3c0b --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 薪资核算计算个税 + * + * @author xiajun + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryCalcTaxBatParam { + + /** + * 参数错误,薪资核算记录ID不能为空 + */ + @DataCheck(require = true,message = "薪资核算记录ID不能为空") + private List salaryAcctRecordIds; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java index d4745f149..4e1469fe6 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java @@ -1,7 +1,10 @@ package com.engine.salary.entity.salaryacct.param; import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * 薪资核算计算个税 @@ -9,6 +12,9 @@ import lombok.Data; * @author xiajun */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class SalaryCalcTaxParam { /** diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index ad062d7ff..c409beaab 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -148,9 +148,19 @@ public class SalaryAcctRecordPO { @Deprecated private List lockSalaryItemIds; + /** + * 在线算税结果信息 + */ + private String msg; + private Set opts; + /** + * 执行状态 + */ + private String runStatus; + //查询条件------------------------------- Collection ids; diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java index 75b26f972..f65e60038 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java @@ -75,7 +75,7 @@ public class SalaryArchiveBO { if (openSecondaryAccount) { columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "账号类型"), "accountType")); } - columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgentName")); + columns.add(new WeaTableColumn("300px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "分部"), "subcompanyName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "工号"), "workcode")); diff --git a/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java b/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java index d0555321d..fc0094ba5 100644 --- a/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java +++ b/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java @@ -28,4 +28,6 @@ public class SalarySobQueryParam extends BaseQueryParam { * 数据过滤级别 */ private AuthFilterTypeEnum filterType; + + private boolean isShare; } diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java index f2af2ac95..a1a54861c 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java @@ -62,6 +62,7 @@ public class InsuranceAccountBO { .otherNum(e.getOtherNum()) .otherPay(SalaryEntityUtil.thousandthConvert(e.getOtherPay())) .remarks(e.getRemarks()) + .fc(e.getFc()) .socialNum(e.getSocialNum()) .socialPay(SalaryEntityUtil.thousandthConvert(e.getSocialPay())) .paymentOrganization(e.getPaymentOrganization() != null ? MapperProxyFactory.getProxy(TaxAgentMapper.class).getById(e.getPaymentOrganization()).getName() : "") diff --git a/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java b/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java index 28939613b..42348994c 100644 --- a/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java +++ b/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java @@ -112,6 +112,8 @@ public class InsuranceAccountBatchListDTO { @TableTitle(title = "备注", dataIndex = "remarks", key = "remarks") private String remarks; + private Integer fc; + private Set opts; diff --git a/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java b/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java new file mode 100644 index 000000000..491de2fda --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java @@ -0,0 +1,583 @@ +package com.engine.salary.entity.siaccount.dto; + +import com.engine.hrmelog.annotation.ElogTransform; +import com.engine.salary.annotation.Encrypt; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QZReportListDTO { + + + + /** + * 公司名称 + */ + private Long paymentOrganization; + private String paymentOrganizationName; + /** + * 工号 + */ + private String workCode; + /** + * 一级部门 + */ + private String dept1; + + /** + * 二级部门 + */ + private String dept2; + + /** + * 实际工作地 + */ + private String actualWorkplace; + + /** + * 劳动关系地 + */ + private String laborWorkplace; + + /** + * 岗位名称 + */ + private String jobcall; + /** + * 进入日期 + */ + + /** + * 离职日期 + */ + /** + * 社保基数 + */ + private String socialBase; + /** + * 公积金基数 + */ + private String fundBase; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** + * 主键id + */ + @ElogTransform(name = "主键id") + private Long id; + + /** + * 员工id + */ + @ElogTransform(name = "员工id") + private Long employeeId; + + /** + * 账单月份 + */ + @ElogTransform(name = "账单月份") + private String billMonth; + + /** + * 账单状态 0-未归档 1-已归档 + */ + @ElogTransform(name = "账单状态") + private Integer billStatus; + + /** + * 缴纳状态 + */ + @ElogTransform(name = "缴纳状态") + private Integer paymentStatus; + + /** + * 补缴月份/退差月份 + */ + @ElogTransform(name = "补缴月份/退差月份") + private String supplementaryMonth; + + /** + * 补缴项目 + */ + @ElogTransform(name = "补缴项目") + private String supplementaryProjects; + + /** + * 数据来源 0-系统核算 1-临时数据 + */ + @ElogTransform(name = "数据来源") + private Integer resourceFrom; + + /** + * 社保缴纳组织 + */ + @ElogTransform(name = "社保缴纳组织") + private Long socialPayOrg; + + /** + * 社保账号 + */ + @ElogTransform(name = "社保账号") + private String socialAccount; + + /** + * 公积金缴纳组织 + */ + @ElogTransform(name = "公积金缴纳组织") + private Long fundPayOrg; + + /** + * 公积金账号 + */ + @ElogTransform(name = "公积金账号") + private String fundAccount; + + /** + * 补充公积金账号 + */ + @ElogTransform(name = "补充公积金账号") + private String supplementFundAccount; + + /** + * 其他福利缴纳组织 + */ + @ElogTransform(name = "其他福利缴纳组织") + private Long otherPayOrg; + + /** + * 社保方案ID + */ + @ElogTransform(name = "社保方案ID") + private Long socialSchemeId; + + /** + * 社保缴纳基数 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数") + private String socialPaymentBaseString; + + /** + * 社保缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数——单位") + private String socialPaymentComBaseString; + + /** + * 公积金方案ID + */ + @ElogTransform(name = "公积金方案ID") + private Long fundSchemeId; + + /** + * 公积金缴纳基数 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数") + private String fundPaymentBaseString; + + /** + * 公积金缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数——单位") + private String fundPaymentComBaseString; + + /** + * 其他福利方案id + */ + @ElogTransform(name = "其他福利方案id") + private Long otherSchemeId; + + /** + * 其他福利缴纳基数 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数") + private String otherPaymentBaseString; + + /** + * 其他福利缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数——单位") + private String otherPaymentComBaseString; + + /** + * 社保个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保个人缴费明细") + private String socialPerJson; + + /** + * 特殊社保缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊社保缴费明细") + private String socialSpecialJson; + + /** + * 社保个人合计 + */ + @Encrypt + @ElogTransform(name = "社保个人合计") + private String socialPerSum; + + /** + * 公积金个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "公积金个人缴费明细") + private String fundPerJson; + + /** + * 特殊公积金缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊公积金缴费明细") + private String fundSpecialJson; + + /** + * 公积金个人合计 + */ + @Encrypt + @ElogTransform(name = "公积金个人合计") + private String fundPerSum; + + /** + * 其他福利个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "其他福利个人缴费明细") + private String otherPerJson; + + /** + * 其他福利个人合计 + */ + @Encrypt + @ElogTransform(name = "其他福利个人合计") + private String otherPerSum; + + /** + * 个人合计 + */ + @Encrypt + @ElogTransform(name = "个人合计") + private String perSum; + + /** + * 社保单位缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保单位缴费明细") + private String socialComJson; + + /** + * 社保单位合计 + */ + @Encrypt + @ElogTransform(name = "社保单位合计") + private String socialComSum; + + /** + * 公积金单位缴费明细 + */ + @ElogTransform(name = "公积金单位缴费明细") + private String fundComJson; + + /** + * 公积金单位合计 + */ + @ElogTransform(name = "公积金单位合计") + private String fundComSum; + + /** + * 其他福利单位缴费明细 + */ + @ElogTransform(name = "其他福利单位缴费明细") + private String otherComJson; + + /** + * 其他福利单位合计 + */ + @ElogTransform(name = "其他福利单位合计") + private String otherComSum; + + /** + * 单位合计 + */ + @Encrypt + @ElogTransform(name = "单位合计") + private String comSum; + + /** + * 社保合计 + */ + @Encrypt + @ElogTransform(name = "社保合计") + private String socialSum; + + /** + * 公积金合计 + */ + @Encrypt + @ElogTransform(name = "公积金合计") + private String fundSum; + + /** + * 其他福利合计 + */ + @Encrypt + @ElogTransform(name = "其他福利合计") + private String otherSum; + + /** + * 合计 + */ + @Encrypt + @ElogTransform(name = "合计") + private String total; + + + private String subcompanyName; + private Long subcompanyId; + private String departmentName; + private Long departmentId; + private String jobtitleName; + private Long jobtitleId; + private Long jobcallId; + private String status; + + + + /** + * 社保方案ID + */ + @ElogTransform(name = "社保方案ID") + private Long bSocialSchemeId; + + /** + * 社保缴纳基数 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数") + private String bSocialPaymentBaseString; + + /** + * 社保缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数——单位") + private String bSocialPaymentComBaseString; + + /** + * 公积金方案ID + */ + @ElogTransform(name = "公积金方案ID") + private Long bFundSchemeId; + + /** + * 公积金缴纳基数 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数") + private String bFundPaymentBaseString; + + /** + * 公积金缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数——单位") + private String bFundPaymentComBaseString; + + /** + * 其他福利方案id + */ + @ElogTransform(name = "其他福利方案id") + private Long bOtherSchemeId; + + /** + * 其他福利缴纳基数 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数") + private String bOtherPaymentBaseString; + + /** + * 其他福利缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数——单位") + private String bOtherPaymentComBaseString; + + /** + * 社保个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保个人缴费明细") + private String bSocialPerJson; + + /** + * 特殊社保缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊社保缴费明细") + private String bSocialSpecialJson; + + /** + * 社保个人合计 + */ + @Encrypt + @ElogTransform(name = "社保个人合计") + private String bSocialPerSum; + + /** + * 公积金个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "公积金个人缴费明细") + private String bFundPerJson; + + /** + * 特殊公积金缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊公积金缴费明细") + private String bFundSpecialJson; + + /** + * 公积金个人合计 + */ + @Encrypt + @ElogTransform(name = "公积金个人合计") + private String bFundPerSum; + + /** + * 其他福利个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "其他福利个人缴费明细") + private String bOtherPerJson; + + /** + * 其他福利个人合计 + */ + @Encrypt + @ElogTransform(name = "其他福利个人合计") + private String bOtherPerSum; + + /** + * 个人合计 + */ + @Encrypt + @ElogTransform(name = "个人合计") + private String bPerSum; + + /** + * 社保单位缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保单位缴费明细") + private String bSocialComJson; + + /** + * 社保单位合计 + */ + @Encrypt + @ElogTransform(name = "社保单位合计") + private String bSocialComSum; + + /** + * 公积金单位缴费明细 + */ + @ElogTransform(name = "公积金单位缴费明细") + private String bFundComJson; + + /** + * 公积金单位合计 + */ + @ElogTransform(name = "公积金单位合计") + private String bFundComSum; + + /** + * 其他福利单位缴费明细 + */ + @ElogTransform(name = "其他福利单位缴费明细") + private String bOtherComJson; + + /** + * 其他福利单位合计 + */ + @ElogTransform(name = "其他福利单位合计") + private String bOtherComSum; + + /** + * 单位合计 + */ + @Encrypt + @ElogTransform(name = "单位合计") + private String bComSum; + + /** + * 社保合计 + */ + @Encrypt + @ElogTransform(name = "社保合计") + private String bSocialSum; + + /** + * 公积金合计 + */ + @Encrypt + @ElogTransform(name = "公积金合计") + private String bFundSum; + + /** + * 其他福利合计 + */ + @Encrypt + @ElogTransform(name = "其他福利合计") + private String bOtherSum; + + /** + * 合计 + */ + @Encrypt + @ElogTransform(name = "合计") + private String bTotal; + +} diff --git a/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java new file mode 100644 index 000000000..ae3c955ea --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java @@ -0,0 +1,43 @@ +package com.engine.salary.entity.siaccount.param; + + +import com.engine.salary.enums.siaccount.FCEnum; +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccountBatParam { + + //账单月份") + //@NotNull + @DataCheck(require = true,message = "账单月份不能为空") + private String billMonth; + + //备注") + //@Length(max = 60) + @DataCheck(max = 60,message = "备注长度不能超过60个字符") + private String remarks; + + + /** + * 个税扣缴义务人id + */ + @DataCheck(require = true,message = "个税扣缴义务人不能为空") + private List paymentOrganizations; + + + + private List ids; + + private FCEnum fc; + +} diff --git a/src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java b/src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java new file mode 100644 index 000000000..8152c3b32 --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.siaccount.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 钱智社保报表 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class QZInsuranceAccountBatchParam { + + private List ids; + +} diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java index 5b610e6da..38c074e89 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java @@ -143,6 +143,11 @@ public class InsuranceAccountBatchPO { private Long jobcallId; private String status; + /** + * 封存状态,0-未封存 1-已封存 + */ + private Integer fc; + private Set opts; diff --git a/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java b/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java index 410b0b2b4..1ac46a384 100644 --- a/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java +++ b/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java @@ -26,4 +26,6 @@ public class TaxAgentQueryParam extends BaseQueryParam { //个税扣缴义务人名称 private String name; + + private boolean isShare; } diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java index 73385423c..7cddb27ed 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java @@ -721,6 +721,7 @@ public class TaxDeclarationBO { private static String findStringValue(String fieldCode, Map> resultMap, Map salaryItemMap) { return resultMap.getOrDefault(salaryItemMap.getOrDefault(fieldCode, 0L), Collections.emptyList()).stream() .map(SalaryAcctResultPO::getResultValue) + .filter(Objects::nonNull) .findFirst().orElse(""); } diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java index 5bcad824f..284b5a010 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.enums.datacollection.TaxFreeTypeEnum; import com.engine.salary.enums.employeedeclare.CardTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -43,6 +44,10 @@ public class TaxDeclarationRequest { Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + taxDeclarations = taxDeclarations.stream() + .filter(taxDeclaration -> IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()) != null + && IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType()== DeclareReportTypeEnum.COMPREHENSIVE_INCOME) + .collect(Collectors.toList()); for (TaxDeclarationPO taxDeclaration : taxDeclarations) { List values = taxDeclarationValueMap.get(taxDeclaration.getId()); for (TaxDeclarationValuePO taxDeclarationValue : values) { @@ -338,6 +343,10 @@ public class TaxDeclarationRequest { Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + taxDeclarations = taxDeclarations.stream() + .filter(taxDeclaration -> IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()) != null + && IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType()== DeclareReportTypeEnum.CLASSIFIED_INCOME) + .collect(Collectors.toList()); for (TaxDeclarationPO taxDeclaration : taxDeclarations) { List values = taxDeclarationValueMap.get(taxDeclaration.getId()); IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()); @@ -380,6 +389,10 @@ public class TaxDeclarationRequest { Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + taxDeclarations = taxDeclarations.stream() + .filter(taxDeclaration -> IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()) != null + && IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType()== DeclareReportTypeEnum.NONRESIDENT_INCOME) + .collect(Collectors.toList()); for (TaxDeclarationPO taxDeclaration : taxDeclarations) { List values = taxDeclarationValueMap.get(taxDeclaration.getId()); for (TaxDeclarationValuePO taxDeclarationValue : values) { diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java new file mode 100644 index 000000000..d8d4d4fde --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java @@ -0,0 +1,54 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.YearMonth; +import java.util.Date; +import java.util.List; + +/** + * 生成个税申报表参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxDeclarationBatParam { + + /** + * 个税申报id + */ + private Long taxDeclarationId; + + /** + * 薪资所属月 + */ + private Date salaryMonth; + + /** + * 个税扣缴义务人 + */ + private List taxAgentIds; + + /** + * 备注 + */ + private String description; + + private String salaryMonthStr; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date taxCycle; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date salaryDate; +} diff --git a/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java b/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java index 34141f5a2..55e0c69c5 100644 --- a/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java +++ b/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java @@ -73,6 +73,8 @@ public class TaxPaymentRequestPO implements Serializable { //是否已获取反馈") private Integer feedback; + private Integer reportType; + /** * 租户key */ diff --git a/src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java b/src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java new file mode 100644 index 000000000..596b5b2a8 --- /dev/null +++ b/src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java @@ -0,0 +1,56 @@ +package com.engine.salary.enums.employeedeclare; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 操作枚举 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum DeclareOptEnum implements BaseEnum { + + BAT_REFRESH("1", "批量刷新", 158772), + BAT_DECLARE("2", "批量报送", 158770), + BAT_DECLARE_FEEDBACK("3", "批量获取反馈", 158774); + + DeclareOptEnum(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 DeclareOptEnum getByValue(String value) { + for (DeclareOptEnum e : DeclareOptEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return BAT_REFRESH; + } +} diff --git a/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java new file mode 100644 index 000000000..69352fb16 --- /dev/null +++ b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java @@ -0,0 +1,58 @@ +package com.engine.salary.enums.salaryaccounting; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 操作枚举 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryAcctOptEnum implements BaseEnum { + + UNPROCESSED("1", "未处理", 158772), + PROGRESS("2", "薪资计算中", 158770), + COMPLETED("3", "薪资计算完成", 158770), + ONLINE("4", "在线算税中", 158770), + RESULT("5", "已获取算税结果", 158774); + + SalaryAcctOptEnum(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 SalaryAcctOptEnum getByValue(String value) { + for (SalaryAcctOptEnum e : SalaryAcctOptEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return UNPROCESSED; + } +} diff --git a/src/com/engine/salary/enums/siaccount/FCEnum.java b/src/com/engine/salary/enums/siaccount/FCEnum.java new file mode 100644 index 000000000..bc6258cc7 --- /dev/null +++ b/src/com/engine/salary/enums/siaccount/FCEnum.java @@ -0,0 +1,44 @@ +package com.engine.salary.enums.siaccount; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +public enum FCEnum implements BaseEnum { + JF(0, "解封", 91870), + + FC(1, "封存", 91862); + + private Integer value; + + private String defaultLable; + + private Integer labelId; + + FCEnum(Integer value, String defaultLable, Integer labelId) { + this.value = value; + this.defaultLable = defaultLable; + this.labelId = labelId; + } + + public Integer getValue() { + return this.value; + } + + public Integer getLabelId() { + return this.labelId; + } + + public String getDefaultLabel() { + return this.defaultLable; + } + + public static FCEnum parseByValue(Integer value){ + for (FCEnum e : FCEnum.values()) { + if(Objects.equals(e.getValue(), value)){ + return e; + } + } + return JF; + } +} diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java new file mode 100644 index 000000000..9a4f255ba --- /dev/null +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java @@ -0,0 +1,73 @@ +package com.engine.salary.mapper.employeedeclare; + +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface EmployeeDeclareOptMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(EmployeeDeclareOptPO employeeDeclareOpt); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + EmployeeDeclareOptPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param employeeDeclareOpt 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 修改,修改所有字段 + * + * @param employeeDeclareOpt 修改的记录 + * @return 返回影响行数 + */ + int update(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 修改,忽略null字段 + * + * @param employeeDeclareOpt 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 删除记录 + * + * @param employeeDeclareOpt 待删除的记录 + * @return 返回影响行数 + */ + int delete(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + EmployeeDeclareOptPO getByTaxAgentId(Long taxAgentId); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml new file mode 100644 index 000000000..d138a97d7 --- /dev/null +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + t + . + create_time + , t.creator + , t.delete_type + , t.id + , t.last_operate + , t.last_operate_time + , t.status + , t.tax_agent_id + , t.tenant_key + , t.update_time + , t.tax_cycle + + + + + + + + + + + + + + + INSERT INTO hrsa_employee_declare_opt + + + + create_time, + + + creator, + + + delete_type, + + + id, + + + last_operate, + + + last_operate_time, + + + status, + + + tax_agent_id, + + + tenant_key, + + + update_time, + + + tax_cycle, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{id}, + + + #{lastOperate}, + + + #{lastOperateTime}, + + + #{status}, + + + #{taxAgentId}, + + + #{tenantKey}, + + + #{updateTime}, + + + #{taxCycle}, + + + + + + + UPDATE hrsa_employee_declare_opt + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + last_operate=#{lastOperate}, + last_operate_time=#{lastOperateTime}, + status=#{status}, + tax_agent_id=#{taxAgentId}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + tax_cycle=#{taxCycle}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_employee_declare_opt + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + last_operate=#{lastOperate}, + + + last_operate_time=#{lastOperateTime}, + + + status=#{status}, + + + tax_agent_id=#{taxAgentId}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + tax_cycle=#{taxCycle}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_employee_declare_opt + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_employee_declare_opt + 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/mapper/salaryacct/SalaryAcctRecordMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java index 465834b7e..a925a7d2b 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java @@ -81,7 +81,7 @@ public interface SalaryAcctRecordMapper { List getBackCalcRecordByIds(@Param("collection") Set salaryAcctIds); - void updateDate(@Param("id")Long id, @Param("updateTime")Date updateTime); + void updateDate(@Param("id")Long id, @Param("updateTime")Date updateTime, @Param("runStatus")String runStatus); /** diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml index 519af2c54..06de4deec 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml @@ -16,6 +16,7 @@ + @@ -34,6 +35,7 @@ + @@ -56,6 +58,8 @@ , t.lock_salary_item_ids , t.approval_status , t.approval_id + , t.run_status + , t.msg @@ -226,6 +230,9 @@ tenant_key, + + run_status, + @@ -264,6 +271,9 @@ #{tenantKey}, + + #{runStatus}, + @@ -312,6 +322,9 @@ tenant_key, + + run_status, + @@ -350,6 +363,9 @@ #{tenantKey}, + + #{runStatus}, + @@ -419,6 +435,9 @@ approval_status=#{approvalStatus}, + + msg=#{msg}, + WHERE id = #{id} AND delete_type = 0 @@ -455,7 +474,8 @@ UPDATE hrsa_salary_acct_record - SET update_time=#{updateTime} + SET update_time=#{updateTime}, + run_status=#{runStatus} WHERE delete_type = 0 AND id = #{id} diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml index 4b45cb2f3..f4cfb4ad0 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml @@ -19,6 +19,7 @@ + @@ -42,6 +43,7 @@ , t.update_time , t.tenant_key , t.payment_organization + , t.fc #{billMonth}, @@ -83,6 +86,7 @@ #{updateTime}, #{tenantKey}, #{paymentOrganization}, + #{fc}, @@ -111,6 +115,7 @@ update_time, tenant_key, payment_organization, + fc, #{billMonth}, @@ -129,6 +134,7 @@ #{updateTime}, #{tenantKey}, #{paymentOrganization}, + #{fc}, @@ -235,7 +241,10 @@ other_pay=#{otherPay}, - bill_status=#{billStatus} + bill_status=#{billStatus}, + + + fc=#{fc} WHERE id = #{id} AND delete_type = 0 diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java index faf48f4bc..12eb290f4 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java @@ -1,5 +1,6 @@ package com.engine.salary.mapper.siaccount; +import com.engine.salary.entity.siaccount.dto.QZReportListDTO; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; import com.engine.salary.entity.siaccount.param.SupplementAccountBaseParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; @@ -200,4 +201,6 @@ public interface InsuranceAccountDetailMapper { void deleteByIds(@Param("ids")List ids); void deleteByEmpIds(@Param("employeeIds")List deleteEmployeeIds, @Param("billMonth") String billMonth, @Param("paymentOrganization") Long paymentOrganization); + + List qzReportList(InsuranceAccountDetailParam queryParam); } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 71685ffcb..64a6e8496 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -1636,4 +1636,188 @@ AND t.payment_organization = #{paymentOrganization} AND t.employee_id = #{employeeId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java index 6ec65e30f..d33063ed7 100644 --- a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java +++ b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java @@ -79,8 +79,6 @@ public interface TaxPaymentRequestMapper { void updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO build); - void updateFeedbackByTaxDeclareRecordId(TaxPaymentRequestPO build); - TaxPaymentRequestPO getOne(TaxPaymentRequestPO build); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml index d1ca5dee2..6d84c59b8 100644 --- a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml +++ b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml @@ -14,6 +14,7 @@ + @@ -32,6 +33,7 @@ , t.tax_year_month , t.tenant_key , t.update_time + , t.report_type @@ -93,6 +95,9 @@ AND update_time = #{updateTime} + + AND report_type = #{reportType} + AND id IN @@ -142,7 +147,10 @@ tenant_key, - update_time + update_time, + + + report_type @@ -180,7 +188,10 @@ #{tenantKey}, - #{updateTime} + #{updateTime}, + + + #{reportType} @@ -201,7 +212,8 @@ tax_declare_record_id, tax_year_month, tenant_key, - update_time + update_time, + report_type ) VALUES ( @@ -217,7 +229,8 @@ #{item.taxDeclareRecordId}, #{item.taxYearMonth}, #{item.tenantKey}, - #{item.updateTime} + #{item.updateTime}, + #{item.reportType} ) @@ -236,7 +249,8 @@ tax_declare_record_id, tax_year_month, tenant_key, - update_time + update_time, + report_type ) @@ -252,7 +266,8 @@ #{item.taxDeclareRecordId,jdbcType=DOUBLE}, #{item.taxYearMonth,jdbcType=DATE}, #{item.tenantKey,jdbcType=VARCHAR}, - #{item.updateTime,jdbcType=DATE} + #{item.updateTime,jdbcType=DATE}, + #{item.reportType,jdbcType=INTEGER} from dual @@ -272,7 +287,8 @@ tax_declare_record_id, tax_year_month, tenant_key, - update_time + update_time, + report_type ) VALUES ( @@ -287,7 +303,8 @@ #{item.taxDeclareRecordId}, #{item.taxYearMonth}, #{item.tenantKey}, - #{item.updateTime} + #{item.updateTime}, + #{item.reportType} ) @@ -307,6 +324,7 @@ tax_year_month=#{taxYearMonth}, tenant_key=#{tenantKey}, update_time=#{updateTime}, + report_type=#{reportType}, WHERE id = #{id} AND delete_type = 0 @@ -349,6 +367,9 @@ update_time=#{updateTime}, + + report_type=#{reportType}, + WHERE id = #{id} AND delete_type = 0 @@ -385,17 +406,9 @@ AND request_type=#{requestType} AND tax_agent_id=#{taxAgentId} AND tax_year_month=#{taxYearMonth} + AND report_type=#{reportType} - - UPDATE hrsa_tax_payment_request - - feedback=#{feedback} - - WHERE delete_type = 0 - AND tax_declare_record_id=#{taxDeclareRecordId} - @@ -407,6 +420,7 @@ AND request_type = #{requestType} AND tax_agent_id = #{taxAgentId} AND tax_year_month = #{taxYearMonth} + AND report_type = #{reportType} \ No newline at end of file diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 19d0147ed..24db00d78 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -11,7 +11,6 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; -import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.auth.AuthFilterTypeEnum; @@ -31,6 +30,8 @@ import com.engine.salary.service.*; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.service.impl.*; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -49,6 +50,8 @@ import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE; + /** * 薪酬统计员工明细 *

Copyright: Copyright (c) 2022

@@ -103,6 +106,11 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala return ServiceUtil.getService(SettingServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + private final boolean isRealOrg = "1".equals(getSalarySysConfService(user).getValueByCode(REPORT_ORGANIZATIN_TYPE)); @Override public PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam) { List list = Collections.emptyList(); @@ -262,14 +270,22 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala map.put("salarySob", SalarySobMap.get(se.getSalarySobId())); map.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId())); map.put("userName", Util.null2String(emp.getUsername())); - map.put("subCompany", Util.null2String(emp.getSubcompanyName())); - map.put("department", Util.null2String(emp.getDepartmentName())); - map.put("jobTitle", Util.null2String(emp.getJobtitleName())); - map.put("status", Util.null2String(NumberUtil.isNumber(emp.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(emp.getStatus())).getDefaultLabel() : null)); map.put("workCode", Util.null2String(emp.getWorkcode())); map.put("idNo", Util.null2String(emp.getIdNo())); map.put("companystartdate", Util.null2String(emp.getCompanystartdate())); + if(isRealOrg){ + map.put("subCompany", Util.null2String(emp.getSubcompanyName())); + map.put("department", Util.null2String(emp.getDepartmentName())); + map.put("jobTitle", Util.null2String(emp.getJobtitleName())); + map.put("status", Util.null2String(NumberUtil.isNumber(emp.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(emp.getStatus())).getDefaultLabel() : null)); + }else { + map.put("subCompany", Util.null2String(se.getSubcompanyName())); + map.put("department", Util.null2String(se.getDepartmentName())); + map.put("jobTitle", Util.null2String(se.getJobtitleName())); + map.put("status", Util.null2String(NumberUtil.isNumber(se.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(se.getStatus())).getDefaultLabel() : null)); + } + // IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); // map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); list.add(map); diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index a894213bb..6465e582a 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -525,7 +525,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary throw new SalaryRunTimeException("该维度值中无数据!"); } // 同一个人放在一起 - listByDimensionValue = listByDimensionValue.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getEmployeeId)).collect(Collectors.toList()); + listByDimensionValue = listByDimensionValue.stream().sorted((a,b)-> b.getSalaryMonth().compareTo(a.getSalaryMonth())).collect(Collectors.toList()); List salaryAcctEmployeePOList = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), listByDimensionValue); // 获取此分页的核算人员 diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 7d0d48d53..d92d62957 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -303,6 +303,7 @@ public class SalaryStatisticsReportWrapper extends Service { // 如果是被分享的报表,校验分享权限,通过后将user赋值为报表创建人 User creator = new User(); creator.setUid(po.getCreator().intValue()); + creator.setLogintype("1"); user = creator; } else { // 判断报表是否是登陆人创建的,或薪酬总管理员 diff --git a/src/com/engine/salary/service/EmployeeDeclareOptService.java b/src/com/engine/salary/service/EmployeeDeclareOptService.java new file mode 100644 index 000000000..497122b42 --- /dev/null +++ b/src/com/engine/salary/service/EmployeeDeclareOptService.java @@ -0,0 +1,28 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; + +import java.util.List; + +/** + * 人员报送(人员) + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface EmployeeDeclareOptService { + /** + * 查询操作记录 + * @param po + * @return + */ + List listSome(EmployeeDeclareOptPO po); + + /** + * 记录操作 + * @param po + */ + void record(EmployeeDeclareOptPO po); +} diff --git a/src/com/engine/salary/service/RecordsBuildService.java b/src/com/engine/salary/service/RecordsBuildService.java index 3edbecd45..a01efc1bb 100644 --- a/src/com/engine/salary/service/RecordsBuildService.java +++ b/src/com/engine/salary/service/RecordsBuildService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.siaccount.dto.QZReportListDTO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; @@ -19,4 +20,6 @@ public interface RecordsBuildService { List> buildCommonRecordsWithStyle(List list, Long employeeId); List> buildInspectRecords(List list, Long paymentOrganization); + + List> buildQzReport(List list, Long employeeId, boolean dynamicEmpInfo); } diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 55a578556..f16d329c6 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -16,7 +16,6 @@ import java.util.Map; /** * @Author weaver_cl - * * @Date 2022/4/11 * @Version V1.0 **/ @@ -24,55 +23,63 @@ public interface SIAccountService { /** * 查询台账列表 + * * @param insuranceAccountBatchParam * @return */ - Map listPage(InsuranceAccountBatchParam insuranceAccountBatchParam); + Map listPage(InsuranceAccountBatchParam insuranceAccountBatchParam); /** * 获取正常缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map listCommonPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listCommonPage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 根据姓名名获取正常缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map listCommonPageByName(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listCommonPageByName(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取补缴缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map listSupplementaryPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listSupplementaryPage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取退差列表 + * * @param insuranceAccountDetailParam * @return */ - Map listRecessionPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listRecessionPage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取补差列表 + * * @param insuranceAccountDetailParam * @return */ - Map listBalancePage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listBalancePage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 根据姓名获取补缴缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map supplementaryByNameList(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map supplementaryByNameList(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取核算月份备注填写表单 + * * @param params * @return */ @@ -80,12 +87,14 @@ public interface SIAccountService { /** * 保存并进入核算 + * * @param param */ String save(AccountParam param); /** * 新建核算并归档 + * * @param param * @return */ @@ -93,48 +102,56 @@ public interface SIAccountService { /** * 正常缴纳页核算 + * * @param saveCommonAccountParam */ void commonAccount(SaveCommonAccountParam saveCommonAccountParam); /** * 删除月份表单 + * * @param accountParam */ void delete(AccountParam accountParam); /** * 添加正常缴纳人员 + * * @param accountParam */ void saveCommonAccount(SaveCommonAccountParam accountParam); /** * 添加补缴人员 + * * @param saveSupplementaryAccountParam */ void saveSupplementaryAccount(SaveSupplementaryAccountParam saveSupplementaryAccountParam); /** * 删除正常缴纳人员 + * * @param accountParam */ void deleteCommonAccount(SaveCommonAccountParam accountParam); /** * 删除补缴人员 + * * @param param */ void deleteSupplementaryAccount(SaveCommonAccountParam param); /** * 台账归档 + * * @param accountParam */ void file(AccountParam accountParam); /** * 重置核算异常 + * * @param ids */ void unconfirmed(Collection ids); @@ -142,6 +159,7 @@ public interface SIAccountService { /** * 获取核算异常列表页是否导出档案开关 + * * @param billMonth */ Map buttonCheck(String billMonth); @@ -149,6 +167,7 @@ public interface SIAccountService { /** * 忽略核算异常 + * * @param longs */ void ignore(Collection longs); @@ -160,41 +179,46 @@ public interface SIAccountService { /** * 人员异动 + * * @param insuranceAccountDetailParam */ - Map changeList(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map changeList(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 核算核算异常,重新核算 + * * @param inspectAccountParam */ void accountInspect(InspectAccountParam inspectAccountParam); /** * 核算失败列表 + * * @param param */ - Map getInspectTable(InsuranceAccountDetailParam param); - + Map getInspectTable(InsuranceAccountDetailParam param); /** * 正常缴纳添加缴纳人员表单 + * * @param params * @return */ - Map getCommonForm(Map params); + Map getCommonForm(Map params); /** * 补缴添加缴纳人员表单 + * * @param params * @return */ - Map getSupplementaryForm(Map params); + Map getSupplementaryForm(Map params); /** * 总览 + * * @param param * @return */ @@ -207,7 +231,7 @@ public interface SIAccountService { * @param employeeIds * @return */ - List> welfareData(String billMonth, List employeeIds,Long taxAgentId); + List> welfareData(String billMonth, List employeeIds, Long taxAgentId); /** * 给套账提供字段名对应字段释义 @@ -295,18 +319,21 @@ public interface SIAccountService { /** * 补缴合计行 + * * @param insuranceAccountDetailParam */ Map listSupplementarySum(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 退差合计列 + * * @param insuranceAccountDetailParam */ Map listRecessionSum(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 补差合计列 + * * @param insuranceAccountDetailParam */ Map listBalanceSum(InsuranceAccountDetailParam insuranceAccountDetailParam); @@ -324,5 +351,22 @@ public interface SIAccountService { void deleteSocialAcctEmp(SaveCommonAccountParam param); String addSocialAcctEmp(SaveCommonAccountParam param); + + void batSave(AccountBatParam param); + + void batDelete(AccountBatParam param); + + void batFile(AccountBatParam param); + + void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam); + + Map qzReport(QZInsuranceAccountBatchParam qzInsuranceAccountBatchParam); + + XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param); + + String batFC(AccountBatParam batParam); + + Boolean fcAuth(); + } diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index 8e203bf30..359bf5a4b 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; @@ -217,7 +218,7 @@ public interface SalaryAcctRecordService { List listSome(SalaryAcctRecordPO po); - void updateDate(Long id, Date updateTime); + void updateDate(Long id, Date updateTime, String runStatus); /** * 根据薪资核算记录id查询关联的个税扣缴义务人 @@ -227,4 +228,12 @@ public interface SalaryAcctRecordService { */ List listBySalaryAcctRecordIds(Collection salaryAcctRecordIds); + + void batSave(SalaryAcctBatParam saveParam); + + void batFile(SalaryAcctBatParam param); + + void batReCalculate(SalaryAcctBatParam param); + + void updateMsg(Long salaryAcctRecordId, String s); } diff --git a/src/com/engine/salary/service/SalaryCalcTaxService.java b/src/com/engine/salary/service/SalaryCalcTaxService.java index 7e6efec5c..81c9f3545 100644 --- a/src/com/engine/salary/service/SalaryCalcTaxService.java +++ b/src/com/engine/salary/service/SalaryCalcTaxService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; +import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxBatParam; import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; public interface SalaryCalcTaxService { @@ -26,4 +27,9 @@ public interface SalaryCalcTaxService { * @param salaryCalcTaxParam */ void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam); + + void batCalcTax(SalaryCalcTaxBatParam salaryCalcTaxBatParam); + + void batCalcTaxFeedback(SalaryCalcTaxBatParam salaryCalcTaxBatParam); + } diff --git a/src/com/engine/salary/service/auth/AuthDataServiceImpl.java b/src/com/engine/salary/service/auth/AuthDataServiceImpl.java index 582887859..2f9259b60 100644 --- a/src/com/engine/salary/service/auth/AuthDataServiceImpl.java +++ b/src/com/engine/salary/service/auth/AuthDataServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.mapper.auth.AuthRoleMapper; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; import java.util.Date; import java.util.HashSet; @@ -156,7 +157,7 @@ public class AuthDataServiceImpl extends Service implements AuthDataService { public List listRoleData( AuthDataQueryParam param) { List authRoleDataDTOS = getAuthRoleDataMapper().listRoleData(param.getRoleId()); if (StrUtil.isNotEmpty(param.getUsername())){ - authRoleDataDTOS = authRoleDataDTOS.stream().filter(authRoleDataDTO -> authRoleDataDTO.getUsername().contains(param.getUsername())).collect(Collectors.toList()); + authRoleDataDTOS = authRoleDataDTOS.stream().filter(authRoleDataDTO -> StringUtils.isNotBlank(authRoleDataDTO.getUsername()) && authRoleDataDTO.getUsername().contains(param.getUsername())).collect(Collectors.toList()); } return authRoleDataDTOS; } diff --git a/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java b/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java index b3a5232b6..2ae8de5a4 100644 --- a/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java +++ b/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java @@ -24,6 +24,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; @@ -196,7 +197,7 @@ public class AuthMemberServiceImpl extends Service implements AuthMemberService public List listRoleEmp(AuthMemberQueryParam param) { List empDTOS = getAuthRoleEmpMapper().getByRoleId(param.getRoleId()); if(StrUtil.isNotEmpty(param.getUsername())){ - empDTOS = empDTOS.stream().filter(item -> item.getUsername().contains(param.getUsername())).collect(Collectors.toList()); + empDTOS = empDTOS.stream().filter(item -> StringUtils.isNotBlank(item.getUsername()) && item.getUsername().contains(param.getUsername())).collect(Collectors.toList()); } return empDTOS; diff --git a/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java b/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java index e305b6833..cb437aac0 100644 --- a/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java +++ b/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.salary.service.auth; import cn.hutool.core.collection.CollectionUtil; +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; @@ -63,6 +64,12 @@ public class AuthRoleServiceImpl extends Service implements AuthRoleService { public PageInfo roleList(AuthRoleListQueryParam param) { List authRolePOS = getAuthRoleMapper().list(param); + + String name = param.getName(); + if(StrUtil.isNotBlank(name)){ + authRolePOS = authRolePOS.stream().filter(po -> po.getName().contains(name)).collect(Collectors.toList()); + } + int total = authRolePOS.size(); List list = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), authRolePOS) diff --git a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java index 25078bcf0..0881fd6cf 100644 --- a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java +++ b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java @@ -11,6 +11,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.TaxAmountFormDTO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; import com.engine.salary.entity.taxpayment.dto.TaxWithheldVoucherResultDTO; @@ -34,7 +35,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; -import java.math.BigDecimal; import java.util.*; /** @@ -54,6 +54,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa protected TaxDeclareStatusService getTaxDeclareStatusService(User user) { return ServiceUtil.getService(TaxDeclareStatusServiceImpl.class, user); } + protected TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @@ -172,6 +173,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .requestType(param.getType()) .taxAgentId(param.getTaxAgentId()) .taxYearMonth(param.getTaxYearMonth()) + .reportType(param.getReportType()) .build()); } } else { @@ -189,6 +191,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .requestId(requestId) .requestType(param.getType()) .feedback(SalaryOnOffEnum.OFF.getValue()) + .reportType(param.getReportType()) .build(); getTaxPaymentRequestMapper().insertIgnoreNull(paymentRequestPO); } @@ -200,6 +203,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .builder() .taxAgentId(param.getTaxAgentId()) .taxYearMonth(param.getTaxYearMonth()) + .reportType(param.getReportType()) .build()); if (Objects.isNull(param.getCheckFeedback()) || SalaryOnOffEnum.ON.getValue().equals(param.getCheckFeedback())) { TaxPaymentRequestPO notFeedback = paymentRequests.stream() @@ -226,6 +230,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .requestType(getServiceType()) .taxAgentId(param.getTaxAgentId()) .taxYearMonth(param.getTaxYearMonth()) + .reportType(param.getReportType()) .build()); SalaryAssert.notNull(paymentRequest, "请先点击[三方缴款]或[银行端凭证缴款]按钮发起缴款请求后,再点击[缴款反馈]按钮"); paymentRequest.setFeedback(SalaryOnOffEnum.ON.getValue()); @@ -256,10 +261,11 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa public TaxAmountFormDTO queryTaxAmount(TaxPaymentQueryParam param) { TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); SalaryAssert.notNull(taxDeclareRecord, "个税申报记录不存在"); - if (!TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue().equals(taxDeclareRecord.getTaxDeclareStatus())) { + TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(param.getTaxDeclareRecordId(), param.getReportType()); + if (!TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue().equals(taxDeclareStatus.getTaxDeclareStatus())) { throw new SalaryRunTimeException("当前申报状态不是[申报成功,未缴费],暂时无法获取"); } - if (taxDeclareRecord.getTaxPayAmount() == null || taxDeclareRecord.getPersonNum() == null) { + if (taxDeclareStatus.getTaxPayAmount() == null || taxDeclareStatus.getPersonNum() == null) { throw new SalaryRunTimeException("未获取到应缴信息,请先进行个税在线申报"); } TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclareRecord.getTaxAgentId()); @@ -267,32 +273,11 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa return TaxAmountFormDTO.builder() .taxAgent(taxAgentPO.getName()) - .amount(SalaryEntityUtil.thousandthConvert(taxDeclareRecord.getTaxPayAmount())) - .personNum(taxDeclareRecord.getPersonNum().toString()) + .amount(SalaryEntityUtil.thousandthConvert(taxDeclareStatus.getTaxPayAmount())) + .personNum(taxDeclareStatus.getPersonNum().toString()) .build(); } - protected TaxDeclareRecordPO updateTaxDeclareRecord(TaxPaymentQueryParam param, BigDecimal totalPaid) { - TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); - if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue().equals(taxDeclareRecord.getTaxDeclareStatus())) { - throw new SalaryRunTimeException("当前申报表状态为已缴款,无法更新状态"); - } - BigDecimal taxPayAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPayAmount()); - BigDecimal taxPurePaidAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPurePaidAmount()); - if (SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPaidAmount()).equals(totalPaid) - && taxPayAmount.compareTo(BigDecimal.ZERO) > 0) { - throw new SalaryRunTimeException("请进行缴款后再刷新缴款状态"); - } - taxDeclareRecord.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue()); - taxDeclareRecord.setTaxPaidAmount(totalPaid.toString()); - taxDeclareRecord.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); - taxDeclareRecord.setTaxPayAmount(BigDecimal.ZERO.toString()); - taxDeclareRecord.setUpdateTime(new Date()); - getTaxDeclareRecordService(user).updateById(taxDeclareRecord); - // 填充回去后续返回数据用 - taxDeclareRecord.setTaxPayAmount(taxPayAmount.toString()); - return taxDeclareRecord; - } @Override public void cancelWithholdingVoucher(TaxDeclarationApiConfigPO apiConfig, TaxDeclareRecordPO taxDeclareRecord, Map requestParam) { diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 889d945cf..e4f04dc4d 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -254,7 +254,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction String imageId = Util.null2String(importParam.getImageId()); Validate.notBlank(imageId, "imageId为空"); // 获取所有个税扣缴义务人 - Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + // 获取所有个税扣缴义务人 + TaxAgentQueryParam param = TaxAgentQueryParam.builder().build(); + param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA); + Collection taxAgentList = getTaxAgentService(user).listAuth(param); + // Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); //个税扣缴义务人 String taxAgentId = Util.null2String(importParam.getTaxAgentId()); // 获取租户下所有的人员 @@ -356,17 +360,17 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction errorData.add(errorMessageMap); errorSum += 1; } else { - Optional optionalTemp = taxAgentList.stream().filter(m -> m.getTaxAgentName().equals(taxAgentName)).findFirst(); + Optional optionalTemp = taxAgentList.stream().filter(m -> m.getName().equals(taxAgentName)).findFirst(); if (optionalTemp.isPresent()) { - if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getTaxAgentId().equals(Long.valueOf(taxAgentId))) { + if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getId().equals(Long.valueOf(taxAgentId))) { //个税扣缴义务人与导入时选择的不一致 Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + "个税扣缴义务人与导入时选择的不一致"); errorData.add(errorMessageMap); errorSum += 1; } else { - addUpDeduction.setTaxAgentId(optionalTemp.get().getTaxAgentId()); - taxAgentEmployees = optionalTemp.get().getEmployeeList(); + addUpDeduction.setTaxAgentId(optionalTemp.get().getId()); + // taxAgentEmployees = optionalTemp.get().getEmployeeList(); } } else { //个税扣缴义务人不存在 diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index ee21da0bf..4b14abb70 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -308,7 +308,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa .collect(Collectors.toList()); effectiveFields.forEach(attendQuoteField -> { - header.add(attendQuoteField.getFieldName()); + header.add(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage()))); } ); } @@ -464,7 +464,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa employeeIds = employeeIds.stream().filter(empId -> !specialAttendEmpIds.contains(empId)).collect(Collectors.toList()); } // 4.获取考勤模块数据 - List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields, specialAttendRangeMap); + List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields, specialAttendRangeMap, specialAttendEmpIds); List pos = new ArrayList<>(); List values = new ArrayList<>(); // 5.考勤引用数据处理 @@ -627,11 +627,21 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa * @param attendQuoteFields * @return */ - private List> getAttendQuoteDataFromRemoteAttend(LocalDateRange attendCycleRange, List employeeIds, List attendQuoteFields, Map specialAttendRangeMap) { + private List> getAttendQuoteDataFromRemoteAttend(LocalDateRange attendCycleRange, List employeeIds, List attendQuoteFields, Map specialAttendRangeMap, Set specialAttendEmpIds) { List> attendQuoteSyncData = new ArrayList<>(); + // 获取哪些字段需要获取整月的值 + BaseBean baseBean = new BaseBean(); + List fullMonthAttendFields = Arrays.stream(baseBean.getPropValue("qzSalaryAttend", "full_month_attend_fields").split(",")).collect(Collectors.toList()); + List fullMonthAttendFieldList = new ArrayList<>(); + List specialAttednFieldList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(attendQuoteFields)) { + fullMonthAttendFieldList = attendQuoteFields.stream().filter(f -> fullMonthAttendFields.contains(f.getCode())).collect(Collectors.toList()); + specialAttednFieldList = attendQuoteFields.stream().filter(f -> !fullMonthAttendFields.contains(f.getCode())).collect(Collectors.toList()); + } + Attend4Salary attend4Salary = new Attend4Salary(); try { - int partSize = 500; + int partSize = 100; List> partition = Lists.partition(employeeIds, partSize); for (List part : partition) { attend4Salary.setBeginDate(attendCycleRange.getFromDate()); @@ -650,11 +660,35 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa } + + if (CollectionUtils.isNotEmpty(specialAttendEmpIds)) { + //班次信息 + String attendanceSerial = fullMonthAttendFieldList.stream() + .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) + .map(f -> f.getCode().replace("attendanceSerial_", "")) + .collect(Collectors.joining(",")); + attend4Salary = new Attend4Salary(); + for (Map.Entry entry : specialAttendRangeMap.entrySet()) { + String[] split = entry.getKey().split("_split"); + Long taxAgentId = split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : 0L; + Long employeeId = split.length > 1 && NumberUtils.isCreatable(split[1]) ? Long.valueOf(split[1]) : 0L; + attend4Salary.setBeginDate(attendCycleRange.getFromDate()); + attend4Salary.setEndDate(attendCycleRange.getEndDate()); + attend4Salary.setOnlyEmpIds(Collections.singletonList(employeeId)); + attend4Salary.setAttendanceSerial(attendanceSerial); + + List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); + + AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, fullMonthAttendFieldList, attendQuoteSyncData, taxAgentId); + } + } + //班次信息 - String attendanceSerial = attendQuoteFields.stream() + String attendanceSerial = specialAttednFieldList.stream() .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) .map(f -> f.getCode().replace("attendanceSerial_", "")) .collect(Collectors.joining(",")); + attend4Salary = new Attend4Salary(); for (Map.Entry entry : specialAttendRangeMap.entrySet()) { String[] split = entry.getKey().split("_split"); Long taxAgentId = split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : 0L; @@ -666,7 +700,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); - AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, attendQuoteFields, attendQuoteSyncData, taxAgentId); + AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, specialAttednFieldList, attendQuoteSyncData, taxAgentId); } } catch (Exception e) { log.error("salaryAttend获取考勤数据错误失败:{}", String.format("参数:%s,错误信息:%s", JSONObject.toJSONString(attend4Salary), e.getMessage()), e); @@ -737,7 +771,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa header.add(SalaryI18nUtil.getI18nLabel(86317, "证件号码")); // 动态列 for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) { - header.add(attendQuoteField.getFieldName()); + header.add(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage()))); } List> rows = new ArrayList<>(); rows.add(header); diff --git a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java index 2448254f9..9ddab6625 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -292,7 +293,7 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF Map column = columnsOptional.get(); updates.add(AttendQuoteFieldPO.builder() .code(column.get("code")) - .fieldName(column.get("name")) + .fieldName(Util.formatMultiLang(column.get("name"), String.valueOf(user.getLanguage()))) .updateTime(now) .build()); } @@ -312,7 +313,7 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF Optional> columnsOptional = columns.stream().filter(column -> code.equals(column.get("code"))).findFirst(); if (columnsOptional.isPresent()) { Map column = columnsOptional.get(); - saves.add(buildAttendQuoteField(column.get("code"), column.get("name"))); + saves.add(buildAttendQuoteField(column.get("code"), Util.formatMultiLang(column.get("name"), String.valueOf(user.getLanguage())))); } } if (CollectionUtils.isNotEmpty(saves)) { diff --git a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java index 5a0e2f28a..90d089c05 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.AttendQuoteBiz; @@ -10,6 +11,7 @@ import com.engine.salary.entity.datacollection.dto.AttendQuoteListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteQueryParam; import com.engine.salary.entity.datacollection.po.AttendQuotePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -21,6 +23,7 @@ import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryLoggerUtil; import com.engine.salary.util.db.MapperProxyFactory; @@ -34,6 +37,7 @@ import java.time.YearMonth; import java.util.Collection; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -74,6 +78,14 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic List list = getAttendQuoteMapper().list(queryParam); list = getAuthService(user).auth(list, AuthFilterTypeEnum.DATA_OPT, AttendQuoteListDTO.class); + //扣缴义务人搜索 + List taxAgentIds = queryParam.getTaxAgentIds(); + if(CollUtil.isNotEmpty(taxAgentIds)){ + List salarySobPOS = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); + Set sobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); + list = list.stream().filter(e -> sobIds.contains(e.getSalarySobId())).collect(Collectors.toList()); + } + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AttendQuoteListDTO.class); } diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java new file mode 100644 index 000000000..f82182e85 --- /dev/null +++ b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java @@ -0,0 +1,66 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; +import com.engine.salary.mapper.employeedeclare.EmployeeDeclareOptMapper; +import com.engine.salary.service.EmployeeDeclareOptService; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; + +import java.util.Date; +import java.util.List; + +import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; + +/** + * 员工报送记录 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class EmployeeDeclareOptServiceImpl extends Service implements EmployeeDeclareOptService { + + private EmployeeDeclareOptMapper getEmployeeDeclareOptMapper() { + return MapperProxyFactory.getProxy(EmployeeDeclareOptMapper.class); + } + + + @Override + public List listSome(EmployeeDeclareOptPO po) { + return getEmployeeDeclareOptMapper().listSome(po); + } + + @Override + public void record(EmployeeDeclareOptPO po) { + Date now = new Date(); + Long taxAgentId = po.getTaxAgentId(); + EmployeeDeclareOptPO optPO = getEmployeeDeclareOptMapper().getByTaxAgentId(taxAgentId); + + if (optPO == null) { + po = EmployeeDeclareOptPO.builder() + .id(IdGenerator.generate()) + .taxAgentId(taxAgentId) + .taxCycle(po.getTaxCycle()) + .status(po.getStatus()) + .lastOperate(po.getLastOperate()) + .lastOperateTime(now) + .creator((long)user.getUID()) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(DEFAULT_TENANT_KEY) + .build(); + getEmployeeDeclareOptMapper().insertIgnoreNull(po); + }else { + po.setTaxCycle(po.getTaxCycle()); + optPO.setStatus(po.getStatus()); + optPO.setLastOperate(po.getLastOperate()); + optPO.setLastOperateTime(now); + optPO.setUpdateTime(now); + getEmployeeDeclareOptMapper().updateIgnoreNull(optPO); + } + + } +} diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 51fd19482..b6d0dbd3b 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.TypeReference; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.siaccount.dto.QZReportListDTO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesAccountPO; @@ -16,23 +17,25 @@ import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.ResourceFromEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; +import com.engine.salary.mapper.SQLMapper; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.RecordsBuildService; import com.engine.salary.service.SIArchivesService; import com.engine.salary.service.SalaryEmployeeService; -import com.engine.salary.util.SalaryAssert; -import com.engine.salary.util.SalaryDateUtil; -import com.engine.salary.util.SalaryEnumUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; import java.math.BigDecimal; import java.text.ParseException; @@ -47,6 +50,7 @@ import java.util.stream.Collectors; * @Date 2022/4/11 * @Version V1.0 **/ +@Slf4j public class RecordsBuildServiceImpl extends Service implements RecordsBuildService { private EmployMapper getEmployMapper() { @@ -71,6 +75,10 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ return ServiceUtil.getService(SIArchivesServiceImpl.class, user); } + private SQLMapper getSQLMapper() { + return MapperProxyFactory.getProxy(SQLMapper.class); + } + @Override public List> buildCommonRecords(List list, Long employeeId, boolean dynamicEmpInfo) { // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); @@ -95,7 +103,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ Map collect = employeeByIds.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, Function.identity())); list.forEach(item -> { Map record = new HashMap<>(); - DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()); + DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()) ==null?new DataCollectionEmployee():collect.get(item.getEmployeeId()); record.put("id", item.getId()); record.put("employeeId", item.getEmployeeId()); record.put("billMonth", item.getBillMonth()); @@ -150,7 +158,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (socialComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); socialComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialComBase", v); @@ -170,7 +178,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } } } - record.put("fundPayOrg", item.getFundPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getFundPayOrg(),TaxAgentPO.builder().build())).getName()); + record.put("fundPayOrg", item.getFundPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getFundPayOrg(), TaxAgentPO.builder().build())).getName()); record.put("fundAccount", item.getFundAccount()); record.put("fundSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getFundSchemeId())); record.put("supplementFundAccount", item.getSupplementFundAccount()); @@ -185,7 +193,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundPerBase", v); @@ -197,7 +205,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (fundComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundComBase", v); @@ -217,7 +225,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } } } - record.put("otherPayOrg", item.getOtherPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getOtherPayOrg(),TaxAgentPO.builder().build())).getName()); + record.put("otherPayOrg", item.getOtherPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getOtherPayOrg(), TaxAgentPO.builder().build())).getName()); record.put("otherSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getOtherSchemeId())); if (StringUtils.isNotEmpty(item.getOtherPaymentBaseString()) || StringUtils.isNotEmpty(item.getOtherPaymentComBaseString())) { Map otherJson = JSON.parseObject(item.getOtherPaymentBaseString(), new HashMap().getClass()); @@ -230,7 +238,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherPerBase", v); @@ -242,7 +250,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (otherComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherComBase", v); @@ -264,7 +272,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } if (StringUtils.isNotEmpty(item.getSocialPerJson())) { Map socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap().getClass()); - if(socialJson!=null){ + if (socialJson != null) { socialJson.forEach((k, v) -> { record.put(k + "socialPer", (String) v); }); @@ -297,7 +305,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ // record.put("socialSpecialSum", socialSpecialSum[0]); if (StringUtils.isNotEmpty(item.getFundPerJson())) { Map fundPerJson = JSON.parseObject(item.getFundPerJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "fundPer", (String) v); }); @@ -329,7 +337,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ // record.put("fundSpecialSum", fundSpecialSum[0]); if (StringUtils.isNotEmpty(item.getOtherPerJson())) { Map fundPerJson = JSON.parseObject(item.getOtherPerJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "otherPer", (String) v); }); @@ -340,7 +348,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("perSum", item.getPerSum()); if (StringUtils.isNotEmpty(item.getSocialComJson())) { Map fundPerJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "socialCom", (String) v); }); @@ -352,7 +360,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("socialComSum", item.getSocialComSum()); if (StringUtils.isNotEmpty(item.getFundComJson())) { Map fundPerJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "fundCom", (String) v); }); @@ -362,7 +370,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("fundComSum", item.getFundComSum()); if (StringUtils.isNotEmpty(item.getOtherComJson())) { Map fundPerJson = JSON.parseObject(item.getOtherComJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "otherCom", (String) v); }); @@ -375,7 +383,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { socialSpecialJson.forEach((k, v) -> { // String standardSocialPer = Util.null2String(record.get(k + "socialPer")); // BigDecimal standardSocialPerVal = new BigDecimal(0); @@ -399,7 +407,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { fundSpecialJson.forEach((k, v) -> { // String standardFundPer = Util.null2String(record.get(k + "fundPer")); // BigDecimal standardFundPerVal = new BigDecimal(0); @@ -515,4 +523,447 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } return new SimpleDateFormat(SalaryI18nUtil.getI18nLabel(100519, "补缴yyyy年MM月")).format(date); } + + @Override + public List> buildQzReport(List list, Long employeeId, boolean dynamicEmpInfo) { + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); + List> result = new ArrayList<>(); + if (CollectionUtils.isEmpty(list)) { + return result; + } + List employeeIds = list.stream().map(item -> item.getEmployeeId()).distinct().collect(Collectors.toList()); + List employeeByIds = new ArrayList<>(); + List> partition = Lists.partition(employeeIds, 1000); + + + BaseBean bb = new BaseBean(); + String actualWorkplaceField = bb.getPropValue("hrmSalaryQZ", "actualWorkplaceField"); + Map actualWorkplaceMap = new HashMap<>(); + for (List ids : partition) { + employeeByIds.addAll(getSalaryEmployeeService(user).getEmployeeByIdsAll(ids)); + //获取实际工作地 + RecordSet rs = new RecordSet(); + String sql = String.format("select id ,%s from cus_fielddata where scopeid =3 and id in(%s)", actualWorkplaceField, ids.stream().map(Object::toString).collect(Collectors.joining(","))); + rs.executeQuery(sql); + while (rs.next()) { + String processField = rs.getString("id"); + String actualWorkplace = rs.getString(actualWorkplaceField); + actualWorkplaceMap.put(Long.parseLong(processField), actualWorkplace); + } + } + + Map laborWorkplaceMap = new HashMap<>(); + for (List ids : partition) { + //劳动关系地 + RecordSet rs = new RecordSet(); + String sql = String.format("select a.ygxm,b.ztmc from uf_htxy a left join uf_htzt b on a.htgsmc = b.id where a.htlx=0 and a.ygxm in (%s) ORDER BY a.htqsrq desc", ids.stream().map(Object::toString).collect(Collectors.joining(","))); + rs.executeQuery(sql); + while (rs.next()) { + String processField = rs.getString("ygxm"); + String laborWorkplace = rs.getString("ztmc"); + if (!laborWorkplaceMap.containsKey(Long.parseLong(processField))) { + laborWorkplaceMap.put(Long.parseLong(processField), laborWorkplace); + } + } + } + + if (CollectionUtils.isEmpty(employeeByIds)) { + return result; + } + List paymentList = getTaxAgentMapper().listAll(); + + SalaryAssert.notEmpty(paymentList, SalaryI18nUtil.getI18nLabel(100341, "暂无扣缴义务人")); + Map paymentMap = paymentList.stream().collect(Collectors.toMap(TaxAgentPO::getId, Function.identity())); + Map collect = employeeByIds.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, Function.identity())); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + + + list.forEach(item -> { + Map record = new HashMap<>(); + DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()) ==null?new DataCollectionEmployee():collect.get(item.getEmployeeId()); + record.put("id", item.getId()); + record.put("paymentOrganizationName", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); + record.put("workcode", StringUtils.isBlank(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()); + record.put("userName", simpleEmployee.getUsername()); + record.put("actualWorkplace", actualWorkplaceMap.getOrDefault(item.getEmployeeId(), "")); + record.put("laborWorkplace", laborWorkplaceMap.getOrDefault(item.getEmployeeId(), "")); + String[] depList = new String[0]; + try { + depList = departmentComInfo.getDepartmentRealPath(simpleEmployee.getDepartmentId().toString(), ",", "").split(","); + } catch (Exception ex) { + log.error("获取部门信息失败" + simpleEmployee.getDepartmentId() + ex); + depList = new String[0]; + } + record.put("firstDepartmentName", depList.length >= 1 ? Util.formatMultiLang(depList[depList.length - 1], String.valueOf(user.getLanguage())) : ""); + record.put("secondDepartmentName", depList.length >= 2 ? Util.formatMultiLang(depList[depList.length - 2], String.valueOf(user.getLanguage())) : ""); + record.put("jobtitleName", simpleEmployee.getJobtitleName()); + record.put("companystartdate", simpleEmployee.getCompanystartdate()); + record.put("dismissdate", simpleEmployee.getStatus() != null && UserStatusEnum.getUnavailableStatus().contains(simpleEmployee.getStatus()) ? simpleEmployee.getDismissdate() : ""); + + + record.put("supplementaryMonth", item.getSupplementaryMonth()); + ResourceFromEnum from = SalaryEnumUtil.enumMatchByValue(item.getResourceFrom(), ResourceFromEnum.values(), ResourceFromEnum.class); + + record.put("idNo", Util.null2String(simpleEmployee.getIdNo())); + record.put("sourceFrom", SalaryI18nUtil.getI18nLabel(from.getLabelId(), from.getDefaultLabel())); + record.put("socialPayOrg", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); + record.put("socialAccount", item.getSocialAccount()); + + record.put("socialSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getSocialSchemeId())); + if (StringUtils.isNotEmpty(item.getSocialPaymentBaseString()) || StringUtils.isNotEmpty(item.getSocialPaymentComBaseString())) { + Map socialJson = JSON.parseObject(item.getSocialPaymentBaseString(), new HashMap().getClass()); +// if(socialJson!=null){ +// socialJson.forEach((k, v) -> { +// record.put(k + "socialBase", (String) v); +// }); +// } + if (welBaseDiffSign) { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "socialPerBase", v); + } + }); + } + Map socialComJson = JSON.parseObject(item.getSocialPaymentComBaseString(), new TypeReference>() { + }); + if (socialComJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + socialComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "socialComBase", v); + } + }); + } + } else { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "socialBase", v); + } + }); + } + } + } + record.put("fundPayOrg", item.getFundPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getFundPayOrg(), TaxAgentPO.builder().build())).getName()); + record.put("fundAccount", item.getFundAccount()); + record.put("fundSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getFundSchemeId())); + record.put("supplementFundAccount", item.getSupplementFundAccount()); + if (StringUtils.isNotEmpty(item.getFundPaymentBaseString()) || StringUtils.isNotEmpty(item.getFundPaymentComBaseString())) { + Map fundJson = JSON.parseObject(item.getFundPaymentBaseString(), new HashMap().getClass()); +// if(fundJson!=null){ +// fundJson.forEach((k, v) -> { +// record.put(k + "fundBase", (String) v); +// }); +// } + if (welBaseDiffSign) { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "fundPerBase", v); + } + }); + } + Map fundComJson = JSON.parseObject(item.getFundPaymentComBaseString(), new TypeReference>() { + }); + if (fundComJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + fundComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "fundComBase", v); + } + }); + } + } else { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "fundBase", v); + } + }); + } + } + } + record.put("otherPayOrg", item.getOtherPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getOtherPayOrg(), TaxAgentPO.builder().build())).getName()); + record.put("otherSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getOtherSchemeId())); + if (StringUtils.isNotEmpty(item.getOtherPaymentBaseString()) || StringUtils.isNotEmpty(item.getOtherPaymentComBaseString())) { + Map otherJson = JSON.parseObject(item.getOtherPaymentBaseString(), new HashMap().getClass()); +// if(otherJson!=null){ +// otherJson.forEach((k, v) -> { +// record.put(k + "otherBase", (String) v); +// }); +// } + if (welBaseDiffSign) { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "otherPerBase", v); + } + }); + } + Map otherComJson = JSON.parseObject(item.getOtherPaymentComBaseString(), new TypeReference>() { + }); + if (otherComJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + otherComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "otherComBase", v); + } + }); + } + } else { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "otherBase", v); + } + }); + } + } + } + if (StringUtils.isNotEmpty(item.getSocialPerJson())) { + Map socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap().getClass()); + if (socialJson != null) { + socialJson.forEach((k, v) -> { + record.put(k + "socialPer", (String) v); + }); + } + + } + //补缴 + if (StringUtils.isNotEmpty(item.getBSocialPerJson())) { + Map socialJson = JSON.parseObject(item.getBSocialPerJson(), new HashMap().getClass()); + if (socialJson != null) { + socialJson.forEach((k, v) -> { + record.put(k + "bSocialPer", (String) v); + }); + } + + } + // + // // 钱智 社保差异 + // final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; + // if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { + // Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); + // if(socialSpecialJson!=null){ + // socialSpecialJson.forEach((k, v) -> { + // String standardSocialPer = Util.null2String(record.get(k + "socialPer")); + // BigDecimal standardSocialPerVal = new BigDecimal(0); + // BigDecimal specialSocialPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardSocialPer)) { + // standardSocialPerVal = new BigDecimal(standardSocialPer); + // } + // if (v != null && NumberUtils.isCreatable(v.toString())) { + // specialSocialPerVal = new BigDecimal(v.toString()); + // } + // BigDecimal subtract = specialSocialPerVal.subtract(standardSocialPerVal); + // socialSpecialSum[0] = socialSpecialSum[0].add(subtract); + // record.put(k + "socialSpecial", subtract.toString()); + // }); + // } + // } + record.put("socialPerSum", item.getSocialPerSum()); + // record.put("socialSpecialSum", socialSpecialSum[0]); + if (StringUtils.isNotEmpty(item.getFundPerJson())) { + Map fundPerJson = JSON.parseObject(item.getFundPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "fundPer", (String) v); + }); + } + + } + if (StringUtils.isNotEmpty(item.getBFundPerJson())) { + Map fundPerJson = JSON.parseObject(item.getBFundPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bFundPer", (String) v); + }); + } + + } + // // 钱智 公积金差异 + // final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; + // if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { + // Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); + // if(fundSpecialJson!=null){ + // fundSpecialJson.forEach((k, v) -> { + // String standardFundPer = Util.null2String(record.get(k + "fundPer")); + // BigDecimal standardFundPerVal = new BigDecimal(0); + // BigDecimal specialFundPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardFundPer)) { + // standardFundPerVal = new BigDecimal(standardFundPer); + // } + // if (v != null && NumberUtils.isCreatable(v.toString())) { + // specialFundPerVal = new BigDecimal(v.toString()); + // } + // BigDecimal subtract = specialFundPerVal.subtract(standardFundPerVal); + // fundSpecialSum[0] = fundSpecialSum[0].add(subtract); + // record.put(k + "fundSpecial", subtract.toString()); + // }); + // } + // } + record.put("fundPerSum", item.getFundPerSum()); + // record.put("fundSpecialSum", fundSpecialSum[0]); + if (StringUtils.isNotEmpty(item.getOtherPerJson())) { + Map fundPerJson = JSON.parseObject(item.getOtherPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "otherPer", (String) v); + }); + } + } + if (StringUtils.isNotEmpty(item.getBOtherPerJson())) { + Map fundPerJson = JSON.parseObject(item.getBOtherPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bOtherPer", (String) v); + }); + } + + } + record.put("otherPerSum", item.getOtherPerSum()); + record.put("perSum", item.getPerSum()); + record.put("bPerSum", item.getBPerSum()); + if (StringUtils.isNotEmpty(item.getSocialComJson())) { + Map fundPerJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "socialCom", (String) v); + }); + } + } + if (StringUtils.isNotEmpty(item.getBSocialComJson())) { + Map fundPerJson = JSON.parseObject(item.getBSocialComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bSocialCom", (String) v); + }); + } + } + record.put("socialComSum", item.getSocialComSum()); + if (StringUtils.isNotEmpty(item.getFundComJson())) { + Map fundPerJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "fundCom", (String) v); + }); + } + + } + if (StringUtils.isNotEmpty(item.getBFundComJson())) { + Map fundPerJson = JSON.parseObject(item.getBFundComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bFundCom", (String) v); + }); + } + + } + record.put("fundComSum", item.getFundComSum()); + if (StringUtils.isNotEmpty(item.getOtherComJson())) { + Map fundPerJson = JSON.parseObject(item.getOtherComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "otherCom", (String) v); + }); + } + + } + if (StringUtils.isNotEmpty(item.getBOtherComJson())) { + Map fundPerJson = JSON.parseObject(item.getBOtherComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bOtherCom", (String) v); + }); + } + + } + record.put("otherComSum", item.getOtherComSum()); + + // 钱智 社保差异 + final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; + if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { + Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); + if (socialSpecialJson != null) { + socialSpecialJson.forEach((k, v) -> { + // String standardSocialPer = Util.null2String(record.get(k + "socialPer")); + // BigDecimal standardSocialPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardSocialPer)) { + // standardSocialPerVal = new BigDecimal(standardSocialPer); + // } + BigDecimal specialComVal = v == null ? new BigDecimal("0") : new BigDecimal(v.toString()); + String standardSocialCom = Util.null2String(record.get(k + "socialCom")); + BigDecimal standardComPerVal = new BigDecimal(0); + if (NumberUtils.isCreatable(standardSocialCom)) { + standardComPerVal = new BigDecimal(standardSocialCom); + } + BigDecimal subtract = specialComVal.subtract(standardComPerVal); + socialSpecialSum[0] = socialSpecialSum[0].add(subtract); + record.put(k + "socialSpecial", subtract.toString()); + }); + } + } + record.put("socialSpecialSum", socialSpecialSum[0].toPlainString()); + // 钱智 公积金差异 + final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; + if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { + Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); + if (fundSpecialJson != null) { + fundSpecialJson.forEach((k, v) -> { + // String standardFundPer = Util.null2String(record.get(k + "fundPer")); + // BigDecimal standardFundPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardFundPer)) { + // standardFundPerVal = new BigDecimal(standardFundPer); + // } + BigDecimal specialComVal = v == null ? new BigDecimal("0") : new BigDecimal(v.toString()); + String standardFundCom = Util.null2String(record.get(k + "fundCom")); + BigDecimal standardFundComVal = new BigDecimal(0); + if (NumberUtils.isCreatable(standardFundCom)) { + standardFundComVal = new BigDecimal(standardFundCom); + } + BigDecimal subtract = specialComVal.subtract(standardFundComVal); + fundSpecialSum[0] = fundSpecialSum[0].add(subtract); + record.put(k + "fundSpecial", subtract.toString()); + }); + } + } + record.put("fundSpecialSum", fundSpecialSum[0].toPlainString()); + record.put("specialSum", socialSpecialSum[0].add(fundSpecialSum[0]).toPlainString()); + record.put("comSum", item.getComSum()); + record.put("bComSum", item.getBComSum()); + record.put("socialSum", item.getSocialSum()); + record.put("fundSum", item.getFundSum()); + record.put("otherSum", item.getOtherSum()); + record.put("total", item.getTotal()); + record.put("btotal", item.getBTotal()); + record.put("totalSum", SalaryEntityUtil.empty2Zero(item.getTotal()).add(SalaryEntityUtil.empty2Zero(item.getBTotal())).toPlainString()); + result.add(record); + }); + return result; + } } \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index 8a447abba..7c2262f15 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -36,6 +36,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import weaver.general.Util; import weaver.hrm.User; import java.lang.reflect.Field; @@ -483,7 +484,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic List formulaVars = fields.stream().map(e -> { FormulaVar formulaVar = new FormulaVar(); formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + e.getId()); - formulaVar.setName(e.getFieldName()); + formulaVar.setName(Util.formatMultiLang(e.getFieldName(), String.valueOf(user.getLanguage()))); formulaVar.setSource("" + referenceEnum.getValue()); formulaVar.setFieldType(DataType.NUMBER); return formulaVar; diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 63ebeb958..0b65195af 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -10,12 +10,15 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.cloudstore.eccom.pc.table.*; import com.cloudstore.eccom.result.WeaResultMsg; +import com.engine.common.service.HrmCommonService; +import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.TaxAgentBiz; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.SalaryWeaTable; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; @@ -86,6 +89,7 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; +import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; @@ -172,7 +176,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } private SalarySysConfService getSalarySysConfService(User user) { - return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } private InsuranceSchemeMapper getInsuranceSchemeMapper() { @@ -358,7 +362,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //非系统人员核算明细 List extList = getInsuranceAccountDetailMapper().extList(queryParam); list.addAll(extList); - PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(),queryParam.getPageSize(), + PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, InsuranceAccountDetailPO.class); List insuranceAccountDetailPOS = pageInfo.getList(); encryptUtil.decryptList(insuranceAccountDetailPOS, InsuranceAccountDetailPO.class); @@ -415,7 +419,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //非系统人员核算明细 List extList = getInsuranceAccountDetailMapper().extList(queryParam); list.addAll(extList); - PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(),queryParam.getPageSize(), + PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, InsuranceAccountDetailPO.class); List insuranceAccountDetailPOS = pageInfo.getList(); encryptUtil.decryptList(insuranceAccountDetailPOS, InsuranceAccountDetailPO.class); @@ -929,7 +933,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream() .filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue()) || f.getPaymentStatus().equals(PaymentStatusEnum.REPAIR.getValue()) - || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue()) ) + || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue())) .collect(Collectors.toList()); List list = buildNewInsuranceDetailPOS(insuranceAccountDetailPOS); Map siAcctResultWithEmpAndPayStatus = insuranceAccountDetailPOS.stream() @@ -1029,7 +1033,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { socialSpecialJson.forEach((k, v) -> { // String standardSocialPer = Util.null2String(record.get(k + "socialCommonPer")); // BigDecimal standardSocialPerVal = new BigDecimal(0); @@ -1099,7 +1103,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { fundSpecialJson.forEach((k, v) -> { // String standardFundPer = Util.null2String(record.get(k + "fundCommonPer")); // BigDecimal standardFundPerVal = new BigDecimal(0); @@ -1253,7 +1257,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "socialPer"); commonResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "正常缴纳个人"), item.getId() + "socialCommonPer"); - commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())) , item.getId() + "socialSpecial"); + commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())), item.getId() + "socialSpecial"); repairResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补缴个人"), item.getId() + "socialRepairPer"); balanceResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补差个人"), item.getId() + "socialBalancePer"); } @@ -1263,7 +1267,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "fundPer"); commonResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "正常缴纳个人"), item.getId() + "fundCommonPer"); - commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())) , item.getId() + "fundSpecial"); + commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())), item.getId() + "fundSpecial"); repairResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补缴个人"), item.getId() + "fundRepairPer"); balanceResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补差个人"), item.getId() + "fundBalancePer"); } @@ -1349,7 +1353,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream() .filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue()) || f.getPaymentStatus().equals(PaymentStatusEnum.REPAIR.getValue()) - || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue()) ) + || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue())) .collect(Collectors.toList()); List list = buildNewInsuranceDetailPOS(insuranceAccountDetailPOS); // InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(list); @@ -1599,6 +1603,14 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // if (num > 0) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "已被薪酬核算给核算过,无法重新核算!")); // } + //封存状态,不允许重新核算 + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(param.getId()); + Integer fc = po.getFc(); + if (FCEnum.parseByValue(fc) == FCEnum.FC) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "已封存,无法重新核算!")); + } + + param.setBillStatus(0); // getSiAccountBiz(user).updateById(param); updateById(param); @@ -1639,7 +1651,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "账单月份"); // List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "taxAgentName", "billMonth"); - List dataIndexList = Lists.newArrayList("userName", "department", "mobile", "workcode","idNo", "socialPayOrg", "billMonth"); + List dataIndexList = Lists.newArrayList("userName", "department", "mobile", "workcode", "idNo", "socialPayOrg", "billMonth"); // 查询福利核算项目 List welfareNames = (List) param.getWelfareNames(); headerList.addAll(welfareNames); @@ -1762,7 +1774,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Long taxAgentId = 0L; List list = new ArrayList<>(); - + String username = (String) map.getOrDefault("姓名", ""); String billMonth = (String) map.getOrDefault("账单月份", ""); String taxAgentName = (String) map.getOrDefault("个税扣缴义务人", ""); String supplementaryMonth = (String) map.getOrDefault("补缴月份", ""); @@ -1815,7 +1827,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, dataValue, deparmentName, mobile, workcode,idNo, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -1845,7 +1857,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } - if (!isError){ + if (!isError) { List employeeIds = new ArrayList<>(); employeeIds.add(employeeId); //如果福利核算信息查询不到唯一匹配数据,不支持导入 @@ -1865,12 +1877,12 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } //校验补缴人员是否存在福利档案基础信息,并且runStatus处于正在缴纳或者待减员 InsuranceArchivesBaseInfoPO insuranceBaseInfo = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(paymentOrganization, employeeId); - if (insuranceBaseInfo == null || !(insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()) || insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue())) ) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "补缴人员中存在未设置福利档案人员或相关人员不在福利在缴人员中,不可新建补缴信息!")); + if (insuranceBaseInfo == null || !(insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()) || insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()))) { + throw new SalaryRunTimeException(username + SalaryI18nUtil.getI18nLabel(0, "补缴未设置福利档案人员或不在福利在缴人员中,不可新建补缴信息!")); } List empIdsInPayMonthRange = listCanPayEmpIds(paymentOrganization, billMonth.substring(0, 7)); if (!empIdsInPayMonthRange.contains(employeeId)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99920, "无核算人员")); + throw new SalaryRunTimeException(username + SalaryI18nUtil.getI18nLabel(99920, "无核算人员")); } DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(employeeId); // 封装InsuranceAccountDetailPO @@ -1902,10 +1914,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); insuranceAccountDetailPO.setDeleteType(0); InsuranceAccountDetailPO insertPO = handleInsuranceAccountDetail4AddSupplementary(insuranceAccountDetailPO, map); - if(!checkBalancePayInsurance(insertPO)) { + if (!checkBalancePayInsurance(insertPO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); excelComments.add(errorMessageMap); } else { insertInsuranceAccountDetailList.add(insertPO); @@ -1913,23 +1925,23 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员")); excelComments.add(errorMessageMap); } } else if (list.size() > 1) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项")); excelComments.add(errorMessageMap); } else { //拼装待更新数据 encryptUtil.decryptList(list, InsuranceAccountDetailPO.class); InsuranceAccountDetailPO updatePO = handleInsuranceAccountDetail(list.get(0), map); //判断导入福利项是否符合福利方案设置缴纳项 - if(!checkBalancePayInsurance(updatePO)) { + if (!checkBalancePayInsurance(updatePO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); excelComments.add(errorMessageMap); } else { updateInsuranceAccountDetailList.add(updatePO); @@ -1952,7 +1964,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 将待插入列表加密 encryptUtil.encryptList(insertInsuranceAccountDetailList, InsuranceAccountDetailPO.class); //更新 - for(InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { + for (InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { // getSiAccountBiz(user).updateByEmployeeIdAndBillMonth(po); updateByEmployeeIdAndBillMonth(po); } @@ -2052,7 +2064,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "账单月份", "补缴月份"); - List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode","idNo", "taxAgentName", "billMonth", "supplementaryMonth"); + List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "idNo", "taxAgentName", "billMonth", "supplementaryMonth"); // 查询福利核算项目 List welfareNames = (List) param.getWelfareNames(); headerList.addAll(welfareNames); @@ -2077,7 +2089,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 获取福利台账中的补缴数据 - * @param billMonth 账单月份 + * + * @param billMonth 账单月份 * @param paymentOrganization 个税扣缴义务人id * @return */ @@ -2094,13 +2107,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(paymentOrganization) + .filter(f -> f.getPaymentOrganization().equals(paymentOrganization) && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); supplyDataList = supplyDataList.stream().filter(f -> canAccountIds.contains(f.getEmployeeId())).collect(Collectors.toList()); - for(InsuranceAccountDetailPO po : supplyDataList) { + for (InsuranceAccountDetailPO po : supplyDataList) { Map resultMap = new HashMap<>(); employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); @@ -2119,7 +2132,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 获取福利台账中的补差数据 - * @param billMonth 账单月份 + * + * @param billMonth 账单月份 * @param paymentOrganization 个税扣缴义务人id * @return */ @@ -2134,7 +2148,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List balanceDataList = getInsuranceAccountDetailMapper().queryBalanceListByBillMonth(billMonth, paymentOrganization); - for(InsuranceAccountDetailPO po : balanceDataList) { + for (InsuranceAccountDetailPO po : balanceDataList) { Map resultMap = new HashMap<>(); employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); @@ -2153,7 +2167,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 获取福利台账中的正常缴纳数据 - * @param billMonth 账单月份 + * + * @param billMonth 账单月份 * @param paymentOrganization 个税扣缴义务人id * @return */ @@ -2169,13 +2184,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(paymentOrganization) + .filter(f -> f.getPaymentOrganization().equals(paymentOrganization) && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); normalDataList = normalDataList.stream().filter(f -> canAccountIds.contains(f.getEmployeeId())).collect(Collectors.toList()); - for(InsuranceAccountDetailPO po : normalDataList) { + for (InsuranceAccountDetailPO po : normalDataList) { Map resultMap = new HashMap<>(); employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); @@ -2216,7 +2231,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { && !"账单月份".equals(map.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - for(Map.Entry entry : toDealMap.entrySet()) { + for (Map.Entry entry : toDealMap.entrySet()) { //判断元素是否属于福利类 String keyName = entry.getKey(); //获取元素名后缀,方便之后判断“个人”或“单位” @@ -2412,7 +2427,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap<>() : socialComJson; Map finalSocialComJson = socialComJson; @@ -2432,7 +2447,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(insuranceAccountDetailPO.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap<>() : fundComJson; Map finalFundComJson = fundComJson; @@ -2484,7 +2499,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { && !"账单月份".equals(map.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - for(Map.Entry entry : toDealMap.entrySet()) { + for (Map.Entry entry : toDealMap.entrySet()) { //判断元素是否属于福利类 String keyName = entry.getKey(); //获取元素名后缀,方便之后判断“个人”或“单位” @@ -2674,7 +2689,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * map中value值求和 */ - public String sumOfMapValue(Map welfarePay){ + public String sumOfMapValue(Map welfarePay) { BigDecimal sum = new BigDecimal("0"); for (String value : welfarePay.values()) { sum = sum.add(new BigDecimal(value)); @@ -2690,7 +2705,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map toDelMap = new HashMap<>(); //校验newMap中的value值是否为整数或者小数 - for(Map.Entry newEntry : newMap.entrySet()) { + for (Map.Entry newEntry : newMap.entrySet()) { String newValue = newEntry.getValue(); int l = newValue.length(); @@ -2727,7 +2742,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 判断字符串是否为整数或者小数或者负数 */ - public static boolean isNumeric(String str){ + public static boolean isNumeric(String str) { // Pattern pattern = Pattern.compile("[0-9]*\\.?[0-9]+"); Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); @@ -2747,8 +2762,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //校验内容:billMonth的长度是否为7、年月连接符是否为“-” String connector; - if(billMonth.length() == 7){ - connector = billMonth.substring(4,5); + if (billMonth.length() == 7) { + connector = billMonth.substring(4, 5); return "-".equals(connector); } else { return false; @@ -2883,8 +2898,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List socialComBaseColumns = Lists.newArrayList(); if (welBaseDiffSign) { for (ICategoryPO po : socialWelfareList) { - socialPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); - socialComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); + socialPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); + socialComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); } socialBaseColumns.addAll(socialPerBaseColumns); socialBaseColumns.addAll(socialComBaseColumns); @@ -2900,8 +2915,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List fundComBaseColumns = Lists.newArrayList(); if (welBaseDiffSign) { for (ICategoryPO po : fundWelfareList) { - fundPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); - fundComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); + fundPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); + fundComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); } fundBaseColumns.addAll(fundPerBaseColumns); fundBaseColumns.addAll(fundComBaseColumns); @@ -2917,8 +2932,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List otherComBaseColumns = Lists.newArrayList(); if (welBaseDiffSign) { for (ICategoryPO po : otherWelfareList) { - otherPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); - otherComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); + otherPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); + otherComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); } otherBaseColumns.addAll(otherPerBaseColumns); otherBaseColumns.addAll(otherComBaseColumns); @@ -2931,33 +2946,33 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //社保个人(生育保险个人、工伤保险个人、失业保险个人、养老保险个人、医疗保险个人) List socialPerColumns = new ArrayList<>(); for (ICategoryPO po : socialWelPerList) { - socialPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"个人")); + socialPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "个人")); } //住房公积金个人、补充住房公积金个人 List fundPerColumns = new ArrayList<>(); for (ICategoryPO po : fundWelPerList) { - fundPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"个人")); + fundPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "个人")); } //其他个人(比如企业年金个人) List otherPerColumns = new ArrayList<>(); for (ICategoryPO po : otherWelPerList) { - otherPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"个人")); + otherPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "个人")); } //社保单位(生育保险单位、工伤保险单位、失业保险单位、养老保险单位、医疗保险单位) List socialComColumns = new ArrayList<>(); for (ICategoryPO po : socialWelComList) { - socialComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"单位")); + socialComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "单位")); } //住房公积金单位、补充住房公积金单位 List fundComColumns = new ArrayList<>(); for (ICategoryPO po : fundWelComList) { - fundComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"单位")); + fundComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "单位")); } //其他单位(比如企业年金单位) List otherComColumns = new ArrayList<>(); for (ICategoryPO po : otherWelComList) { - otherComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"单位")); + otherComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "单位")); } Map> welColumnMap = new HashMap<>(); @@ -3031,10 +3046,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (ICategoryPO po : socialWelfareList) { result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"个人"), po.getId() + "socialPerBase"); + + SalaryI18nUtil.getI18nLabel(0, "个人"), po.getId() + "socialPerBase"); result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"单位"), po.getId() + "socialComBase"); + + SalaryI18nUtil.getI18nLabel(0, "单位"), po.getId() + "socialComBase"); } } else { for (ICategoryPO po : socialWelfareList) { @@ -3048,10 +3063,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (ICategoryPO po : fundWelfareList) { result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"个人"), po.getId() + "fundPerBase"); + + SalaryI18nUtil.getI18nLabel(0, "个人"), po.getId() + "fundPerBase"); result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"单位"), po.getId() + "fundComBase"); + + SalaryI18nUtil.getI18nLabel(0, "单位"), po.getId() + "fundComBase"); } } else { for (ICategoryPO po : fundWelfareList) { @@ -3065,10 +3080,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (ICategoryPO po : otherWelfareList) { result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"个人"), po.getId() + "otherPerBase"); + + SalaryI18nUtil.getI18nLabel(0, "个人"), po.getId() + "otherPerBase"); result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"单位"), po.getId() + "otherComBase"); + + SalaryI18nUtil.getI18nLabel(0, "单位"), po.getId() + "otherComBase"); } } else { for (ICategoryPO po : otherWelfareList) { @@ -3224,7 +3239,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo,null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -3254,7 +3269,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } - if (!isError){ + if (!isError) { List employeeIds = new ArrayList<>(); employeeIds.add(employeeId); //根据员工id、个税扣缴义务人id、账单月份查询,如果当前对比表中存在数据,则记录为待删除数据 @@ -3303,8 +3318,9 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 将excel导入的数据行组装成ExcelInsuranceDetailPO对象 + * * @param billMonth 对比的账单月份 - * @param baseMap excel导入的对比数据 + * @param baseMap excel导入的对比数据 */ private ExcelInsuranceDetailPO handleExcelInsuranceDetail(String billMonth, Long employeeId, Long paymentOrganization, Map baseMap, Map welColumnNameCodeMap) { // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); @@ -3340,7 +3356,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { && !"工号".equals(map.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - for(Map.Entry entry : toDealMap.entrySet()) { + for (Map.Entry entry : toDealMap.entrySet()) { // //判断元素是否属于福利类 // String keyName = entry.getKey(); // //获取元素名后缀,方便之后判断“个人”或“单位”或者“基数” @@ -3578,7 +3594,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { taskExecutor.execute(() -> { if (paymentOrganization != null && billMonth != null) { - InsuranceAccountDetailParam refreshParam =new InsuranceAccountDetailParam(); + InsuranceAccountDetailParam refreshParam = new InsuranceAccountDetailParam(); refreshParam.setBillMonth(billMonth); refreshParam.setPaymentOrganization(paymentOrganization.toString()); PageInfo pageInfos = overView(refreshParam); @@ -3608,6 +3624,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } }); } + /** * 将通过id获取InsuranceAccountDetailPO中的社保、公积金、其他福利个人和公司缴纳数据 */ @@ -3756,7 +3773,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } //对比可进行缴纳福利项与上面的已有福利项生成map for (Map balancePayItem : balancePaymentGroup) { - Map target = (Map)targetMap.get(balancePayItem.get("insuranceId") + "-" + balancePayItem.get("paymentScope")); + Map target = (Map) targetMap.get(balancePayItem.get("insuranceId") + "-" + balancePayItem.get("paymentScope")); if (targetMap.get(balancePayItem.get("insuranceId") + "-" + balancePayItem.get("paymentScope")) == null) { balancePayItem.put("insuranceValue", ""); balancePayItem.put("validNum", balancePayItem.get("validNum")); @@ -3774,15 +3791,16 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public String getTotalSign(String total) { if (StringUtils.isNotBlank(total)) { - return total.contains(SalaryI18nUtil.getI18nLabel(0,"社保")) ? "social" : (total.contains(SalaryI18nUtil.getI18nLabel(0,"公积金")) ? "fund" : "other" ); + return total.contains(SalaryI18nUtil.getI18nLabel(0, "社保")) ? "social" : (total.contains(SalaryI18nUtil.getI18nLabel(0, "公积金")) ? "fund" : "other"); } else { return ""; } } + public void getPaymentGroup(String baseJson, String groupType, String welfareType, Map dataMap, List addGroups) { if (StringUtils.isBlank(baseJson)) { - addGroups.add(new SearchConditionGroup(welfareType + groupType +"缴纳", true, null)); + addGroups.add(new SearchConditionGroup(welfareType + groupType + "缴纳", true, null)); return; } @@ -3804,7 +3822,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { baseJsonMap.put(groupPrefix + entry.getKey(), entry.getValue()); } dataMap.putAll(baseJsonMap); - addGroups.add(new SearchConditionGroup(welfareType + groupType +"缴纳", true, inputItems)); + addGroups.add(new SearchConditionGroup(welfareType + groupType + "缴纳", true, inputItems)); } /** @@ -3982,7 +4000,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap() : socialComJson; Map finalSocialComJson = socialComJson; @@ -4002,7 +4020,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(insuranceAccountDetailPO.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap() : fundComJson; Map finalFundComJson = fundComJson; @@ -4042,8 +4060,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86317, "工号"), SalaryI18nUtil.getI18nLabel(86317, "证件号码"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人") - ); - List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode","idNo", "taxAgentName"); + ); + List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "idNo", "taxAgentName"); // 查询福利核算项目 List welfareNames = (List) param.getWelfareNames(); headerList.addAll(welfareNames); @@ -4190,7 +4208,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, name, departmentName, mobile, workcode,idNo, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, name, departmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -4220,7 +4238,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } - if (!isError){ + if (!isError) { //如果福利核算信息查询不到唯一匹配数据,不支持导入 //根据员工id、个税扣缴义务人id、账单月份查询补差数据 @@ -4232,28 +4250,28 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (list.isEmpty()) { //新增数据情况 - InsuranceAccountDetailPO createPO = buildBalanceAccountDetail(paymentOrganization, insuranceCategoryPOS, singleAccount, billMonth, employeeId, currentEmployeeId); + InsuranceAccountDetailPO createPO = buildBalanceAccountDetail(paymentOrganization, insuranceCategoryPOS, singleAccount, billMonth, employeeId, currentEmployeeId); - if(!checkBalancePayInsurance(createPO)) { + if (!checkBalancePayInsurance(createPO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } - if(checkBalance(createPO) && !isError) { + if (checkBalance(createPO) && !isError) { createInsuranceAccountDetailList.add(createPO); } else { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } } else if (list.size() > 1) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月已存在多组补差数据,请删除数据库中多余项")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月已存在多组补差数据,请删除数据库中多余项")); excelComments.add(errorMessageMap); } else { //更新数据情况 @@ -4261,19 +4279,19 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { encryptUtil.decryptList(list, InsuranceAccountDetailPO.class); InsuranceAccountDetailPO updatePO = handleInsuranceAccountDetail(list.get(0), map); - if(!checkBalancePayInsurance(updatePO)) { + if (!checkBalancePayInsurance(updatePO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } - if(checkBalance(updatePO) && !isError) { + if (checkBalance(updatePO) && !isError) { updateInsuranceAccountDetailList.add(updatePO); } else { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } @@ -4295,7 +4313,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //将待更新列表加密 encryptUtil.encryptList(updateInsuranceAccountDetailList, InsuranceAccountDetailPO.class); //更新 - for(InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { + for (InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { // getSiAccountBiz(user).updateByEmployeeIdAndBillMonth(po); updateByEmployeeIdAndBillMonth(po); } @@ -4462,7 +4480,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return datas; } - public Map countSum(List> records ){ + public Map countSum(List> records) { // 获取需要统计的列 String[] keys = {"Base", "Com", "Sum", "Per", "total", "Special"}; Set numKeys = new HashSet<>(); @@ -4471,28 +4489,28 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // numKeys.add(key); // } // } - for(int i =0; i < records.size(); i++){ + for (int i = 0; i < records.size(); i++) { Map record = records.get(i); - for(String key : record.keySet()){ - if(StringUtils.containsAny(key,keys)){ + for (String key : record.keySet()) { + if (StringUtils.containsAny(key, keys)) { numKeys.add(key); } } } Map sumRow = new HashMap<>(); - for(String numKey : numKeys){ + for (String numKey : numKeys) { BigDecimal value = new BigDecimal(0); - for(Map record : records){ + for (Map record : records) { BigDecimal addValue = null; - if(record.get(numKey) == null || StringUtils.isBlank(record.get(numKey).toString())){ + if (record.get(numKey) == null || StringUtils.isBlank(record.get(numKey).toString())) { addValue = new BigDecimal(0); - }else{ + } else { addValue = new BigDecimal(record.get(numKey).toString()); } value = value.add(addValue); } // sumRow.put(numKey,value); - sumRow.put(numKey,String.format("%.2f", value)); + sumRow.put(numKey, String.format("%.2f", value)); } return sumRow; @@ -4501,6 +4519,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 检查补差数据中的福利缴纳费用相关福利类别,是否在正常缴纳中有设置缴纳 + * * @param po * @return */ @@ -4535,6 +4554,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 检查补差数据中的福利缴纳费用相关福利项,是否在正常缴纳中方案所设置可缴纳 + * * @param po * @return */ @@ -4682,7 +4702,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //目标员工未设置方案时,判断补差中是否设置(有效值)的福利项 - if(otherPerPayMap != null) { + if (otherPerPayMap != null) { for (Map.Entry entry : otherPerPayMap.entrySet()) { if (StringUtils.isNotBlank(entry.getValue())) { otherPayFlag = false; @@ -4720,7 +4740,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (detailPOS != null && detailPOS.size() > 0) { //开启缴纳的 insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(m -> { - return m.getInsuranceId() .toString() + "-" + m.getPaymentScope().toString(); + return m.getInsuranceId().toString() + "-" + m.getPaymentScope().toString(); }).collect(Collectors.toList()); } return insuranceIdList; @@ -4970,6 +4990,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 新建核算并归档 + * * @param param * @return */ @@ -5085,25 +5106,25 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 获取薪资核算人员规则 SalarySysConfPO salaryAcctEmployeeRule = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ACCT_EMPLOYEE_RULE); List status = new ArrayList<>(); - if(Objects.isNull(salaryAcctEmployeeRule) || StringUtils.equals(salaryAcctEmployeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue()) ){ + if (Objects.isNull(salaryAcctEmployeeRule) || StringUtils.equals(salaryAcctEmployeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue())) { // 包含停缴 - status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue(), + status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(), EmployeeStatusEnum.STAY_DEL.getValue(), EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()); - }else{ - status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue()); + } else { + status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(), EmployeeStatusEnum.STAY_DEL.getValue()); } List finalStatus = status; //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(param.getPaymentOrganization()) - && (finalStatus.contains(f.getRunStatus()) )) + .filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization()) + && (finalStatus.contains(f.getRunStatus()))) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); //20231122逻辑优化,过滤出不在起始缴纳月和最后缴纳月区间的人员 List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); - empIds = empIds.stream().filter(f->canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); + empIds = empIds.stream().filter(f -> canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); // List socials = siArchivesBiz.getSocialByEmployeeIds(empIds); List socials = getSIArchivesService(user).getSocialByEmployeeIds(empIds); @@ -5111,7 +5132,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { socials = socials.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp1 = socials.stream() .filter(s -> !(StringUtils.isBlank(s.getSocialEndTime()) && StringUtils.isBlank(s.getSocialStartTime())) && - (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01")))) ) + (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01"))))) .map(InsuranceArchivesSocialSchemePO::getEmployeeId) .collect(Collectors.toList()); @@ -5278,10 +5299,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (count % 50 == 0 || count >= ids.size()) { if (count >= ids.size()) { - getSalaryAcctProgressService(user).updateProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, BigDecimal.valueOf(0.99), false); + getSalaryAcctProgressService(user).updateProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, BigDecimal.valueOf(0.99), false); log.info("更新福利核算进度,当前进度为:{}", getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization)); } else { - getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, count >= ids.size() ? count % 50 : 50); + getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, count >= ids.size() ? count % 50 : 50); log.info("更新福利核算进度,当前进度为:{}", getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization)); } @@ -5343,7 +5364,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(otherPerson.size() > 0) { + if (otherPerson.size() > 0) { otherPerson.forEach((id, object) -> { if (!needArchivesPerson.contains(id)) { needArchivesPerson.add(id); @@ -5417,7 +5438,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(otherCom.size() > 0) { + if (otherCom.size() > 0) { otherCom.forEach((id, object) -> { if (!needArchivesCom.contains(id)) { needArchivesCom.add(id); @@ -5508,8 +5529,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map fundperson = detailPOS.stream() .filter(item -> (finalXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue())) || - (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) - && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) + (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) + && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); //档案中包含的基数信息 @@ -5524,7 +5545,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(fundperson.size() > 0) { + if (fundperson.size() > 0) { fundperson.forEach((id, object) -> { if (!needArchivesPerson.contains(id)) { needArchivesPerson.add(id); @@ -5584,7 +5605,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (fundBaseMap.containsKey(String.valueOf(e))) { - fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } fundPerJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5613,8 +5634,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map fundCom = detailPOS.stream() .filter(item -> (finalComXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) || - (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue()) - && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) + (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue()) + && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); //档案中包含的基数信息 @@ -5634,7 +5655,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(fundCom.size() > 0) { + if (fundCom.size() > 0) { fundCom.forEach((id, object) -> { if (!needArchivesCom.contains(id)) { needArchivesCom.add(id); @@ -5694,7 +5715,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (fundBaseMap.containsKey(String.valueOf(e))) { - fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } fundComJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5748,8 +5769,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { .filter(item -> (finalXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue())) || (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && - Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) && - (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1")))) + Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) && + (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1")))) ) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); @@ -5765,7 +5786,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(schemeperson.size() > 0) { + if (schemeperson.size() > 0) { schemeperson.forEach((id, object) -> { if (!needArchivesPerson.contains(id)) { needArchivesPerson.add(id); @@ -5825,7 +5846,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (socialBaseMap.containsKey(String.valueOf(e))) { - socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } socialPerJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5853,7 +5874,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map schemeCom = detailPOS.stream() .filter(item -> (finalComXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) || (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue()) && - (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) + (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); //档案中包含的基数信息 @@ -5873,7 +5894,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(schemeCom.size() > 0) { + if (schemeCom.size() > 0) { schemeCom.forEach((id, object) -> { if (!needArchivesCom.contains(id)) { needArchivesCom.add(id); @@ -5933,7 +5954,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (socialBaseMap.containsKey(String.valueOf(e))) { - socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } sociaComJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5956,14 +5977,15 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 对于核算月和福利起始缴纳月处于同年时,要避免根据周期缴纳福利费用时,可能出现的多余费用缴纳情况 + * * @param schemeDetail 福利方案明细 - * @param billMonth 核算月 - * @param startMonth 福利起始缴纳月 + * @param billMonth 核算月 + * @param startMonth 福利起始缴纳月 * @return */ public Map checkCycleSettingWithStartMonth(Map schemeDetail, String billMonth, String startMonth) { - String billYear = billMonth.substring(0,4); - if (StringUtils.isNotBlank(startMonth) && billYear.equals(startMonth.substring(0,4))) { + String billYear = billMonth.substring(0, 4); + if (StringUtils.isNotBlank(startMonth) && billYear.equals(startMonth.substring(0, 4))) { int startMonthIndex = Integer.parseInt(startMonth.split("-")[1]) - 1; schemeDetail.forEach((k, v) -> { if (v.getPaymentCycle() != null && v.getPaymentCycle().equals(1) && startMonthIndex != 0) { @@ -5994,6 +6016,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 根据个税扣缴义务人和账单月,获取三类福利档案中符合缴纳开始结束月区间的人员id + * * @param paymentOrganization * @param billMonth * @return @@ -6082,6 +6105,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { batchSaveInspectDetail(insuranceAccountInspectPOS); } } + public void batchDelInspectDetail(List list) { List> lists = Lists.partition(list, 100); lists.forEach(getInsuranceAccountInspectMapper()::batchDelInspectDetails); @@ -6210,7 +6234,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (InsuranceAccountDetailPO insuranceAccountDetailPO : insuranceAccountDetailPOS) { if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap<>() : socialComJson; Map finalSocialComJson = socialComJson; @@ -6229,7 +6253,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(insuranceAccountDetailPO.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap<>() : fundComJson; Map finalFundComJson = fundComJson; @@ -6424,7 +6448,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { supplementAccountBaseParam.setSocialPaymentBaseString(param.getSocialPaymentBaseString()); supplementAccountBaseParam.setFundPaymentBaseString(param.getFundPaymentBaseString()); supplementAccountBaseParam.setOtherPaymentBaseString(param.getOtherPaymentBaseString()); - } else if("3".equals(param.getSupplementType())) { + } else if ("3".equals(param.getSupplementType())) { supplementAccountBaseParam.setSocialPaymentPerString(param.getSocialPaymentPerString()); supplementAccountBaseParam.setSocialPaymentComString(param.getSocialPaymentComString()); supplementAccountBaseParam.setFundPaymentPerString(param.getFundPaymentPerString()); @@ -7141,6 +7165,229 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(welfareNames)); } + @Override + public void batSave(AccountBatParam accountBatParam) { + List paymentOrganizations = accountBatParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(accountBatParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .flag(true) + .remarks(accountBatParam.getRemarks()) + .build(); + save(param); + } + } + + @Override + public void batDelete(AccountBatParam batParam) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); + AccountParam param = AccountParam.builder() + .billMonth(po.getBillMonth()) + .paymentOrganization(po.getPaymentOrganization()) + .build(); + delete(param); + } + } + + @Override + public void batFile(AccountBatParam batParam) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); + AccountParam param = AccountParam.builder() + .billMonth(po.getBillMonth()) + .paymentOrganization(po.getPaymentOrganization()) + .build(); + file(param); + } + } + + @Override + public void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO param = InsuranceAccountBatchPO.builder().id(id).build(); + socialSecurityBenefitsRecalculate(param); + } + } + + @Override + public Map qzReport(QZInsuranceAccountBatchParam param) { + + List ids = param.getIds(); + + List dtos = new ArrayList<>(); + for (Long id : ids) { + InsuranceAccountBatchPO batchPO = getInsuranceAccountBatchMapper().getById(id); + Long paymentOrganization = batchPO.getPaymentOrganization(); + String billMonth = batchPO.getBillMonth(); + + InsuranceAccountDetailParam queryParam = InsuranceAccountDetailParam.builder() + .billMonth(billMonth) + .paymentOrganization(paymentOrganization.toString()) + .build(); + //排序配置 + OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); + queryParam.setOrderRule(orderRule); + //系统人员福利台账明细 + List qzReportListDTOS = getInsuranceAccountDetailMapper().qzReportList(queryParam); + encryptUtil.decryptList(qzReportListDTOS, QZReportListDTO.class); + dtos.addAll(qzReportListDTOS); + } + + List> list = getService(user).buildQzReport(dtos, (long) user.getUID(), false); + + BaseBean bb = new BaseBean(); + String bcylbx = bb.getPropValue("hrmSalaryQZBB", "bcylbx"); + String dbbx = bb.getPropValue("hrmSalaryQZBB", "dbbx"); + + + List columns = Lists.newArrayList(); + columns.add(new WeaTableColumnGroup("150", "公司名称", "paymentOrganizationName")); + columns.add(new WeaTableColumnGroup("150", "工号", "workcode")); + columns.add(new WeaTableColumnGroup("150", "姓名", "userName")); + columns.add(new WeaTableColumnGroup("150", "一级部门", "firstDepartmentName")); + columns.add(new WeaTableColumnGroup("150", "二级部门", "secondDepartmentName")); + columns.add(new WeaTableColumnGroup("150", "实际工作地", "actualWorkplace")); + columns.add(new WeaTableColumnGroup("150", "劳动关系地", "laborWorkplace")); + columns.add(new WeaTableColumnGroup("150", "岗位名称", "jobtitleName")); + columns.add(new WeaTableColumnGroup("150", "进入日期", "companystartdate")); + columns.add(new WeaTableColumnGroup("150", "离职日期", "dismissdate")); + columns.add(new WeaTableColumnGroup("150", "社保基数", "9001socialBase")); + columns.add(new WeaTableColumnGroup("150", "公积金基数", "9006fundBase")); + + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9001socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9001bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9002socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9002bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9004socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9004bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "工伤保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9003socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9003bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "生育保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9005socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9005bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", bcylbx + "socialCom"), new WeaTableColumnGroup("150", "单位补缴额", bcylbx + "bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", dbbx + "socialCom"), new WeaTableColumnGroup("150", "单位补缴额", dbbx + "bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9006fundCom"), new WeaTableColumnGroup("150", "单位补缴额", "9006bFundCom")))); + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9001socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9001bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9002socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9002bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9004socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9004bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", bcylbx + "socialPer"), new WeaTableColumnGroup("150", "个人补缴额", bcylbx + "bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", dbbx +"socialPer"), new WeaTableColumnGroup("150", "个人补缴额", dbbx +"bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "单位超额-社保合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "socialSpecialSum")))); + columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9006fundPer"), new WeaTableColumnGroup("150", "个人补缴额", "9006bFundPer")))); + columns.add(new WeaTableColumnGroup("150", "单位超额-公积金合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "fundSpecialSum")))); + columns.add(new WeaTableColumnGroup("150", "社保公积金单位合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "comSum"), new WeaTableColumnGroup("150", "单位补缴额", "bComSum")))); + columns.add(new WeaTableColumnGroup("150", "社保公积金个人合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "perSum"), new WeaTableColumnGroup("150", "个人补缴额", "bPerSum")))); + columns.add(new WeaTableColumnGroup("150", "总计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "总计", "totalSum")))); + columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); + + Map result = new HashMap<>(); + result.put("columns", columns); + result.put("list", list); + + return result; + } + + @Override + public XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param) { + + Map result = qzReport(param); + List headerColumnGroup = Lists.newArrayList(); + List weaTableColumns = (List) result.get("columns"); + + parseHeader(headerColumnGroup, weaTableColumns); + + List headerList = new ArrayList<>(weaTableColumns); + List> resultMapList = (List>) result.get("list"); + + + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + for (Map map : resultMapList) { + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + rows.add(row); + } + + String sheetName = "社保公积金预算数据"; + return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, false); + } + + @Override + public String batFC(AccountBatParam batParam) { + List ids = batParam.getIds(); + String msg = ""; + int success = 0; + int fail = 0; + for (Long id : ids) { + try { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); + fc(po.getBillMonth(), po.getPaymentOrganization(), batParam.getFc()); + success++; + } catch (Exception e) { + log.error("批量封存异常,param {}", batParam, e); + msg += e.getMessage(); + fail++; + } + } + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); + } + + @Override + public Boolean fcAuth() { + BaseBean bb = new BaseBean(); + String socialManagerRoleId = bb.getPropValue("hrmSalaryQZ", "socialManagerRoleId"); + HrmCommonService hrmCommonService = new HrmCommonServiceImpl(); + List ids = hrmCommonService.getRoleMembers(socialManagerRoleId, "2"); + + return ids.contains(Util.null2String(user.getUID())); + } + + + public void fc(String billMonth, Long paymentOrganization, FCEnum fc) { + InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization); + encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); + SalaryAssert.notNull(insuranceAccountBatchPO, SalaryI18nUtil.getI18nLabel(0, "月份账单不存在")); + + + //封存 + if (fc == FCEnum.FC && !Objects.equals(insuranceAccountBatchPO.getBillStatus(), BillStatusEnum.ARCHIVED.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "未归档")); + } + + insuranceAccountBatchPO.setFc(fc.getValue()); + encryptUtil.encrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); + getInsuranceAccountBatchMapper().updateById(insuranceAccountBatchPO); + + + //记录操作日志 + encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(insuranceAccountBatchPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + insuranceAccountBatchPO.getId()); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账-封存")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账-封存") + + ": " + taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); + loggerContext.setNewValues(insuranceAccountBatchPO); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); + } + + private void parseHeader(List headerList, List weaTableColumns) { + for (WeaTableColumnGroup weaTableColumnGroup : weaTableColumns) { + if (CollectionUtils.isEmpty(weaTableColumnGroup.getChildren())) { + headerList.add(weaTableColumnGroup); + continue; + } + parseHeader(headerList, weaTableColumnGroup.getChildren()); + } + } + public void accountOtherView(InsuranceAccountViewListDTO dto, List pos) { int otherNum = 0; BigDecimal otherPaySum = new BigDecimal("0"); @@ -7171,7 +7418,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 钱智 公积金差异 if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap() : fundComJson; Map finalFundComJson = fundComJson; @@ -7199,7 +7446,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { BigDecimal socialPaySum = new BigDecimal("0"); BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; for (InsuranceAccountDetailPO item : pos) { - if (StringUtils.isNotBlank(item.getSocialSum()) && SalaryEntityUtil.string2DoubleDefault0(item.getSocialSum()) != 0.0 ) { + if (StringUtils.isNotBlank(item.getSocialSum()) && SalaryEntityUtil.string2DoubleDefault0(item.getSocialSum()) != 0.0) { if (!PaymentStatusEnum.BALANCE.getValue().equals(item.getPaymentStatus())) { socialNum += 1; } @@ -7208,7 +7455,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 钱智 社保差异 if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap() : socialComJson; Map finalSocialComJson = socialComJson; @@ -7238,7 +7485,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public int checkIfBusinessAccounting(InsuranceAccountBatchPO param) { List list = getSIAccountUtilMapper().checkIfBusinessaccounting(param.getId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); - return (int) list.stream().filter( f -> { + return (int) list.stream().filter(f -> { String billMonthBySob = sdf.format(convertSalaryMonthToBillMonth(f.getSalaryMonth(), f.getSocialSecurityCycleType())); return f.getBillmonth().equals(billMonthBySob.substring(0, 7)); }).count(); @@ -7272,6 +7519,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 正常缴纳页 删除社保核算人员 + * * @param param */ @Override @@ -7304,6 +7552,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 正常缴纳页 添加社保核算人员 + * * @param param */ @Override @@ -7333,20 +7582,20 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listByEmployeeIds(empIds); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(param.getPaymentOrganization())) + .filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); //20231122逻辑优化,过滤出不在起始缴纳月和最后缴纳月区间的人员 List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); - empIds = empIds.stream().filter(f->canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); + empIds = empIds.stream().filter(f -> canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); List socials = getSIArchivesService(user).getSocialByEmployeeIds(empIds); //过滤出目标个税扣缴义务人相关信息 socials = socials.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp1 = socials.stream() .filter(s -> !(StringUtils.isBlank(s.getSocialEndTime()) && StringUtils.isBlank(s.getSocialStartTime())) && - (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01")))) ) + (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01"))))) .map(InsuranceArchivesSocialSchemePO::getEmployeeId) .collect(Collectors.toList()); @@ -7374,7 +7623,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List conNotAddEmpIds = param.getIncludes().stream().filter(empId -> !finalValidIds.contains(empId)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(conNotAddEmpIds)) { String canNotAddName = getSalaryEmployeeService(user).listByIds(conNotAddEmpIds).stream().map(DataCollectionEmployee::getUsername).collect(Collectors.joining(",")); - throw new SalaryRunTimeException("添加失败,员工:" +canNotAddName + ",社保、公积金、其他福利需至少有一种在当前账单月需缴纳,并且社保档案需为在缴员工"); + throw new SalaryRunTimeException("添加失败,员工:" + canNotAddName + ",社保、公积金、其他福利需至少有一种在当前账单月需缴纳,并且社保档案需为在缴员工"); } addCommonEmpAndAccount(param.getBillMonth(), empIds, param.getPaymentOrganization()); @@ -7383,6 +7632,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 添加正常缴纳人员,并核算 + * * @param billMonth * @param ids * @param paymentOrganization diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 8ba4d97ff..2a99fe6ad 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -74,7 +74,6 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.ibatis.session.SqlSession; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; import weaver.conn.mybatis.MyBatisFactory; import weaver.general.BaseBean; @@ -1826,7 +1825,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService WeaTableColumn nameColumn = new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "employeeName"); nameColumn.setFixed("left"); list.add(nameColumn); - list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "paymentOrganizationName")); + list.add(new WeaTableColumn("300px", SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "paymentOrganizationName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "分部"), "subcompanyName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "部门"), "departmentName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "手机号"), "mobile")); diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java index a6c4cb5d8..276a39af7 100644 --- a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -1,7 +1,6 @@ package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; -import com.alipay.oceanbase.jdbc.StringUtils; import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; @@ -41,6 +40,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.Column; import com.google.common.collect.Lists; import com.engine.salary.util.db.IdGenerator; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; diff --git a/src/com/engine/salary/service/impl/SIRepairServiceImpl.java b/src/com/engine/salary/service/impl/SIRepairServiceImpl.java index 64758d625..bb24354e2 100644 --- a/src/com/engine/salary/service/impl/SIRepairServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIRepairServiceImpl.java @@ -485,8 +485,10 @@ public class SIRepairServiceImpl extends Service implements SIRepairService { socialMap = socialMap.entrySet().stream().filter(e -> "9002".equals(e.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); Map socialComMap = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new HashMap().getClass()); - socialComMap = socialComMap.entrySet().stream().filter(e -> "9002".equals(e.getKey())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + if(socialComMap !=null){ + socialComMap = socialComMap.entrySet().stream().filter(e -> "9002".equals(e.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } List socialIds = new ArrayList<>(); socialIds.addAll(socialMap == null ? Collections.emptyList() : socialMap.keySet()); socialIds.addAll(socialComMap == null ? Collections.emptyList() : socialComMap.keySet()); diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 0484a1079..35f207e4d 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -2473,6 +2473,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @param employeeId */ public String update(InsuranceSchemeReqParam updateParam, long employeeId) { + log.info("福利方案更新参数:{}", updateParam); //查询是否存在福利方案 InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); if (Objects.isNull(insuranceSchemePO)) { @@ -2506,6 +2507,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //更新福利方案主表 InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); getInsuranceSchemeMapper().update(insuranceSchemePO1); + log.info("福利方案更新主表:{}", insuranceSchemePO1); //记录主表操作日志 loggerContext.setNewValues(insuranceSchemePO1); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); @@ -2529,6 +2531,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //更新福利方案明细表 先删后插 getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); //更新明细表 + log.info("福利方案更新明细表:{}", insuranceSchemeDetailPOS); encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index fec3890f1..8ea487cc1 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -17,8 +17,8 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.param.SalarySobQueryParam; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -32,7 +32,6 @@ import com.engine.salary.mapper.salarysob.SobTaxLinkMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.service.*; -import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.sys.constant.SalarySysConstant; @@ -877,7 +876,9 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct queryParam.setTaxCycle(recordPO.getTaxCycle()); queryParam.setTaxAgentId(sobPO.getTaxAgentId()); + log.info("查询参数:{}", queryParam); List list = getSalaryAcctEmployeeMapper().listPage4NotDeclareByParam(queryParam); + log.info("查询结果:{}", list); return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AbnormalEmployeeListDTO.class); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 67aff3ecd..f869556b8 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -405,11 +405,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { total = true; Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); - sumRow.forEach((k, v) -> { - if (NumberUtils.isCreatable(v.toString())) { - sumRow.put(k, new BigDecimal(v.toString())); - } - }); + if (sumRow != null) { + sumRow.forEach((k, v) -> { + if (NumberUtils.isCreatable(v.toString())) { + sumRow.put(k, new BigDecimal(v.toString())); + } + }); + } if (sumRow != null) { sumRow.put("taxAgentName", "总计"); resultMapList.add(sumRow); diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 242a69c02..aa252f80b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -11,6 +11,7 @@ import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -23,6 +24,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.auth.AuthFilterTypeEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctOptEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -49,7 +51,9 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import weaver.wechat.util.Utils; +import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @@ -236,6 +240,11 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe List salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po); salaryAcctRecordPOS = getAuthService(user).auth(salaryAcctRecordPOS, AuthFilterTypeEnum.DATA_OPT, SalaryAcctRecordPO.class); + //过滤 + List lastOperates = queryParam.getLastOperates(); + if(CollUtil.isNotEmpty(lastOperates)){ + salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(salaryAcctRecordPO -> lastOperates.contains(salaryAcctRecordPO.getRunStatus())).collect(Collectors.toList()); + } return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryAcctRecordPOS, SalaryAcctRecordPO.class); @@ -329,8 +338,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe .count(); // 转换成po - SalaryAcctRecordPO salaryAcctRecordPO = SalaryAcctRecordBO.convert2PO(saveParam, salarySobCycleDTO, (int) acctTimes, (long) user.getUID()); - + SalaryAcctRecordPO salaryAcctRecordPO = SalaryAcctRecordBO.convert2PO(saveParam, salarySobCycleDTO, (int) acctTimes, (long) user.getUID(), Utils.null2String(saveParam.getRunStatus())); // 检查是否能够新建核算 SalaryAcctTaxAgentPO build = SalaryAcctTaxAgentPO.builder() .incomeCategory(salarySobPO.getIncomeCategory()) @@ -380,81 +388,81 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe //获取账套所属个税扣缴义务人的核算记录 SalarySobPO salarySobPO = getSalarySobService(user).getById(saveParam.getSalarySobId()); List taxAgentIds = salarySobPO.getTaxAgentIds(); - taxAgentIds.forEach(taxAgentId->{ + taxAgentIds.forEach(taxAgentId -> { //查询扣缴义务人下的所有账套 List salarySobPOS = getSalarySobService(user).listByTaxAgentId(taxAgentId); Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); //获取账套下的所有核算结果 List salaryAcctRecords = listByTaxCycle(taxCycleYearRange, salarySobIds); - // 获取个税申报功能状态 - TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration(); - if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.OPEN.getValue())) { - // 开启了个税申报功能 - // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 - SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) - && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 - SalaryAcctRecordPO notDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) - && e.getTaxCycle().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(notDeclaredSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98751, "税款所属期{0}的薪资核算结果还未申报,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(notDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)已经申报了,不可以新建本月以及之前月份的薪资核算 - SalaryAcctRecordPO hasDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) - && e.getTaxCycle().compareTo(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1))) >= 0) - .findAny() - .orElse(null); - if (Objects.nonNull(hasDeclaredSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98753, "税款所属期{0}的薪资核算结果已经申报,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - } - if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.REBOOT.getValue())) { - // 重启了个税申报功能(不去校验重启之前是否申报数据) - // 如果某个月(薪资所属期)还未归档,不可以新建之后月份的薪资核算 - SalaryAcctRecordPO notArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) - && e.getSalaryMonth().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(notArchivedSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98754, "薪资所属期{0}的薪资核算结果还未归档,不能新建薪资所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(notArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 - SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) - && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 - //获取账套下从重启月至所在年的最后一天的所有核算结果 - Date taxDeclarationRebootDate = getSalarySysConfService(user).getTaxDeclarationRebootDate(); - if (taxDeclarationRebootDate == null) { - throw new SalaryRunTimeException("个税申报功能异常"); + // 获取个税申报功能状态 + TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration(); + if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.OPEN.getValue())) { + // 开启了个税申报功能 + // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 + SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) + && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 + SalaryAcctRecordPO notDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) + && e.getTaxCycle().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(notDeclaredSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98751, "税款所属期{0}的薪资核算结果还未申报,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(notDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)已经申报了,不可以新建本月以及之前月份的薪资核算 + SalaryAcctRecordPO hasDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) + && e.getTaxCycle().compareTo(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1))) >= 0) + .findAny() + .orElse(null); + if (Objects.nonNull(hasDeclaredSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98753, "税款所属期{0}的薪资核算结果已经申报,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } } + if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.REBOOT.getValue())) { + // 重启了个税申报功能(不去校验重启之前是否申报数据) + // 如果某个月(薪资所属期)还未归档,不可以新建之后月份的薪资核算 + SalaryAcctRecordPO notArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) + && e.getSalaryMonth().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(notArchivedSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98754, "薪资所属期{0}的薪资核算结果还未归档,不能新建薪资所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(notArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 + SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) + && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 + //获取账套下从重启月至所在年的最后一天的所有核算结果 + Date taxDeclarationRebootDate = getSalarySysConfService(user).getTaxDeclarationRebootDate(); + if (taxDeclarationRebootDate == null) { + throw new SalaryRunTimeException("个税申报功能异常"); + } LocalDateRange taxCycleRebootYearRange = LocalDateRange.builder() .fromDate(taxDeclarationRebootDate) @@ -1002,7 +1010,48 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe } @Override - public void updateDate(Long id, Date updateTime) { - getSalaryAcctRecordMapper().updateDate(id, updateTime); + public void updateDate(Long id, Date updateTime, String runStatus) { + getSalaryAcctRecordMapper().updateDate(id, updateTime, runStatus); + } + + + @Override + public void batSave(SalaryAcctBatParam saveParam) { + + List salarySobIds = saveParam.getSalarySobIds(); + YearMonth salaryMonth = SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth()); + for (int i = 0; i < salarySobIds.size(); i++) { + Long salarySobId = salarySobIds.get(i); + SalaryAcctRecordSaveParam param = SalaryAcctRecordSaveParam.builder() + .salarySobId(salarySobId) + .salaryMonth(salaryMonth) + .description(saveParam.getDescription()) + .build(); + Long salaryAcctRecordId = save(param); + updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.UNPROCESSED.getDefaultLabel()); + } + } + + @Override + public void batFile(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + file(recordId); + } + } + + @Override + public void batReCalculate(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + reCalculate(recordId); + } + } + + @Override + public void updateMsg(Long salaryAcctRecordId, String msg) { + getSalaryAcctRecordMapper().updateIgnoreNull(SalaryAcctRecordPO.builder().id(salaryAcctRecordId).msg(msg).build()); } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index e8e12df20..f8bae807c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -36,6 +36,7 @@ import com.engine.salary.enums.common.FilterEnum; import com.engine.salary.enums.common.SalaryLogGroupTypeEnum; import com.engine.salary.enums.common.SalaryLogOperateTypeEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctOptEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; @@ -339,14 +340,25 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isNotEmpty(otherConditions)) { List items = SalaryEntityUtil.properties(otherConditions, SalaryAcctResultQueryParam.OtherCondition::getItemId, Collectors.toList()); List list = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(queryParam.getSalaryAcctRecordId()), items); - for (int i = 0; i < otherConditions.size(); i++) { - SalaryAcctResultQueryParam.OtherCondition otherCondition = otherConditions.get(i); - Long itemId = otherCondition.getItemId(); - FilterEnum filter = otherCondition.getFilter(); - List params = otherCondition.getParams(); - list = list.stream().filter(a -> Objects.equals(a.getSalaryItemId(), itemId)).filter(a -> filter.filter(params).test(a.getResultValue())).collect(Collectors.toList()); + Map> acctEmpResultsMap = SalaryEntityUtil.group2Map(list, SalaryAcctResultPO::getSalaryAcctEmpId); + Set removeAcctEmpIds = new HashSet<>(); + for (Long acctEmpId : acctEmpResultsMap.keySet()) { + List acctEmpResults = acctEmpResultsMap.get(acctEmpId); + //如果有一个条件不成立就删除 + for (int i = 0; i < otherConditions.size(); i++) { + SalaryAcctResultQueryParam.OtherCondition otherCondition = otherConditions.get(i); + Long itemId = otherCondition.getItemId(); + FilterEnum filter = otherCondition.getFilter(); + List params = otherCondition.getParams(); + for (SalaryAcctResultPO po : acctEmpResults) { + if(Objects.equals(po.getSalaryItemId(), itemId) && !filter.filter(params).test(po.getResultValue())){ + removeAcctEmpIds.add(po.getSalaryAcctEmpId()); + } + } + } } - List salaryAcctEmpId = SalaryEntityUtil.properties(list, SalaryAcctResultPO::getSalaryAcctEmpId, Collectors.toList()); + acctEmpResultsMap.keySet().removeAll(removeAcctEmpIds); + List salaryAcctEmpId = Lists.newArrayList(acctEmpResultsMap.keySet()); if (CollectionUtils.isEmpty(salaryAcctEmpId)) { //条件不满足直接返回空列表 @@ -829,6 +841,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salarySobItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算")); } + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date(), SalaryAcctOptEnum.PROGRESS.getDefaultLabel()); // 回算薪资项目 List salarySobBackItems = Collections.emptyList(); if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { @@ -954,7 +968,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true); //更新薪资核算记录最后操作日期 - getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date()); + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date(), SalaryAcctOptEnum.COMPLETED.getDefaultLabel()); stopWatch.stop(); log.info(stopWatch.prettyPrint()); @@ -1299,7 +1313,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { - List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); + Set acctEmpIds = updateParam.getAcctEmpIds(); + List salaryAcctEmployees; + if (CollUtil.isNotEmpty(acctEmpIds)) { + salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByIds(acctEmpIds); + } else { + salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); + } + if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return; } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index c5c9879e8..e8465791f 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -662,8 +662,6 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi public XSSFWorkbook exportAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) { // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资项目调整记录"); - // 获取所有可被引用的薪资项目 - List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); String[] header = { SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(86187, "员工状态"), diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 8bb9b4e61..f2e2e2c14 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -514,7 +514,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); // 获取所有可被引用的薪资项目 - List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); + List salaryItems = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); Object[] header = { new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "", "", 0), new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "", "", 0), diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index f76d1354a..e07316d24 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salaryacct.bo.SalaryCalcTax; import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxBatParam; import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; @@ -19,6 +20,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.entity.taxdeclaration.response.DeclareTaxResponse; import com.engine.salary.enums.common.SalaryLogOperateTypeEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctOptEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.OnlineCalculateTaxException; @@ -110,19 +112,21 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe @Override public void calcTax(SalaryCalcTaxParam salaryCalcTaxParam) { + Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); // 查询供应商信息 TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true); if (apiConfig == null) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); } - - Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); int i = getSalaryAcctEmployeeService(user).countNotDeclareByParam(AbnormalEmployeeListQueryParam.builder().recordId(salaryAcctRecordId).build()); if (i > 0) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"存在未报送的人员,请先进行人员报送"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(11111, "存在未报送的人员,请先进行人员报送")); } List reqs = getSalaryAcctCalcTaxReqService(user).listByRecordId(salaryAcctRecordId); if (CollUtil.isNotEmpty(reqs)) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"请先获取上一次在线算税结果"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(11111, "请先获取上一次在线算税结果")); } @@ -166,9 +170,11 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe DeclareTaxResponse declareTaxResponse = JsonUtil.parseObject(res, DeclareTaxResponse.class); if (Objects.isNull(declareTaxResponse) || Objects.isNull(declareTaxResponse.getHead())) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"服务异常"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); } if (!Objects.equals(declareTaxResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,declareTaxResponse.getHead().getMsg()); throw new SalaryRunTimeException(declareTaxResponse.getHead().getMsg()); } @@ -187,19 +193,24 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 批量保存 getSalaryAcctCalcTaxReqService(user).batchSave(salaryAcctCalcTaxReqs); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.ONLINE.getDefaultLabel()); + //清空异常信息 + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,""); // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.CALC_TAX_ONLINE); } @Override public void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam) { + // 查询薪资核算记录 + Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); // 查询供应商信息 TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true); if (apiConfig == null) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); } - // 查询薪资核算记录 - Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); // 查询薪资核算记录关联的薪资核算人员 List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecord.getId()); @@ -249,6 +260,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares, taxRuleDTO); } catch (OnlineCalculateTaxException e) { log.error("获取在线算税结果异常", e); + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,e.getMessage()); getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); throw new SalaryRunTimeException(e.getMessage()); } @@ -300,7 +312,37 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe getSalaryAcctResultService(user).batchSave(addResultPOS); getSalaryAcctResultService(user).batchUpdate(updateResultPOS); getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); + //清空异常信息 + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,""); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.RESULT.getDefaultLabel()); // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.GET_CALC_TAX_FEEDBACK); } + + @Override + public void batCalcTax(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + List salaryAcctRecordIds = salaryCalcTaxBatParam.getSalaryAcctRecordIds(); + salaryAcctRecordIds.forEach(salaryAcctRecordId -> { + try { + SalaryCalcTaxParam param = SalaryCalcTaxParam.builder().salaryAcctRecordId(salaryAcctRecordId).build(); + calcTax(param); + }catch (Exception e){ + log.error("获取在线算税异常,{}",salaryAcctRecordId, e); + } + }); + } + + @Override + public void batCalcTaxFeedback(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + List salaryAcctRecordIds = salaryCalcTaxBatParam.getSalaryAcctRecordIds(); + salaryAcctRecordIds.forEach(salaryAcctRecordId -> { + try { + SalaryCalcTaxParam param = SalaryCalcTaxParam.builder().salaryAcctRecordId(salaryAcctRecordId).build(); + calcTaxFeedback(param); + }catch (Exception e){ + log.error("获取在线算税结果异常,{}",salaryAcctRecordId, e); + } + }); + } } diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index 6af87b45c..154da1d18 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSON; import com.api.formmode.mybatis.util.SqlProxyHandle; @@ -173,7 +174,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } //外部人员 - if(hasExtEmp){ + if (hasExtEmp) { List salarySobExtRangePOS = getSalarySobExtRangeService(user).listBySalarySobId(salarySobId); if (CollectionUtils.isNotEmpty(salarySobExtRangePOS)) { List ids = SalaryEntityUtil.properties(salarySobExtRangePOS, SalarySobExtRangePO::getTargetId, Collectors.toList()); @@ -417,20 +418,24 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee result.addAll(employBiz.listByVirtualParams(virtualParams)); - List empIds = new ArrayList<>(); - includeQueryParams.stream() - .filter(param -> param.getTargetType().equals(TargetTypeEnum.SQL.name())) - .forEach(param -> { - String sql = param.getTarget(); - RecordSet rs = new RecordSet(); - if (rs.execute(sql)) { - while (rs.next()) { - empIds.add((long) rs.getInt("id")); - } + for (SalarySobRangeEmpQueryParam param:includeQueryParams) { + if(param.getTargetType().equals(TargetTypeEnum.SQL.name())){ + List empIds = new ArrayList<>(); + String sql = param.getTarget(); + RecordSet rs = new RecordSet(); + if (rs.execute(sql)) { + while (rs.next()) { + empIds.add((long) rs.getInt("id")); } - }); - List employees = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds); - result.addAll(employees); + } + if(CollUtil.isNotEmpty(empIds)){ + Collection employeeStatus = param.getEmployeeStatus(); + List employeeByIdsAll = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds); + List collect = employeeByIdsAll.stream().filter(e -> employeeStatus.contains(e.getStatus())).collect(Collectors.toList()); + result.addAll(collect); + } + } + } // 从hrmresource和hrmresourcevirtual可能获取到重复人员数据,需要根据人员id去重 result = result.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparingLong(DataCollectionEmployee::getEmployeeId))), ArrayList::new)); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 21884ad0f..c4aa6554f 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1,7 +1,6 @@ package com.engine.salary.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Validator; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; @@ -1752,9 +1751,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } String mobile = employee.getMobile(); - if (Validator.isMobile(mobile)) { - throw new SalaryRunTimeException("手机号信息有误"); - } boolean checkSendSMS = MessageUtil.checkSendSMS(); if (!checkSendSMS) { @@ -1782,6 +1778,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService //取出验证码 String cacheValue = getSalaryCacheService(user).get(SALARY_CACHE_SMS_CODE + "_" + id); + if (cacheValue == null) { + throw new SalaryRunTimeException("未获取到验证码,请重新发送"); + } String[] cache = cacheValue.split("_"); String code = cache[0]; //失效时间 diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index c2038c425..b3fc0eb7f 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -254,6 +254,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } List list = getSalarySobMapper().listSome(build); + if (param.isShare() == true) { + return list; + } return getAuthService(user).auth(list, param.getFilterType(), SalarySobPO.class); } diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index 47ba33ff0..85cc9ba47 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -471,15 +471,20 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd SpecialAddDeductionBiz SpecialAddDeductionBiz = new SpecialAddDeductionBiz(); Long currentEmployeeId = (long) user.getUID(); // 获取所有个税扣缴义务人 - Collection taxAgentList = - getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + // Collection taxAgentList = + // getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + + TaxAgentQueryParam param = TaxAgentQueryParam.builder().build(); + param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA); + Collection taxAgentList = getTaxAgentService(user).listAuth(param); + SpecialAddDeductionPO byId = SpecialAddDeductionBiz.getById(specialAddDeductionParam.getId()); if (byId == null) { throw new SalaryRunTimeException("该数据不存在!"); } //管理员可以编辑该扣缴义务人数据,其他人可以编辑本人数据 boolean canEdit = byId.getEmployeeId().equals((long) user.getUID()) - || taxAgentList.stream().anyMatch(t -> Objects.equals(t.getTaxAgentId(), byId.getTaxAgentId())); + || taxAgentList.stream().anyMatch(t -> Objects.equals(t.getId(), byId.getTaxAgentId())); if (!canEdit) { //没有编辑权限 throw new SalaryRunTimeException("该个税扣缴义务人无权限编辑此数据!"); diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 072c68985..f92992600 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -291,6 +291,9 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { public List listAuth(TaxAgentQueryParam queryParam) { List taxAgents = getTaxAgentMapper().listBySome(queryParam); AuthFilterTypeEnum filterType = queryParam.getFilterType(); + if (queryParam.isShare()) { + return taxAgents; + } return getAuthService(user).auth(taxAgents, filterType, TaxAgentPO.class); } @@ -586,7 +589,7 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { public List> selectList(boolean needAuth) { List taxAgents = getTaxAgentMapper().listAll(); if (needAuth) { - taxAgents = handleForDevolution(taxAgents, (long) user.getUID(), true); + taxAgents = getAuthService(user).auth(taxAgents, AuthFilterTypeEnum.QUERY_DATA, TaxAgentPO.class); } return taxAgents.stream().map(m -> { Map map = new HashMap<>(2); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 13ae9c1a8..2c78fa48e 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -48,6 +48,7 @@ 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.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; import com.engine.salary.remote.tax.client.DeclareClient; @@ -55,6 +56,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; @@ -77,6 +80,7 @@ import java.util.*; import java.util.stream.Collectors; import static com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum.NOT_DECLARE; +import static com.engine.salary.sys.constant.SalarySysConstant.TAX_DECLARATION_DATE_TYPE; /** * 个税申报 @@ -182,9 +186,20 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe return ServiceUtil.getService(OtherDeductionServiceImpl.class, user); } + private SalaryAcctRecordMapper getSalaryAcctRecordMapper() { + return MapperProxyFactory.getProxy(SalaryAcctRecordMapper.class); + } + private TaxPaymentServiceFactory taxPaymentServiceFactory = new TaxPaymentServiceFactory(user); + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + //是否根据税款所属期进行申报 + private final boolean isTaxDeclarationByTaxCycle = "1".equals(getSalarySysConfService(user).getValueByCode(TAX_DECLARATION_DATE_TYPE)); + // private TaxPaymentRequestMapper taxPaymentRequestMapper; @@ -274,9 +289,44 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 根据个税扣缴义务人范围查询个税扣缴义务人 Collection taxAgents = queryByTaxAgentRange(saveParam); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); + + Date taxCycle; + List salaryAcctRecords = new ArrayList<>(); + //根据税款所属期申报 + if (isTaxDeclarationByTaxCycle) { + taxCycle = saveParam.getTaxCycle(); + if (Objects.isNull(taxCycle)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "税款所属期参数错误")); + } + + // 查询薪资所属月的薪资核算记录 + salaryAcctRecords = listByTaxCycle(SalaryAcctRecordPO.builder().taxCycle(taxCycle).build()); + // 无薪资核算记录,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctRecords)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", SalaryDateUtil.getFormatYearMonth(taxCycle))); + } + } else { + //根据薪资所属月申报 + // 薪资所属月的日期范围 + LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(saveParam.getSalaryMonth()); + if (Objects.isNull(salaryMonthDateRange)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月参数错误")); + } + // 查询薪资所属月的薪资核算记录 + salaryAcctRecords = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build()); + // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 + taxCycle = salaryAcctRecords.get(0).getTaxCycle(); + boolean differentTaxCycle = salaryAcctRecords.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); + if (differentTaxCycle) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } + } // 查询薪资所属月下的薪资核算记录,并按照权限过滤 - LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(saveParam.getSalaryMonth()).setEndDate(saveParam.getSalaryMonth()); - List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange); + // LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(saveParam.getSalaryMonth()).setEndDate(saveParam.getSalaryMonth()); + // List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange); + + // 查询薪资核算记录关联的个税扣缴义务人 List salaryAcctTaxAgents = getSalaryAcctRecordService(user).listBySalaryAcctRecordIds(SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId)); // 按照saveParam中的个税扣缴义务人范围过滤 @@ -362,6 +412,14 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } + public List listBySalaryMonth(SalaryAcctRecordPO po) { + return getSalaryAcctRecordMapper().listSome(po); + } + + public List listByTaxCycle(SalaryAcctRecordPO po) { + return getSalaryAcctRecordMapper().listSome(po); + } + @Override public void refreshData(Long id) { // 查询个税申报记录 diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 2d85f020c..019701a54 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -9,7 +9,6 @@ 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; import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; import com.engine.salary.entity.taxpayment.response.BaseResponse; @@ -23,7 +22,6 @@ import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; -import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -55,53 +53,57 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService throw new SalaryRunTimeException(msg); } - List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); - for (TaxDeclareStatusPO status : statuses) { - 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(); - } + TaxDeclareStatusPO status = getTaxDeclareStatusService(user).getTaxDeclareStatus(param.getTaxDeclareRecordId(),param.getReportType()); + 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()); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(status, false); + }) + .orElse(null); + if (feedback == null) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + 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) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + 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())) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + 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) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + 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()); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(status, false); - TaxAmountFormDTO taxAmountFormDTO = queryTaxAmount(param); //更新主记录 getTaxDeclareStatusService(user).updateRecord(param.getTaxDeclareRecordId()); @@ -112,9 +114,9 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService BigDecimal otherAmount = SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPaidAmount()).subtract(SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPurePaidAmount())); return new TaxAgreementFeedbackResultDTO() - .setPayAmount(SalaryEntityUtil.thousandthConvert(SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPaidAmount()).toString())) + .setPayAmount(SalaryEntityUtil.thousandthConvert(SalaryEntityUtil.empty2Zero(status.getTaxPaidAmount()).toString())) .setOtherAmount(SalaryEntityUtil.thousandthConvert(otherAmount.toString())) - .setPersonNum(taxAmountFormDTO.getPersonNum()); + .setPersonNum(status.getPersonNum().toString()); } @Override diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index dda4b4f06..5acb92777 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -106,14 +106,6 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS @Override public void cancelWithholdingVoucher(TaxDeclarationApiConfigPO apiConfig, TaxDeclareRecordPO taxDeclareRecord, Map requestParam) { - TaxPaymentRequestPO paymentRequestPO = getTaxPaymentRequestMapper().getOne(TaxPaymentRequestPO - .builder() - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxAgentId(taxDeclareRecord.getTaxAgentId()) - .taxYearMonth(taxDeclareRecord.getTaxCycle()) - .build()); -// if (paymentRequestPO != null) { - List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); TaxPaymentClient taxPaymentClient = new TaxPaymentClient(taxDeclareRecord.getTaxAgentId()); statuses.forEach(status -> { @@ -128,9 +120,9 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) .taxAgentId(taxDeclareRecord.getTaxAgentId()) .taxYearMonth(taxDeclareRecord.getTaxCycle()) + .reportType(status.getReportType()) .build()); }); -// } } // @Override diff --git a/src/com/engine/salary/util/ResponseResult.java b/src/com/engine/salary/util/ResponseResult.java index 2036fd1a2..4fef6c0a1 100644 --- a/src/com/engine/salary/util/ResponseResult.java +++ b/src/com/engine/salary/util/ResponseResult.java @@ -8,6 +8,7 @@ import com.engine.salary.common.SalaryContext; import com.engine.salary.exception.ExceptionUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import weaver.general.BaseBean; @@ -15,6 +16,7 @@ import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; @@ -52,6 +54,17 @@ public class ResponseResult { SalaryContext.get().setValue("response", response); } + public T parseParams(HttpServletRequest request, Class clazz) { + T t = null; + try { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + t = mapper.readValue(request.getInputStream(), clazz); + } catch (IOException e) { + log.error("salary api parseParams fail , param {}", t, e); + } + return t; + } /** * 统一返回方法 diff --git a/src/com/engine/salary/util/SalaryEntityUtil.java b/src/com/engine/salary/util/SalaryEntityUtil.java index f14a1a2d8..81733feee 100644 --- a/src/com/engine/salary/util/SalaryEntityUtil.java +++ b/src/com/engine/salary/util/SalaryEntityUtil.java @@ -136,6 +136,15 @@ public class SalaryEntityUtil { .collect(Collectors.toMap(keyMapper, valueMapper, (a, b) -> a)); } + public static Map convert2LinkedMap(Collection objs, Function keyMapper, Function valueMapper) { + if (CollectionUtils.isEmpty(objs)) { + return Maps.newHashMap(); + } + return objs.stream() + .filter(e -> valueMapper.apply(e) != null && keyMapper.apply(e) != null) + .collect(Collectors.toMap(keyMapper, valueMapper, (a, b) -> a, LinkedHashMap::new)); + } + public static Map> group2Map(Collection objs, Function function) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); diff --git a/src/com/engine/salary/web/EmployeeDeclareController.java b/src/com/engine/salary/web/EmployeeDeclareController.java index af3295194..356801c50 100644 --- a/src/com/engine/salary/web/EmployeeDeclareController.java +++ b/src/com/engine/salary/web/EmployeeDeclareController.java @@ -200,6 +200,14 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::refresh, refreshParam); } + @POST + @Path("/batRefresh") + @Produces(MediaType.APPLICATION_JSON) + public String batRefresh(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareRefreshParam refreshParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::batRefresh, refreshParam); + } + /** * 人员报送-获取整体的报送情况 * @@ -228,6 +236,14 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::declare, employeeDeclareParam); } + @POST + @Path("/batDeclare") + @Produces(MediaType.APPLICATION_JSON) + public String batDeclare(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareParam employeeDeclareParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::batDeclare, employeeDeclareParam); + } + /** * 人员报送-获取报送结果反馈 * @@ -242,6 +258,13 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::getDeclareFeedback, employeeDeclareParam); } + @POST + @Path("/batGetDeclareFeedback") + @Produces(MediaType.APPLICATION_JSON) + public String batGetDeclareFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareParam employeeDeclareParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::batGetDeclareFeedback, employeeDeclareParam); + } /** * 人员报送-后端业务逻辑是否已经完成 diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index a2913b3b1..73bf41f3f 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -217,6 +217,55 @@ public class SIAccountController { return new ResponseResult(user).run(getService(user)::save, param); } + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batSave, param); + } + + @POST + @Path("/batDelete") + @Produces(MediaType.APPLICATION_JSON) + public String batDelete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batDelete, param); + } + + @POST + @Path("/batFile") + @Produces(MediaType.APPLICATION_JSON) + public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batFile, param); + } + + @POST + @Path("/batSocialSecurityBenefitsRecalculate") + @Produces(MediaType.APPLICATION_JSON) + public String batSocialSecurityBenefitsRecalculate(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody AccountBatParam batParam ){ + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batSocialSecurityBenefitsRecalculate,batParam); + } + + @POST + @Path("/fcAuth") + @Produces(MediaType.APPLICATION_JSON) + public String fcAuth(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::fcAuth); + } + + + @POST + @Path("/batFC") + @Produces(MediaType.APPLICATION_JSON) + public String batFC(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batFC, param); + } + /** * 正常缴纳页核算 @@ -1188,4 +1237,54 @@ public class SIAccountController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSIAccountWrapper(user)::addNewBalance, param); } + + + /** + * 获取台账列表页 + * + * @param request + * @param response + * @return + */ + @POST + @Path("/qz/list") + @Produces(MediaType.APPLICATION_JSON) + public String qzReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody QZInsuranceAccountBatchParam insuranceAccountBatchParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getService(user)::qzReport, insuranceAccountBatchParam); + } + + /** + * 导出在线对比 + * + * @return + */ + @POST + @Path("/exportQZReport") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportContrast(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody QZInsuranceAccountBatchParam param) { + + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getService(user).exportQZReport(param); + String fileName = "社保公积金预算数据-" + LocalDate.now(); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("社保公积金预算数据导出异常", e); + throw e; + } + } + + } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 64f5a7bbd..e714125f9 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -142,6 +142,53 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::reCalculate, param.getSalaryAcctRecordId()); } + //批量保存并核算 + @POST + @Path("/batSaveAndAcct") + @Produces(MediaType.APPLICATION_JSON) + public String batSaveAndAcct(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctRecordBatchSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctRecordWrapper(user)::batSaveAndAcct, param); + } + + + //薪资核算 + @POST + @Path("/batAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String batAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batCalculate, param); + } + + //保存薪资核算的基本信息 + @POST + @Path("/basic/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batSave, param); + } + + + //归档薪资核算记录 + @POST + @Path("/batFile") + @Produces(MediaType.APPLICATION_JSON) + public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batFile, param); + } + + //重新核算 + @POST + @Path("/batReAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String batReAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batReCalculate, param); + } + //判断是否存在合并计税 @GET @Path("/hasConsolidatedTax") @@ -546,6 +593,25 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::calcTaxFeedback, salaryCalcTaxParam); } + + @POST + @Path("/acctresult/batCalcTax") + @ApiOperation("计算个税") + @Produces(MediaType.APPLICATION_JSON) + public String batCalcTax(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxBatParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::batCalcTax, salaryCalcTaxParam); + } + + @POST + @Path("/acctresult/batCalcTaxFeedback") + @ApiOperation("获取个税计算反馈") + @Produces(MediaType.APPLICATION_JSON) + public String batCalcTaxFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxBatParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::batCalcTaxFeedback, salaryCalcTaxParam); + } + //计算税后工资 @POST @Path("/acctresult/afterTaxAccounting") diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 64437a579..23e06b6ee 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -480,6 +480,29 @@ public class SalaryBillController { return new ResponseResult>(user).run(getSalarySendWrapper(user)::withdraw, queryParam); } + @POST + @Path("/send/batGrant") + @Produces(MediaType.APPLICATION_JSON) + public String batGrant(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySendWrapper(user)::batGrant, queryParam); + } + + /** + * 工资单撤回 + * + * @param queryParam + * @return + */ + @POST + @Path("/send/batWithdraw") + @Produces(MediaType.APPLICATION_JSON) + public String batWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySendWrapper(user)::batWithdraw, queryParam); + } + + /** * 工资单发放详情列表的高级搜索 * diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index e5a5ecb84..37384a21c 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -133,6 +133,20 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::save, saveParam); } + /** + * 个税申报表批量生成 + * + * @param param 批量保存参数 + * @return + */ + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::batSave, param); + } + /** * 刷新个税申报表的待刷新标识 @@ -525,12 +539,8 @@ public class TaxDeclarationController { } - /** - * 个税申报表详情列表 - * - * @param queryParam 查询条件 - * @return - */ + + //个税申报表详情列表 @POST @Path("/detail/list") @Produces(MediaType.APPLICATION_JSON) diff --git a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java index 14f5c5150..0a06d087d 100644 --- a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java +++ b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java @@ -93,7 +93,7 @@ public class AttendQuoteDataWrapper extends Service { attendQuoteFields.stream() .filter(attendQuoteField->effectiveColumns.contains(Util.null2String(attendQuoteField.getId()))) .forEach(attendQuoteField -> { - columns.add(Column.builder().title(attendQuoteField.getFieldName()) + columns.add(Column.builder().title(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage()))) .dataIndex(attendQuoteField.getId() + "_attendQuoteData") .key(attendQuoteField.getId() + "_attendQuoteData").display(Boolean.TRUE).build()); } diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 9372a990a..5684220e5 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -1,5 +1,6 @@ package com.engine.salary.wrapper; +import cn.hutool.core.collection.CollUtil; import com.cloudstore.dev.api.util.Util_DataCache; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; @@ -10,6 +11,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.employeedeclare.bo.EmployeeDeclareList; import com.engine.salary.entity.employeedeclare.dto.*; import com.engine.salary.entity.employeedeclare.param.*; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -37,6 +39,7 @@ import com.weaver.util.threadPool.entity.LocalRunnable; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -79,6 +82,11 @@ public class EmployeeDeclareWrapper extends Service { return ServiceUtil.getService(EmployeeDeclareExcelServiceImpl.class, user); } + private EmployeeDeclareOptService getEmployeeDeclareOptService(User user) { + return ServiceUtil.getService(EmployeeDeclareOptServiceImpl.class, user); + } + + /** * 人员报送的个税扣缴义务人列表 * @@ -93,14 +101,51 @@ public class EmployeeDeclareWrapper extends Service { if (StringUtils.isNotEmpty(queryParam.getTaxAgentName())) { taxAgents = taxAgents.stream().filter(e -> StringUtils.contains(e.getName(), queryParam.getTaxAgentName())).collect(Collectors.toList()); } + + //查询操作状态 + List lastOperates = queryParam.getLastOperates(); + List statuses = queryParam.getStatuses(); + EmployeeDeclareOptPO declareOptPO = EmployeeDeclareOptPO.builder() + .taxAgentIds(SalaryEntityUtil.properties(taxAgents, TaxAgentPO::getId)) + .build(); + List employeeDeclareOptPOS = getEmployeeDeclareOptService(user).listSome(declareOptPO); + Map longEmployeeDeclareOptPOMap = SalaryEntityUtil.convert2Map(employeeDeclareOptPOS, EmployeeDeclareOptPO::getTaxAgentId); + + // 分页 List dtoList = Lists.newArrayList(); for (TaxAgentPO taxAgent : taxAgents) { + EmployeeDeclareOptPO optPO = longEmployeeDeclareOptPOMap.get(taxAgent.getId()); + + optPO = optPO == null ? new EmployeeDeclareOptPO() : optPO; + Date taxCycle = optPO.getTaxCycle(); + EmployeeDeclareInfoDTO declareInfo = getDeclareInfo(EmployeeDeclareParam.builder().taxAgentId(taxAgent.getId()).taxCycle(taxCycle).build()); + DeclareStatusEnum status; + if (declareInfo.getNotDeclareSize() > 0) { + status = DeclareStatusEnum.NOT_DECLARE; + } else if (declareInfo.getDeclareFailSize() > 0) { + status = DeclareStatusEnum.DECLARE_FAIL; + } else { + status = DeclareStatusEnum.DECLARE_SUCCESS; + } + TaxAgentDeclareListDTO dto = TaxAgentDeclareListDTO.builder() .id(taxAgent.getId()) .taxAgentName(taxAgent.getName()) + .status(status.getDefaultLabel()) + .lastOperate(DeclareOptEnum.getByValue(optPO.getLastOperate()).getDefaultLabel()) + .lastOperateTime(optPO.getLastOperateTime()) .opts(Sets.newHashSet("admin")) .build(); + + //如果根据报送状态和最后操作功能筛选,则过滤掉没有查询到操作记录的数据 + if (CollUtil.isNotEmpty(lastOperates) && !lastOperates.contains(optPO.getLastOperate())) { + continue; + } + if (CollUtil.isNotEmpty(statuses) && !statuses.contains(Util.null2String(status.getValue()))) { + continue; + } + dtoList.add(dto); } return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), dtoList, TaxAgentDeclareListDTO.class); @@ -452,6 +497,32 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String batRefresh(EmployeeDeclareRefreshParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + param.setTaxAgentId(taxAgentId); + try { + getEmployeeDeclareService(user).refresh(param, Long.valueOf(user.getUID())); + success++; + } catch (Exception e) { + log.error("刷新数据失败:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + EmployeeDeclareOptPO po = EmployeeDeclareOptPO.builder() + .taxAgentId(taxAgentId) + .taxCycle(param.getTaxCycle()) + .lastOperate(DeclareOptEnum.BAT_REFRESH.getValue()) + .build(); + getEmployeeDeclareOptService(user).record(po); + } + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); + } + /** * 人员报送-获取人员报送的整体情况 * @@ -497,6 +568,32 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String batDeclare(EmployeeDeclareParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + param.setTaxAgentId(taxAgentId); + try { + getEmployeeDeclareService(user).declare(param); + success++; + } catch (Exception e) { + log.error("全部报送失败:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + EmployeeDeclareOptPO po = EmployeeDeclareOptPO.builder() + .taxAgentId(taxAgentId) + .taxCycle(param.getTaxCycle()) + .lastOperate(DeclareOptEnum.BAT_DECLARE.getValue()) + .build(); + getEmployeeDeclareOptService(user).record(po); + } + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); + } + /** * 人员报送-获取报送结果反馈 * @@ -532,6 +629,38 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String batGetDeclareFeedback(EmployeeDeclareParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + param.setTaxAgentId(taxAgentId); + try { + EmployeeDeclareRateDTO employeeDeclareRate = new EmployeeDeclareRateDTO() + .setIndex(UUID.randomUUID().toString()) + .setStatus(true) + .setFinish(false) + .setMsg(""); + getEmployeeDeclareService(user).getDeclareFeedback(param, employeeDeclareRate); + success++; + } catch (Exception e) { + log.error("获取报送结果反馈失败:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + + EmployeeDeclareOptPO po = EmployeeDeclareOptPO.builder() + .taxAgentId(taxAgentId) + .taxCycle(param.getTaxCycle()) + .lastOperate(DeclareOptEnum.BAT_DECLARE_FEEDBACK.getValue()) + .build(); + getEmployeeDeclareOptService(user).record(po); + } + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); + } + /** * 获取人员报送相关后端接口是否已经完成 diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index a9f9e0556..85597aca9 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -10,12 +10,14 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; +import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; @@ -55,6 +57,9 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } + private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) { + return ServiceUtil.getService(SalaryAcctResultWrapper.class, user); + } private SalarySobService getSalarySobService(User user) { return ServiceUtil.getService(SalarySobServiceImpl.class, user); @@ -225,7 +230,8 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord .setSalarySobId(salarySobPO.getId()) .setSalarySobName(salarySobPO.getName()) .setSalaryMonth(SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()).toString()) - .setDescription(salaryAcctRecordPO.getDescription()); + .setDescription(salaryAcctRecordPO.getDescription()) + .setMsg(salaryAcctRecordPO.getMsg()); } // 转换成前端所需的数据格式 Map result = new HashMap<>(); @@ -380,4 +386,46 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord public void updateSobConfig(Long id) { getSalaryAcctSobConfigService(user).updateBySalaryAcctRecordId(id); } + + + public void batSave(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batSave(param); + } + + + public void batFile(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batFile(param); + } + + public void batReCalculate(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batReCalculate(param); + + } + + public void batCalculate(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + SalaryAcctCalculateParam calculateParam = SalaryAcctCalculateParam.builder().salaryAcctRecordId(recordId).build(); + getSalaryAcctResultWrapper(user).calculate(calculateParam); + } + } + + public List batSaveAndAcct(SalaryAcctRecordBatchSaveParam saveParam) { + List ids = saveParam.getSalarySobIds().stream().filter(NumberUtils::isCreatable) + .map(Long::valueOf).map(salarySobId -> { + SalaryAcctRecordSaveParam build = SalaryAcctRecordSaveParam.builder() + .salarySobId(salarySobId) + .salaryMonth(SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth())) + .description(saveParam.getDescription()) + .runStatus("核算中") + .build(); + return save(build); + }).collect(Collectors.toList()); + + ids.forEach(salaryAcctRecordId -> { + getSalaryAcctResultWrapper(user).calculate(SalaryAcctCalculateParam.builder().salaryAcctRecordId(salaryAcctRecordId).build()); + }); + return ids; + } } diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index c2a3d45eb..e52b107d4 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -106,6 +106,7 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult Map datas = new HashMap<>(); datas.put("pageInfo", page); datas.put("columns", columns); + datas.put("msg", salaryAcctRecordPO.getMsg()); return datas; } @@ -371,4 +372,12 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult public void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam) { getSalaryCalcTaxService(user).calcTaxFeedback(salaryCalcTaxParam); } + + public void batCalcTax(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + getSalaryCalcTaxService(user).batCalcTax(salaryCalcTaxBatParam); + } + + public void batCalcTaxFeedback(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + getSalaryCalcTaxService(user).batCalcTaxFeedback(salaryCalcTaxBatParam); + } } diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 8a8b87e51..e7cba7f24 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -534,9 +534,6 @@ public class SalaryArchiveWrapper extends Service { return map; } - public Map selectSalaryArchiveColumns(String importType) { - return getSalaryArchiveService(user).selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum.parseByValue(importType)); - } public Map checkSalaryArchiveInit(SalaryArchiveImportActionParam importData) { diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index f97a798dc..44c8d16fa 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -117,9 +117,9 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy list.forEach(dto -> { // 回算过,但是查看的是普通工资单(不能查看详情);回算过,但是查看的是回算工资单(可以发);记录没回算过(可以发) - if(Objects.equals(dto.getSalaryAcctRecordType(), NumberUtils.INTEGER_ONE) && Objects.equals(dto.getSalaryAcctType(),NumberUtils.INTEGER_ZERO)){ + if (Objects.equals(dto.getSalaryAcctRecordType(), NumberUtils.INTEGER_ONE) && Objects.equals(dto.getSalaryAcctType(), NumberUtils.INTEGER_ZERO)) { dto.setCanSeeDetail(false); - }else{ + } else { dto.setCanSeeDetail(true); } }); @@ -142,7 +142,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy e.setTemplate(NumberUtils.INTEGER_ONE.equals(e.getSalaryAcctType()) ? salaryTemplatePO.getReplenishName() : salaryTemplatePO.getName()); e.setTemplateId(salaryTemplatePO.getId()); if ((salaryTemplatePO.getAckFeedbackStatus() != null && salaryTemplatePO.getAckFeedbackStatus() == 1) || - (salaryTemplatePO.getFeedbackStatus() != null && salaryTemplatePO.getFeedbackStatus() == 1) ) { + (salaryTemplatePO.getFeedbackStatus() != null && salaryTemplatePO.getFeedbackStatus() == 1)) { e.setAckFeedbackStatus(1); } else { e.setAckFeedbackStatus(0); @@ -688,6 +688,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy /** * 发送短信验证码 + * * @param param 短信验证码发送参数 */ public void sendMobileCode(SMSCodeSendParam param) { @@ -696,6 +697,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy /** * 校验短信验证码 + * * @param param * @return */ @@ -706,7 +708,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public PayrollCheckTypeEnum payrollCheckType() { SalarySysConfPO conf = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_PAYROLL_CHECK_TYPE); - if(conf == null){ + if (conf == null) { return PayrollCheckTypeEnum.PWD; } @@ -714,14 +716,14 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy } public void confirmSalaryBill(Long salaryInfoId) { - if(ObjectUtil.isNull(salaryInfoId)){ + if (ObjectUtil.isNull(salaryInfoId)) { throw new SalaryRunTimeException("工资单id不能为空!"); } getSalaryBillService(user).confirmSalaryBill(salaryInfoId); } public void feedBackSalaryBill(Long salaryInfoId) { - if(ObjectUtil.isNull(salaryInfoId)){ + if (ObjectUtil.isNull(salaryInfoId)) { throw new SalaryRunTimeException("工资单id不能为空!"); } getSalaryBillService(user).feedBackSalaryBill(salaryInfoId); @@ -738,4 +740,50 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) { return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam); } + + + public String batGrant(SalarySendBatParam param) { + List salarySendIds = param.getSalarySendIds(); + + int successCount = 0; + int failCount = 0; + String failMsg = ""; + for (int i = 0; i < salarySendIds.size(); i++) { + try { + Long sendId = salarySendIds.get(i); + SalarySendGrantParam grantParam = SalarySendGrantParam.builder() + .salarySendId(sendId) + .build(); + grant(grantParam); + successCount++; + } catch (Exception e) { + failCount++; + failMsg = failMsg + "第" + (i + 1) + "个发放失败!失败原因:" + e.getMessage() + "\n"; + } + } + + return String.format("成功:" + successCount + "个,失败:" + failCount + "个%s", failCount == 0 ? "" : ",失败原因:" + failMsg); + } + + public String batWithdraw(SalarySendBatParam param) { + List salarySendIds = param.getSalarySendIds(); + + int successCount = 0; + int failCount = 0; + String failMsg = ""; + for (int i = 0; i < salarySendIds.size(); i++) { + try { + Long sendId = salarySendIds.get(i); + SalarySendWithdrawParam grantParam = SalarySendWithdrawParam.builder() + .salarySendId(sendId) + .build(); + withdraw(grantParam); + } catch (Exception e) { + failCount++; + failMsg = failMsg + "第" + (i + 1) + "个撤回失败!失败原因:" + e.getMessage() + "\n"; + } + + } + return String.format("成功:" + successCount + "个,失败:" + failCount + "个%s", failCount == 0 ? "" : ",失败原因:" + failMsg); + } } diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index d98b8a419..1f78a4029 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -31,5 +31,4 @@ public class TaxDeclarationWrapper extends Service { private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } - } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 8b127dddd..1662cab30 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -416,6 +416,49 @@ public class TaxDeclareRecordWrapper extends Service { return taxDeclarationRate.getIndex(); } + public String batSave(TaxDeclarationSaveParam param) { + TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true) + .setIndex(Util.null2String(IdGenerator.generate())) + .setMsg(SalaryI18nUtil.getI18nLabel(95836, "生成申报表")); + getSalaryCacheService(user).set(SalaryCacheKey.TAX_DECLARATION + taxDeclarationRate.getIndex(), taxDeclarationRate); + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + try { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + try { + param.setTaxAgentId(taxAgentId); + getTaxDeclareRecordService(user).save(param); + success++; + } catch (SalaryRunTimeException e) { + msg.append(e.getMessage()).append(";"); + fail++; + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + taxDeclarationRate.setStatus(fail==0).setFinish(true).setMsg(msg.toString()); + } catch (SalaryRunTimeException e) { + taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + taxDeclarationRate.setStatus(false).setFinish(true).setMsg(SalaryI18nUtil.getI18nLabel(187276, "个税申报表生成报错:") + e.getMessage()); + } finally { + getSalaryCacheService(user).set(SalaryCacheKey.TAX_DECLARATION + taxDeclarationRate.getIndex(), taxDeclarationRate); + } + } + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "saveTaxDeclaration", localRunnable); + return taxDeclarationRate.getIndex(); + } + /** * 更新个税申报表的待刷新数据的标识 *