diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index bcc318565..0638a4f0d 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=2.14.1.2405.01 +version=2.14.2.2405.02 openFormulaForcedEditing=false \ No newline at end of file diff --git a/resource/sqlupgrade/DM/sql202404260903.sql b/resource/sqlupgrade/DM/sql202404260903.sql new file mode 100644 index 000000000..8e4f496a6 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202404260903.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_acct_sob_config +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + basic_config clob, + employee_field_config clob, + item_config clob, + item_group_config clob, + back_item_config clob, + adjust_rule_config clob, + check_rule_config clob +); +/ + diff --git a/resource/sqlupgrade/DM/sql202404290103.sql b/resource/sqlupgrade/DM/sql202404290103.sql new file mode 100644 index 000000000..64ed7e662 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202404290103.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_sob_item ADD item_hide NUMBER(20,0); +/ + +ALTER TABLE hrsa_salary_sob_item_group ADD item_hide NUMBER(20,0); +/ + diff --git a/resource/sqlupgrade/DM/sql202404290603.sql b/resource/sqlupgrade/DM/sql202404290603.sql new file mode 100644 index 000000000..6a05dfadf --- /dev/null +++ b/resource/sqlupgrade/DM/sql202404290603.sql @@ -0,0 +1,12 @@ +update hrsa_salary_sob_item set item_hide = 0; +/ + +update hrsa_salary_sob_item_group set item_hide = 0; +/ + +UPDATE hrsa_salary_sob_item a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + +UPDATE hrsa_salary_sob_item_group a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + diff --git a/resource/sqlupgrade/GS/sql202404260903.sql b/resource/sqlupgrade/GS/sql202404260903.sql new file mode 100644 index 000000000..8e4f496a6 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202404260903.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_acct_sob_config +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + basic_config clob, + employee_field_config clob, + item_config clob, + item_group_config clob, + back_item_config clob, + adjust_rule_config clob, + check_rule_config clob +); +/ + diff --git a/resource/sqlupgrade/GS/sql202404290103.sql b/resource/sqlupgrade/GS/sql202404290103.sql new file mode 100644 index 000000000..64ed7e662 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202404290103.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_sob_item ADD item_hide NUMBER(20,0); +/ + +ALTER TABLE hrsa_salary_sob_item_group ADD item_hide NUMBER(20,0); +/ + diff --git a/resource/sqlupgrade/GS/sql202404290603.sql b/resource/sqlupgrade/GS/sql202404290603.sql new file mode 100644 index 000000000..6a05dfadf --- /dev/null +++ b/resource/sqlupgrade/GS/sql202404290603.sql @@ -0,0 +1,12 @@ +update hrsa_salary_sob_item set item_hide = 0; +/ + +update hrsa_salary_sob_item_group set item_hide = 0; +/ + +UPDATE hrsa_salary_sob_item a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + +UPDATE hrsa_salary_sob_item_group a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + diff --git a/resource/sqlupgrade/JC/sql202404260903.sql b/resource/sqlupgrade/JC/sql202404260903.sql new file mode 100644 index 000000000..8e4f496a6 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202404260903.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_acct_sob_config +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + basic_config clob, + employee_field_config clob, + item_config clob, + item_group_config clob, + back_item_config clob, + adjust_rule_config clob, + check_rule_config clob +); +/ + diff --git a/resource/sqlupgrade/JC/sql202404290103.sql b/resource/sqlupgrade/JC/sql202404290103.sql new file mode 100644 index 000000000..64ed7e662 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202404290103.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_sob_item ADD item_hide NUMBER(20,0); +/ + +ALTER TABLE hrsa_salary_sob_item_group ADD item_hide NUMBER(20,0); +/ + diff --git a/resource/sqlupgrade/JC/sql202404290603.sql b/resource/sqlupgrade/JC/sql202404290603.sql new file mode 100644 index 000000000..6a05dfadf --- /dev/null +++ b/resource/sqlupgrade/JC/sql202404290603.sql @@ -0,0 +1,12 @@ +update hrsa_salary_sob_item set item_hide = 0; +/ + +update hrsa_salary_sob_item_group set item_hide = 0; +/ + +UPDATE hrsa_salary_sob_item a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + +UPDATE hrsa_salary_sob_item_group a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202404260903.sql b/resource/sqlupgrade/Mysql/sql202404260903.sql new file mode 100644 index 000000000..163981fec --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202404260903.sql @@ -0,0 +1,18 @@ +create table hrsa_salary_acct_sob_config +( + id bigint primary key comment 'ID' , + create_time datetime comment '����ʱ��' , + update_time datetime comment '�޸�ʱ��' , + creator bigint comment '������id' , + delete_type int default 0 comment '�Ƿ�ɾ��' , + tenant_key varchar(10) comment '�⻧KEY' , + salary_acct_record_id bigint comment 'н�ʺ����¼��id' , + basic_config text comment 'н�����׵Ļ�����Ϣ' , + employee_field_config text comment 'н�����׵�Ա����Ϣ�ֶ�' , + item_config text comment 'н�����׵�н����Ŀ' , + item_group_config text comment 'н�����׵�н����Ŀ����' , + back_item_config text comment 'н����Ŀ�Ļ���н����Ŀ' , + adjust_rule_config text comment 'н����Ŀ�ĵ�н����' , + check_rule_config text comment 'н����Ŀ��У�����' +) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202404290103.sql b/resource/sqlupgrade/Mysql/sql202404290103.sql new file mode 100644 index 000000000..dfba50c80 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202404290103.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_sob_item add item_hide bigint; + +alter table hrsa_salary_sob_item_group add item_hide bigint; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202404290603.sql b/resource/sqlupgrade/Mysql/sql202404290603.sql new file mode 100644 index 000000000..4e471b74a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202404290603.sql @@ -0,0 +1,7 @@ +update hrsa_salary_sob_item set item_hide = 0; + +update hrsa_salary_sob_item_group set item_hide = 0; + +update hrsa_salary_sob_item a INNER JOIN hrsa_salary_item_hide b on a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id set a.item_hide = b.item_hide where a.delete_type=0 and b.delete_type=0 and b.is_group=0 and b.item_hide is not null; + +update hrsa_salary_sob_item_group a INNER JOIN hrsa_salary_item_hide b on a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id set a.item_hide = b.item_hide where a.delete_type=0 and b.delete_type=0 and b.is_group=1 and b.item_hide is not null; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202404260903.sql b/resource/sqlupgrade/Oracle/sql202404260903.sql new file mode 100644 index 000000000..a5e92e92d --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202404260903.sql @@ -0,0 +1,18 @@ +create table hrsa_salary_acct_sob_config +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + basic_config clob, + employee_field_config clob, + item_config clob, + item_group_config clob, + back_item_config clob, + adjust_rule_config clob, + check_rule_config clob +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202404290103.sql b/resource/sqlupgrade/Oracle/sql202404290103.sql new file mode 100644 index 000000000..9b87751a9 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202404290103.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_sob_item ADD item_hide NUMBER(20,0) +/ + +ALTER TABLE hrsa_salary_sob_item_group ADD item_hide NUMBER(20,0) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202404290603.sql b/resource/sqlupgrade/Oracle/sql202404290603.sql new file mode 100644 index 000000000..c854f060f --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202404290603.sql @@ -0,0 +1,9 @@ +update hrsa_salary_sob_item set item_hide = 0 +/ +update hrsa_salary_sob_item_group set item_hide = 0 +/ +UPDATE hrsa_salary_sob_item a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide) +/ + +UPDATE hrsa_salary_sob_item_group a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202404260903.sql b/resource/sqlupgrade/PG/sql202404260903.sql new file mode 100644 index 000000000..036c82461 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202404260903.sql @@ -0,0 +1,18 @@ +create table hrsa_salary_acct_sob_config +( + id bigint primary key , + create_time timestamp, + update_time timestamp, + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + salary_acct_record_id bigint, + basic_config text, + employee_field_config text, + item_config text, + item_group_config text, + back_item_config text, + adjust_rule_config text, + check_rule_config text +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202404290103.sql b/resource/sqlupgrade/PG/sql202404290103.sql new file mode 100644 index 000000000..890044022 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202404290103.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_sob_item ADD COLUMN item_hide bigint; + +ALTER TABLE hrsa_salary_sob_item_group ADD COLUMN item_hide bigint; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202404290603.sql b/resource/sqlupgrade/PG/sql202404290603.sql new file mode 100644 index 000000000..df6dfdff9 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202404290603.sql @@ -0,0 +1,7 @@ +update hrsa_salary_sob_item set item_hide = 0; + +update hrsa_salary_sob_item_group set item_hide = 0; + +UPDATE hrsa_salary_sob_item a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); + +UPDATE hrsa_salary_sob_item_group a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202404260903.sql b/resource/sqlupgrade/SQLServer/sql202404260903.sql new file mode 100644 index 000000000..fcb78e500 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202404260903.sql @@ -0,0 +1,18 @@ +create table hrsa_salary_acct_sob_config +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + salary_acct_record_id bigint, + basic_config ntext, + employee_field_config ntext, + item_config ntext, + item_group_config ntext, + back_item_config ntext, + adjust_rule_config ntext, + check_rule_config ntext +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202404290103.sql b/resource/sqlupgrade/SQLServer/sql202404290103.sql new file mode 100644 index 000000000..a3c0c3a2d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202404290103.sql @@ -0,0 +1,5 @@ +alter table hrsa_salary_sob_item add item_hide bigint +GO + +alter table hrsa_salary_sob_item_group add item_hide bigint +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202404290603.sql b/resource/sqlupgrade/SQLServer/sql202404290603.sql new file mode 100644 index 000000000..66025a94d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202404290603.sql @@ -0,0 +1,14 @@ +update hrsa_salary_sob_item set item_hide = 0 +GO + +update hrsa_salary_sob_item_group set item_hide = 0 +GO + +UPDATE hrsa_salary_sob_item SET item_hide = b.item_hide FROM hrsa_salary_sob_item a INNER JOIN hrsa_salary_item_hide b ON a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id + WHERE a.delete_type=0 and b.delete_type=0 and b.is_group=0 and b.item_hide is not null +GO + + +UPDATE hrsa_salary_sob_item_group SET item_hide = b.item_hide FROM hrsa_salary_sob_item_group a INNER JOIN hrsa_salary_item_hide b ON a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id + WHERE a.delete_type=0 and b.delete_type=0 and b.is_group=1 and b.item_hide is not null +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202404260903.sql b/resource/sqlupgrade/ST/sql202404260903.sql new file mode 100644 index 000000000..8e4f496a6 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202404260903.sql @@ -0,0 +1,19 @@ +create table hrsa_salary_acct_sob_config +( + id number primary key , + create_time date, + update_time date, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + basic_config clob, + employee_field_config clob, + item_config clob, + item_group_config clob, + back_item_config clob, + adjust_rule_config clob, + check_rule_config clob +); +/ + diff --git a/resource/sqlupgrade/ST/sql202404290103.sql b/resource/sqlupgrade/ST/sql202404290103.sql new file mode 100644 index 000000000..64ed7e662 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202404290103.sql @@ -0,0 +1,6 @@ +ALTER TABLE hrsa_salary_sob_item ADD item_hide NUMBER(20,0); +/ + +ALTER TABLE hrsa_salary_sob_item_group ADD item_hide NUMBER(20,0); +/ + diff --git a/resource/sqlupgrade/ST/sql202404290603.sql b/resource/sqlupgrade/ST/sql202404290603.sql new file mode 100644 index 000000000..6a05dfadf --- /dev/null +++ b/resource/sqlupgrade/ST/sql202404290603.sql @@ -0,0 +1,12 @@ +update hrsa_salary_sob_item set item_hide = 0; +/ + +update hrsa_salary_sob_item_group set item_hide = 0; +/ + +UPDATE hrsa_salary_sob_item a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.salary_item_id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + +UPDATE hrsa_salary_sob_item_group a SET item_hide = (SELECT b.item_hide FROM hrsa_salary_item_hide b WHERE a.id = b.salary_item_id and a.salary_sob_id = b.salary_sob_id and a.delete_type=0 and b.delete_type=0 ) WHERE EXISTS (SELECT 1 FROM hrsa_salary_item_hide b WHERE b.item_hide = a.item_hide); +/ + diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index e7f7e0d06..0ae9bc659 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -841,6 +841,7 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build(); + StringBuilder errorMsg = new StringBuilder(""); if (oldOtherInfoList.size() == 1) { InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); //设置福利档案基数调整记录数据 @@ -867,15 +868,17 @@ public class SIArchivesBiz { .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("其他福利个人:" + errorMsg.toString()); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("其他福利公司:" + errorMsg.toString()); } } encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); @@ -912,15 +915,17 @@ public class SIArchivesBiz { .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("其他福利个人:" + errorMsg.toString()); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("其他福利公司:" + errorMsg.toString()); } } encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); @@ -987,6 +992,7 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build(); + StringBuilder errorMsg = new StringBuilder(""); if (oldFundInfoList.size() == 1) { InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); //设置福利档案基数调整记录数据 @@ -1014,15 +1020,17 @@ public class SIArchivesBiz { .employeeId(param.getEmployeeId()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("公积金个人:" + errorMsg.toString()); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("公积金公司:" + errorMsg.toString()); } } encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); @@ -1061,15 +1069,17 @@ public class SIArchivesBiz { .employeeId(param.getEmployeeId()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("公积金个人:" + errorMsg.toString()); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("公积金公司:" + errorMsg.toString()); } } encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); @@ -1143,6 +1153,7 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build(); + StringBuilder errorMsg = new StringBuilder(); //组装新数据 if (oldSocialInfoList.size() == 1) { //老数据 @@ -1172,15 +1183,17 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build(); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("社保个人:" + errorMsg.toString()); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("社保公司:" + errorMsg.toString()); } } encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); @@ -1219,15 +1232,17 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build(); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("社保个人:" + errorMsg.toString()); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + throw new SalaryRunTimeException("社保公司:" + errorMsg.toString()); } } encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); @@ -1267,7 +1282,7 @@ public class SIArchivesBiz { * @param paymentBaseString * @return */ - public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { + public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope, StringBuilder errorMsg) { if (primaryId ==null || paymentBaseString == null) { return true; @@ -1283,6 +1298,7 @@ public class SIArchivesBiz { if (entry.getValue() == null || entry.getValue().length() == 0) { continue; } else if (!isNumeric(entry.getValue())) { + errorMsg.append("福利值非数字"); log.info("福利值非数字!"); return false; } @@ -1291,6 +1307,7 @@ public class SIArchivesBiz { List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); if (insuranceSchemeDetailPOList.size() == 0) { + errorMsg.append("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: " + primaryId + ", 福利明细项id:" + Long.valueOf(entry.getKey())); log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); return false; } @@ -1304,11 +1321,13 @@ public class SIArchivesBiz { String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { //数值低于对应福利明细下限 + errorMsg.append("基数:"+ entry.getKey() + " 数值:" + entry.getValue() +"低于对应福利明细下限:" + lowerLimit); log.info("社保基数 {} 数值 {} 低于对应福利明细下限 {}!", entry.getKey(), entry.getValue(), lowerLimit); return false; } if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { //数值高于对应福利明细上限 + errorMsg.append("基数:"+ entry.getKey() + " 数值:" + entry.getValue() +"高于对应福利明细上限:" + upperLimit); log.info("社保基数 {} 数值 {} 高于对应福利明细上限 {} !", entry.getKey(), entry.getValue(), upperLimit); return false; } diff --git a/src/com/engine/salary/biz/SalarySobItemGroupBiz.java b/src/com/engine/salary/biz/SalarySobItemGroupBiz.java index 9f4f6af68..781c60a72 100644 --- a/src/com/engine/salary/biz/SalarySobItemGroupBiz.java +++ b/src/com/engine/salary/biz/SalarySobItemGroupBiz.java @@ -64,15 +64,6 @@ public class SalarySobItemGroupBiz { } } - public List listSomeWithItemHide(SalarySobItemGroupPO build) { - SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); - try { - SalarySobItemGroupMapper mapper = sqlSession.getMapper(SalarySobItemGroupMapper.class); - return mapper.listSomeWithItemHide(build); - } finally { - sqlSession.close(); - } - } public void deleteByIds(List ids) { diff --git a/src/com/engine/salary/constant/des.json b/src/com/engine/salary/constant/des.json index f82a626bd..0b35d5f80 100644 --- a/src/com/engine/salary/constant/des.json +++ b/src/com/engine/salary/constant/des.json @@ -399,7 +399,7 @@ "name": "IDCARD", "chineseName": "身份证函数", "description": "从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。", - "example": "IDCARD( ‘43070319980706334X’ , ‘BD’ )", + "example": "IDCARD( ‘******19980706****’ , ‘BD’ )", "result": "'1998-07-06'", "paramDescs": [ "*身份证号码*(必选)", diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java index 7f09f2048..9977e0a63 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java @@ -88,7 +88,7 @@ public class SalaryTemplateBO { .build(); } - public static List convertSalarySobItemAggregateToSalaryItemSet(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Long currentEmployeeId, boolean isReplenish) { + public static List convertSalarySobItemAggregateToSalaryItemSet(SalarySobItemAggregateDTO salarySobItemAggregateDTO, boolean isReplenish) { List groups = new LinkedList<>(); if (salarySobItemAggregateDTO!=null) { // 1.员工信息 diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConfig.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConfig.java new file mode 100644 index 000000000..70d8b96c9 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConfig.java @@ -0,0 +1,84 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; +import com.engine.salary.entity.salarysob.po.*; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.db.IdGenerator; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +@Builder +public class SalaryAcctConfig { + + private SalaryAcctRecordPO salaryAcctRecord; + + private SalarySobPO salarySob; + + private List salarySobEmpFields; + + private List salarySobItems; + + private List salarySobItemGroups; + + private List salarySobBackItems; + + @Deprecated + private List salarySobAdjustRules; + + @Deprecated + private List salarySobCheckRules; + + public SalaryAcctConfig(SalaryAcctRecordPO salaryAcctRecord, + SalarySobPO salarySob, + List salarySobEmpFields, + List salarySobItems, + List salarySobItemGroups, + List salarySobBackItems, + List salarySobAdjustRules, + List salarySobCheckRules) { + this.salaryAcctRecord = salaryAcctRecord; + this.salarySob = salarySob; + this.salarySobEmpFields = salarySobEmpFields; + this.salarySobItems = salarySobItems; + this.salarySobItemGroups = salarySobItemGroups; + this.salarySobBackItems = salarySobBackItems; + this.salarySobAdjustRules = salarySobAdjustRules; + this.salarySobCheckRules = salarySobCheckRules; + } + + public SalaryAcctSobConfigPO buildAcctSobConfig() { + Date now = new Date(); + return SalaryAcctSobConfigPO.builder() + .id(IdGenerator.generate()) + .salaryAcctRecordId(salaryAcctRecord.getId()) + .basicConfig(JsonUtil.toJsonString(salarySob)) + .employeeFieldConfig(JsonUtil.toJsonString(salarySobEmpFields)) + .itemConfig(JsonUtil.toJsonString(salarySobItems)) + .itemGroupConfig(JsonUtil.toJsonString(salarySobItemGroups)) + .backItemConfig(JsonUtil.toJsonString(salarySobBackItems)) + .adjustRuleConfig(JsonUtil.toJsonString(salarySobAdjustRules)) + .checkRuleConfig(JsonUtil.toJsonString(salarySobCheckRules)) + .tenantKey(salaryAcctRecord.getTenantKey()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .creator(salaryAcctRecord.getCreator()) + .createTime(now) + .updateTime(now) + .build(); + } + + public static SalaryAcctConfig parse(SalaryAcctSobConfigPO po) { + return SalaryAcctConfig.builder() + .salarySob(JsonUtil.parseObject(po.getBasicConfig(), SalarySobPO.class)) + .salarySobEmpFields(JsonUtil.parseList(po.getEmployeeFieldConfig(), SalarySobEmpFieldPO.class)) + .salarySobItemGroups(JsonUtil.parseList(po.getItemGroupConfig(), SalarySobItemGroupPO.class)) + .salarySobItems(JsonUtil.parseList(po.getItemConfig(), SalarySobItemPO.class)) + .salarySobBackItems(JsonUtil.parseList(po.getBackItemConfig(), SalarySobBackItemPO.class)) + .build(); + } +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctSobConfigPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctSobConfigPO.java new file mode 100644 index 000000000..b6d09ecf8 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctSobConfigPO.java @@ -0,0 +1,100 @@ +package com.engine.salary.entity.salaryacct.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * 账套快照 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_salary_acct_sob_config +public class SalaryAcctSobConfigPO { + + /** + * 主键id + */ + private Long id; + + /** + * 薪资核算记录id + */ + private Long salaryAcctRecordId; + + /** + * 薪资账套基本信息 + */ + private String basicConfig; + + /** + * 员工信息字段 + */ + private String employeeFieldConfig; + + /** + * 薪资项目 + */ + private String itemConfig; + + /** + * 薪资项目分类 + */ + private String itemGroupConfig; + + /** + * 回算薪资项目 + */ + private String backItemConfig; + + /** + * 调薪规则 + */ + @Deprecated + private String adjustRuleConfig; + + /** + * 校验规则 + */ + @Deprecated + private String checkRuleConfig; + + /** + * 租户key + */ + private String tenantKey; + + /** + * 创建人id + */ + private Long creator; + + /** + * 是否删除 + */ + private Integer deleteType; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + //主键id集合 + private Collection ids; +} diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java index 659707a90..1b4981481 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java @@ -8,9 +8,13 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import java.util.Collection; +import java.util.Comparator; import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; /** * @author Harryxzy @@ -116,4 +120,28 @@ public class SalarySobBackItemPO{ * 薪资项目id */ private Collection salaryItemIds; + + public String toCompareString() { + return "SalarySobBackItemPO{" + + "salarySobId=" + salarySobId + + ", salaryItemId=" + salaryItemId + + ", salaryItemCode='" + salaryItemCode + '\'' + + ", dataType='" + dataType + '\'' + + ", roundingMode=" + roundingMode + + ", pattern=" + pattern + + ", valueType=" + valueType + + ", formulaId=" + formulaId + + ", backCalcType=" + backCalcType + + '}'; + } + + public static String toCompareString(List salarySobBackItems) { + if (CollectionUtils.isEmpty(salarySobBackItems)) { + return ""; + } + return salarySobBackItems.stream() + .sorted(Comparator.comparingLong(SalarySobBackItemPO::getSalaryItemId)) + .map(SalarySobBackItemPO::toCompareString) + .collect(Collectors.joining(",")); + } } \ No newline at end of file diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java index 01d44a0ed..ddac5dcf9 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java @@ -5,9 +5,13 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import org.apache.commons.collections4.CollectionUtils; import java.util.Collection; +import java.util.Comparator; import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; /** * 薪资账套-薪资项目-员工基本信息 @@ -76,4 +80,23 @@ public class SalarySobEmpFieldPO { private Date updateTime; Collection ids; + + public String toCompareString() { + return "SalarySobEmpFieldPO{" + + "salarySobId=" + salarySobId + + ", fieldCode='" + fieldCode + '\'' + + ", sortedIndex=" + sortedIndex + + ", canDelete=" + canDelete + + '}'; + } + + public static String toCompareString(List salarySobEmpFields) { + if (CollectionUtils.isEmpty(salarySobEmpFields)) { + return ""; + } + return salarySobEmpFields.stream() + .sorted(Comparator.comparingInt(SalarySobEmpFieldPO::getSortedIndex)) + .map(SalarySobEmpFieldPO::toCompareString) + .collect(Collectors.joining(",")); + } } diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java index 64ef8a52f..97469a997 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java @@ -4,9 +4,13 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import java.util.Collection; +import java.util.Comparator; import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; /** * 薪资账套薪资项目分组 @@ -77,4 +81,22 @@ public class SalarySobItemGroupPO { private Long itemHide; Collection ids; + + public String toCompareString() { + return "SalarySobItemGroupPO{" + + "name='" + name + '\'' + + ", sortedIndex=" + sortedIndex + + ", itemHide=" + itemHide + + '}'; + } + + public static String toCompareString(List salarySobItemGroups) { + if (CollectionUtils.isEmpty(salarySobItemGroups)) { + return ""; + } + return salarySobItemGroups.stream() + .sorted(Comparator.comparing(SalarySobItemGroupPO::getSortedIndex)) + .map(SalarySobItemGroupPO::toCompareString) + .collect(Collectors.joining(",")); + } } diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java index c13df6343..74e2f278a 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java @@ -7,9 +7,13 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import java.util.Collection; +import java.util.Comparator; import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; /** * 薪资账套薪资项目 @@ -136,4 +140,30 @@ public class SalarySobItemPO { Collection notInSalaryItemIds; + + public String toCompareString() { + return "SalarySobItemPO{" + + "salarySobId=" + salarySobId + + ", salaryItemId=" + salaryItemId + + ", salarySobItemGroupId=" + salarySobItemGroupId + + ", formulaId=" + formulaId + + ", sortedIndex=" + sortedIndex + + ", canDelete=" + canDelete + + ", roundingMode=" + roundingMode + + ", pattern=" + pattern + + ", valueType=" + valueType + + ", itemHide=" + itemHide + + '}'; + } + + public static String toCompareString(List salarySobItems) { + if (CollectionUtils.isEmpty(salarySobItems)) { + return ""; + } + return salarySobItems.stream() + .sorted(Comparator.comparingLong(SalarySobItemPO::getSalaryItemId)) + .map(SalarySobItemPO::toCompareString) + .collect(Collectors.joining(",")); + } + } diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java index c7c2f8141..37c703e43 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.salarysob.po; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.hrmelog.annotation.ElogTransform; +import com.engine.salary.util.valid.Compare; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -27,12 +28,14 @@ public class SalarySobPO { * 主键id */ @ElogTransform( name="主键" ) + @Compare private Long id; /** * 名称 */ @ElogTransform( name="名称" ) + @Compare private String name; /** @@ -46,42 +49,49 @@ public class SalarySobPO { * @see IncomeCategoryEnum */ @ElogTransform( name="薪资类型" ) + @Compare private Integer incomeCategory; /** * 薪资周期。1:上上月、2:上月、3:本月、4:下月 */ @ElogTransform( name="薪资周期" ) + @Compare private Integer salaryCycleType; /** * 薪资周期的起始日期 */ @ElogTransform( name="薪资周期起始日期" ) + @Compare private Integer salaryCycleFromDay; /** * 税款所属期。1:上上月、2:上月、3:本月、4:下月 */ @ElogTransform( name="税款所属期" ) + @Compare private Integer taxCycleType; /** * 考勤周期。1:上上月、2:上月、3:本月、4:下月 */ @ElogTransform( name="考勤周期" ) + @Compare private Integer attendCycleType; /** * 考勤周期的起始日期 */ @ElogTransform( name="考勤周期起始日期" ) + @Compare private Integer attendCycleFromDay; /** * 社保福利所属期。1:上上月、2:上月、3:本月、4:下月 */ @ElogTransform( name="社保福利所属期" ) + @Compare private Integer socialSecurityCycleType; /** diff --git a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSaveParam.java b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSaveParam.java index 8d086b1ad..25f72a711 100644 --- a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSaveParam.java +++ b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSaveParam.java @@ -25,4 +25,9 @@ public class InsuranceArchivesSaveParam { private String paymentForm; private String paymentComForm; + + /** + * 是否修改数据为上限或下限 + */ + private Boolean changeData; } diff --git a/src/com/engine/salary/formlua/constant/FormluaConstant.java b/src/com/engine/salary/formlua/constant/FormluaConstant.java index 4cce5e978..c3d7f4cb7 100644 --- a/src/com/engine/salary/formlua/constant/FormluaConstant.java +++ b/src/com/engine/salary/formlua/constant/FormluaConstant.java @@ -404,7 +404,7 @@ public class FormluaConstant { " \"name\": \"IDCARD\",\n" + " \"chineseName\": \"身份证函数\",\n" + " \"description\": \"从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。\",\n" + - " \"example\": \"IDCARD( ‘43070319980706334X’ , ‘BD’ )\",\n" + + " \"example\": \"IDCARD( ‘******19980706****’ , ‘BD’ )\",\n" + " \"result\": \"'1998-07-06'\",\n" + " \"paramDescs\": [\n" + " \"*身份证号码*(必选)\",\n" + diff --git a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java index 666135c26..83d0a2c81 100644 --- a/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java +++ b/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java @@ -3,7 +3,6 @@ package com.engine.salary.formlua.entity.parameter; import com.engine.salary.util.SalaryI18nUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @@ -74,7 +73,7 @@ public class FuncDescUtil { funcMap.put("RIGHT", SalaryI18nUtil.getI18nLabel(97740, "从文本右侧开始,返回指定字符数的文字。示例:
RIGHT('大家好', 2) 结果: '家好'")); funcMap.put("MID", SalaryI18nUtil.getI18nLabel(97741, "从文本指定位置之后开始,返回指定字符数的文字。示例:
MID('大家好', 2, 1) 结果: '家'")); funcMap.put("ISEMPTY", SalaryI18nUtil.getI18nLabel(97742, "变量为空或未填写,则返回真。示例:
ISEMPTY({员工表.电话})")); - funcMap.put("IDCARD", SalaryI18nUtil.getI18nLabel(97743, "从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。示例:
IDCARD( ‘43070319980706334X’ , ‘BD’ ) 结果: '1998-07-06'")); + funcMap.put("IDCARD", SalaryI18nUtil.getI18nLabel(97743, "从身份证号码中获取相关信息,比如:生日(BD)、年龄(AGE)、籍贯(NA)、性别(GENDER)。示例:
IDCARD( ‘******19980706****’ , ‘BD’ ) 结果: '1998-07-06'")); funcMap.put("SCORE", SalaryI18nUtil.getI18nLabel(97744, "获取选项型控件(单选框、复选框、下拉菜单)分数。示例:SCORE({当前数据.单选框}) 结果:选项分数
注:未设置选项分数时,结果为0")); funcMap.put("SUBSTRING", SalaryI18nUtil.getI18nLabel(97745, "字符截取函数,用于按起始位置截取字符。
示例:SUBSTRING('abcdefg',2,3)
结果:bc")); funcMap.put("SUBSTITUE", SalaryI18nUtil.getI18nLabel(97746, "字符查找替换函数,替换字符中的所有关键词为新字符。
示例:SUBSTITUE('泛微移动办公','泛微','eteams')
结果:eteams移动办公")); diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.java new file mode 100644 index 000000000..9d8e0525f --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.java @@ -0,0 +1,80 @@ +package com.engine.salary.mapper.salaryacct; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface SalaryAcctSobConfigMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryAcctSobConfigPO salaryAcctSobConfig); + + /** + * 根据核算id查询 + * @param salaryAcctRecordId + * @return + */ + SalaryAcctSobConfigPO getBySalaryAcctRecordId(Long salaryAcctRecordId); + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryAcctSobConfigPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryAcctSobConfig 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryAcctSobConfigPO salaryAcctSobConfig); + + /** + * 修改,修改所有字段 + * + * @param salaryAcctSobConfig 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryAcctSobConfigPO salaryAcctSobConfig); + + /** + * 修改,忽略null字段 + * + * @param salaryAcctSobConfig 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryAcctSobConfigPO salaryAcctSobConfig); + + /** + * 删除记录 + * + * @param salaryAcctSobConfig 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryAcctSobConfigPO salaryAcctSobConfig); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordIds") Collection salaryAcctRecordIds); + +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.xml new file mode 100644 index 000000000..97cf9eafa --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.xml @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + t + . + adjust_rule_config + , t.back_item_config + , t.basic_config + , t.check_rule_config + , t.create_time + , t.creator + , t.delete_type + , t.employee_field_config + , t.id + , t.item_config + , t.item_group_config + , t.salary_acct_record_id + , t.tenant_key + , t.update_time + + + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_acct_sob_config + + + + adjust_rule_config, + + + back_item_config, + + + basic_config, + + + check_rule_config, + + + create_time, + + + creator, + + + delete_type, + + + employee_field_config, + + + id, + + + item_config, + + + item_group_config, + + + salary_acct_record_id, + + + tenant_key, + + + update_time, + + + + + #{adjustRuleConfig}, + + + #{backItemConfig}, + + + #{basicConfig}, + + + #{checkRuleConfig}, + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{employeeFieldConfig}, + + + #{id}, + + + #{itemConfig}, + + + #{itemGroupConfig}, + + + #{salaryAcctRecordId}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_salary_acct_sob_config + + adjust_rule_config=#{adjustRuleConfig}, + back_item_config=#{backItemConfig}, + basic_config=#{basicConfig}, + check_rule_config=#{checkRuleConfig}, + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + employee_field_config=#{employeeFieldConfig}, + item_config=#{itemConfig}, + item_group_config=#{itemGroupConfig}, + salary_acct_record_id=#{salaryAcctRecordId}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_acct_sob_config + + + adjust_rule_config=#{adjustRuleConfig}, + + + back_item_config=#{backItemConfig}, + + + basic_config=#{basicConfig}, + + + check_rule_config=#{checkRuleConfig}, + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + employee_field_config=#{employeeFieldConfig}, + + + item_config=#{itemConfig}, + + + item_group_config=#{itemGroupConfig}, + + + salary_acct_record_id=#{salaryAcctRecordId}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_acct_sob_config + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_salary_acct_sob_config + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + UPDATE hrsa_salary_acct_sob_config + SET delete_type = 1 + WHERE delete_type = 0 + AND salary_acct_record_id IN + + #{salaryAcctRecordId} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.java b/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.java index 82324c399..30a1ec4f4 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.java +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.java @@ -22,8 +22,6 @@ public interface SalarySobItemGroupMapper { */ List listSome(SalarySobItemGroupPO salarySobItemGroup); - List listSomeWithItemHide(SalarySobItemGroupPO build); - /** * 根据主键查询 * diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.xml index bd29320f7..7b89d50d7 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemGroupMapper.xml @@ -29,6 +29,7 @@ , t.creator , t.delete_type , t.tenant_key + , t.item_hide @@ -95,33 +96,6 @@ - - @@ -158,6 +132,9 @@ tenant_key, + + item_hide, + @@ -190,6 +167,9 @@ #{tenantKey}, + + #{itemHide}, + @@ -206,6 +186,7 @@ creator=#{creator}, delete_type=#{deleteType}, tenant_key=#{tenantKey}, + item_hide=#{itemHide}, WHERE id = #{id} AND delete_type = 0 @@ -242,6 +223,9 @@ tenant_key=#{tenantKey}, + + item_hide=#{itemHide}, + WHERE id = #{id} AND delete_type = 0 @@ -278,7 +262,7 @@ INSERT INTO hrsa_salary_sob_item_group(id, salary_sob_id, name, sorted_index, description, create_time, - update_time, creator, tenant_key) + update_time, creator, tenant_key,item_hide) VALUES ( @@ -290,13 +274,14 @@ #{item.createTime}, #{item.updateTime}, #{item.creator}, - #{item.tenantKey} + #{item.tenantKey}, + #{item.itemHide} ) INSERT INTO hrsa_salary_sob_item_group(id, salary_sob_id, name, sorted_index, description, create_time, - update_time, creator, tenant_key) + update_time, creator, tenant_key,item_hide) select @@ -308,14 +293,15 @@ #{item.createTime,jdbcType=DATE}, #{item.updateTime,jdbcType=DATE}, #{item.creator,jdbcType=DOUBLE}, - #{item.tenantKey,jdbcType=VARCHAR} + #{item.tenantKey,jdbcType=VARCHAR}, + #{item.itemHide,jdbcType=VARCHAR} from dual INSERT INTO hrsa_salary_sob_item_group(id, salary_sob_id, name, sorted_index, description, create_time, - update_time, creator, tenant_key) + update_time, creator, tenant_key,item_hide) VALUES ( #{item.id}, @@ -326,7 +312,8 @@ #{item.createTime}, #{item.updateTime}, #{item.creator}, - #{item.tenantKey} + #{item.tenantKey}, + #{item.itemHide} ) diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml index 9b5061794..d7226ffdc 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml @@ -16,6 +16,7 @@ + @@ -39,6 +40,7 @@ , t.rounding_mode , t.pattern , t.value_type + , t.item_hide @@ -222,6 +224,9 @@ can_delete, + + item_hide, + @@ -261,7 +266,10 @@ #{updateTime}, - can_delete, + #{canDelete}, + + + #{itemHide}, @@ -285,6 +293,7 @@ rounding_mode=#{roundingMode}, pattern=#{pattern}, value_type=#{valueType}, + item_hide=#{itemHide}, WHERE id = #{id} AND delete_type = 0 @@ -339,6 +348,9 @@ value_type=#{valueType}, + + item_hide=#{itemHide}, + WHERE id = #{id} AND delete_type = 0 @@ -385,7 +397,7 @@ INSERT INTO hrsa_salary_sob_item(salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id, - sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,salary_item_code) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,salary_item_code,item_hide) VALUES ( @@ -404,13 +416,14 @@ #{item.roundingMode}, #{item.pattern}, #{item.valueType}, - #{item.salaryItemCode} + #{item.salaryItemCode}, + #{item.itemHide} ) INSERT INTO hrsa_salary_sob_item( salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id, - sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,salary_item_code) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,salary_item_code,item_hide) select @@ -429,14 +442,15 @@ #{item.roundingMode,jdbcType=INTEGER}, #{item.pattern,jdbcType=INTEGER}, #{item.valueType,jdbcType=INTEGER}, - #{item.salaryItemCode,jdbcType=INTEGER} + #{item.salaryItemCode,jdbcType=INTEGER}, + #{item.itemHide,jdbcType=DOUBLE} from dual INSERT INTO hrsa_salary_sob_item( salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id, - sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,salary_item_code) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,salary_item_code,item_hide) VALUES ( #{item.salarySobId}, @@ -454,7 +468,8 @@ #{item.roundingMode}, #{item.pattern}, #{item.valueType}, - #{item.salaryItemCode} + #{item.salaryItemCode}, + #{item.itemHide} ) diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index fe2344ea7..59abb699b 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.bo; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.cloudstore.eccom.pc.table.WeaTableColumn; @@ -259,8 +260,8 @@ public class SalaryStatisticsReportBO { String[] itemValues = item.getItemValue().split(COMMA); for (String itemId : itemValues) { for (Map x : nowDetail) { - if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { - sumDecimal = sumDecimal.add(new BigDecimal(x.get(itemId))); + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId)) && NumberUtil.isNumber(x.get(itemId).trim())) { + sumDecimal = sumDecimal.add(new BigDecimal(x.get(itemId).trim())); } } } @@ -274,8 +275,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : lastDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - lastSumDecimal = lastSumDecimal.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + lastSumDecimal = lastSumDecimal.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -289,8 +290,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : sameDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - sameSumDecimal = sameSumDecimal.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + sameSumDecimal = sameSumDecimal.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -311,8 +312,8 @@ public class SalaryStatisticsReportBO { String[] itemValues = item.getItemValue().split(COMMA); for (String itemId : itemValues) { for (Map x : nowDetail) { - if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { - avgDecimal = avgDecimal.add(new BigDecimal(x.get(itemId))); + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId)) && NumberUtil.isNumber(x.get(itemId).trim())) { + avgDecimal = avgDecimal.add(new BigDecimal(x.get(itemId).trim())); } } } @@ -327,8 +328,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : lastDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - lastAvgDecimal = lastAvgDecimal.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + lastAvgDecimal = lastAvgDecimal.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -343,8 +344,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : sameDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - sameAvgDecimal = sameAvgDecimal.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + sameAvgDecimal = sameAvgDecimal.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -367,8 +368,8 @@ public class SalaryStatisticsReportBO { String[] itemValues = item.getItemValue().split(COMMA); for (String itemId : itemValues) { for (Map x : nowDetail) { - if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { - decimalList.add(new BigDecimal(x.get(itemId))); + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId)) && NumberUtil.isNumber(x.get(itemId).trim())) { + decimalList.add(new BigDecimal(x.get(itemId).trim())); } } } @@ -384,8 +385,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : lastDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - decimalList.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + decimalList.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -400,8 +401,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : sameDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - decimalList.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + decimalList.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -424,8 +425,8 @@ public class SalaryStatisticsReportBO { String[] itemValues = item.getItemValue().split(COMMA); for (String itemId : itemValues) { for (Map x : nowDetail) { - if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { - decimalList.add(new BigDecimal(x.get(itemId))); + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId)) && NumberUtil.isNumber(x.get(itemId).trim())) { + decimalList.add(new BigDecimal(x.get(itemId).trim())); } } } @@ -441,8 +442,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : lastDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - decimalList.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim()) ) { + decimalList.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -457,8 +458,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : sameDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - decimalList.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + decimalList.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -481,8 +482,8 @@ public class SalaryStatisticsReportBO { String[] itemValues = item.getItemValue().split(COMMA); for (String itemId : itemValues) { for (Map x : nowDetail) { - if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId))) { - decimalList.add(new BigDecimal(x.get(itemId))); + if (MapUtils.isNotEmpty(x) && StringUtils.isNotBlank(x.get(itemId)) && NumberUtil.isNumber(x.get(itemId).trim())) { + decimalList.add(new BigDecimal(x.get(itemId).trim())); } } } @@ -498,8 +499,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : lastDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - decimalList.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + decimalList.add(new BigDecimal(y.get(itemId).trim())); } } } @@ -514,8 +515,8 @@ public class SalaryStatisticsReportBO { String[] lastItemValues = item.getItemValue().split(COMMA); for (String itemId : lastItemValues) { for (Map y : sameDetail) { - if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId))) { - decimalList.add(new BigDecimal(y.get(itemId))); + if (MapUtils.isNotEmpty(y) && StringUtils.isNotBlank(y.get(itemId)) && NumberUtil.isNumber(y.get(itemId).trim())) { + decimalList.add(new BigDecimal(y.get(itemId).trim())); } } } diff --git a/src/com/engine/salary/service/SIArchivesService.java b/src/com/engine/salary/service/SIArchivesService.java index 172c403dc..33d150060 100644 --- a/src/com/engine/salary/service/SIArchivesService.java +++ b/src/com/engine/salary/service/SIArchivesService.java @@ -8,11 +8,11 @@ import com.engine.salary.entity.siarchives.param.InsuranceArchivesSaveParam; import com.engine.salary.entity.siarchives.param.SIArchiveBaseHistoryListParam; import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.util.page.PageInfo; -import com.google.common.collect.Lists; -import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; /** * @Author weaver_cl @@ -144,7 +144,9 @@ public interface SIArchivesService { Map buildBatchAccount(List ids, Long paymentOrganization); - Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope); + Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope, StringBuilder errorMsg); + + String adaptWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope); String checkAndBuildWelBaseWithLimit(Long primaryId, String paymentBaseString, Integer paymentScope); diff --git a/src/com/engine/salary/service/SalaryAcctSobConfigService.java b/src/com/engine/salary/service/SalaryAcctSobConfigService.java new file mode 100644 index 000000000..43f64aa8b --- /dev/null +++ b/src/com/engine/salary/service/SalaryAcctSobConfigService.java @@ -0,0 +1,86 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; + +import java.util.Collection; + +/** + * 薪资核算的账套副本配置 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalaryAcctSobConfigService{ + + /** + * 根据薪资核算记录id查询薪资核算的账套配置 + * + * @param salaryAcctRecordId + * @return + */ + SalaryAcctSobConfigPO getBySalaryAcctRecordId(Long salaryAcctRecordId); + + /** + * 获取账套快照 + * @param salaryAcctRecordId + * @return + */ + SalaryAcctConfig getSalaryAcctConfig(Long salaryAcctRecordId); + + /** + * 根据薪资核算记录id查询薪资核算的账套配置 + * + * @param needInit 倘若当前薪资核算还没有保存账套配置,是否需要初始化一个,此处初始化不会入库 + * @param salaryAcctRecordId + * @return + */ + SalaryAcctSobConfigPO getBySalaryAcctRecordId(boolean needInit, Long salaryAcctRecordId); + + /** + * 薪资核算的账套配置转换成薪资账套的聚合对象 + * + * @param salaryAcctRecordId + * @return + */ + SalarySobItemAggregateDTO getSalarySobItemAggregate(Long salaryAcctRecordId); + + /** + * 薪资核算的账套配置转换成薪资账套的聚合对象 + * + * @param salaryAcctRecordId + * @return + */ + SalarySobItemAggregateDTO getSalarySobItemAggregateNoFormula(Long salaryAcctRecordId); + + /** + * 初始化薪资核算的账套配置 + * + * @param salaryAcctRecord + */ + SalaryAcctSobConfigPO initBySalaryAcctRecord(SalaryAcctRecordPO salaryAcctRecord); + + /** + * + * @param salaryAcctSobConfig + */ + void save(SalaryAcctSobConfigPO salaryAcctSobConfig); + + /** + * 更新薪资核算的账套配置 + * + * @param salaryAcctRecordId + */ + void updateBySalaryAcctRecordId(Long salaryAcctRecordId); + + /** + * 删除薪资核算的账套配置 + * + * @param salaryAcctRecordIds + */ + void deleteBySalaryAcctRecordIds(Collection salaryAcctRecordIds); +} diff --git a/src/com/engine/salary/service/SalarySobItemGroupService.java b/src/com/engine/salary/service/SalarySobItemGroupService.java index 85ce3d51f..d42e63f8b 100644 --- a/src/com/engine/salary/service/SalarySobItemGroupService.java +++ b/src/com/engine/salary/service/SalarySobItemGroupService.java @@ -31,14 +31,6 @@ public interface SalarySobItemGroupService { */ List listBySalarySobId(Long salarySobId); - /** - * 根据薪资账套id查询薪资账套的薪资项目分类带上隐藏信息 - * - * @param salarySobId 薪资账套id - * @return - */ - List listBySalarySobIdWithItemHide(Long salarySobId); - /** * 批量保存 * diff --git a/src/com/engine/salary/service/SalarySobItemHideService.java b/src/com/engine/salary/service/SalarySobItemHideService.java index 826825449..2e91facd9 100644 --- a/src/com/engine/salary/service/SalarySobItemHideService.java +++ b/src/com/engine/salary/service/SalarySobItemHideService.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemHidePO; import java.util.List; +@Deprecated public interface SalarySobItemHideService { /** diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index 609d07341..49fdfed1f 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -36,14 +36,6 @@ public interface SalarySobItemService { */ List listBySalarySobId(Long salarySobId); - /** - * 根据薪资账套id查询薪资账套的薪资项目副本(不包括已隐藏的薪资项目列) - * - * @param salarySobId 薪资账套的id - * @return - */ - List listBySalarySobIdWithHideItem(Long salarySobId); - /** * 根据薪资账套id和薪资项目分类查询薪资账套的薪资项目副本 * @@ -92,11 +84,18 @@ public interface SalarySobItemService { SalarySobItemAggregateDTO getAggregateBySalarySobId(Long salarySobId); /** - * 根据薪资账套id获取薪资账套的薪资项目聚合(员工信息、薪资项目副本、薪资项目分类)(不包含已设置为隐藏的) - * @param salarySobId + * 根据薪资核算id获取薪资账套的薪资项目聚合(员工信息、薪资项目副本、薪资项目分类) + * @param salaryAcctRecordId 核算记录id + * @param hideItem true过滤隐藏项目。false显示隐藏项目 * @return */ - SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salarySobId, boolean isBackCalc); + SalarySobItemAggregateDTO getAggregateByRecordId(Long salaryAcctRecordId, boolean hideItem); + + /** + * 根据薪资账套id获取薪资账套的薪资项目聚合(员工信息、薪资项目副本、薪资项目分类)(不包含已设置为隐藏的) + * @return + */ + SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salaryAcctRecordId,Long salarySobId, boolean isBackCalc); /** * 保存 diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 99d3379f9..4cc8d2461 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -19,6 +19,7 @@ import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.biz.SISchemeBiz; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.cmd.siarchives.SIArchivesTipsCmd; import com.engine.salary.common.SalaryContext; import com.engine.salary.config.SalaryElogConfig; @@ -177,6 +178,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return MapperProxyFactory.getProxy(InsuranceBaseAdjustHistoryMapper.class); } + private ICategoryMapper getICategoryMapper() { + return MapperProxyFactory.getProxy(ICategoryMapper.class); + } + @Override public Map getTips(Map params) { @@ -3036,6 +3041,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .paymentOrganization(param.getPaymentOrganization()) .build(); + String combineErrorMsg = ""; if (oldOtherInfoList.size() == 1) { InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); //设置福利档案基数调整记录数据 @@ -3063,17 +3069,40 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String otherPaymentBaseString = adaptWelBaseLimit(updateOtherInfo.getOtherSchemeId(), updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + if (otherPaymentBaseString != null) { + updateOtherInfo.setOtherPaymentBaseString(otherPaymentBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg = "其他福利个人: " + errorMsg; + } } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String otherPaymentComBaseString = adaptWelBaseLimit(updateOtherInfo.getOtherSchemeId(), updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + if (otherPaymentComBaseString != null) { + updateOtherInfo.setOtherPaymentComBaseString(otherPaymentComBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg += "其他福利公司:" + errorMsg; + } } } + if (StringUtils.isNotBlank(combineErrorMsg)) { + throw new SalaryRunTimeException(combineErrorMsg); + } encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); getOtherSchemeMapper().updateById(updateOtherInfo); //更新base_info表状态 @@ -3111,17 +3140,40 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String otherPaymentBaseString = adaptWelBaseLimit(insertOtherInfo.getOtherSchemeId(), insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + if (otherPaymentBaseString != null) { + insertOtherInfo.setOtherPaymentBaseString(otherPaymentBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg = "其他福利个人:" + errorMsg; + } } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); - //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String otherPaymentComBaseString = adaptWelBaseLimit(insertOtherInfo.getOtherSchemeId(), insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + if (otherPaymentComBaseString != null) { + insertOtherInfo.setOtherPaymentComBaseString(otherPaymentComBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg += "其他福利公司:" + errorMsg; + } } } + if (StringUtils.isNotBlank(combineErrorMsg)) { + throw new SalaryRunTimeException(combineErrorMsg); + } encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); getOtherSchemeMapper().insert(insertOtherInfo); @@ -3199,6 +3251,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .paymentOrganization(param.getPaymentOrganization()) .build(); + String combineErrorMsg = ""; if (oldFundInfoList.size() == 1) { InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); //设置福利档案基数调整记录数据 @@ -3227,17 +3280,43 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .employeeId(param.getEmployeeId()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String fundPaymentBaseString = adaptWelBaseLimit(updateFundInfo.getFundSchemeId(), updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + if (fundPaymentBaseString != null) { + updateFundInfo.setFundPaymentBaseString(fundPaymentBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg = "公积金个人" + errorMsg; + } } + //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String fundPaymentComBaseString = adaptWelBaseLimit(updateFundInfo.getFundSchemeId(), updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + if (fundPaymentComBaseString != null) { + updateFundInfo.setFundPaymentComBaseString(fundPaymentComBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg += "公积金公司:" + errorMsg; + } } } + + if (StringUtils.isNotBlank(combineErrorMsg)) { + throw new SalaryRunTimeException(combineErrorMsg); + } + encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); getFundSchemeMapper().updateById(updateFundInfo); //更新base_info表状态 @@ -3277,17 +3356,41 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .employeeId(param.getEmployeeId()) .build(); //校验福利基数是否符合上下限要求, - if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String fundPaymentBaseString = adaptWelBaseLimit(insertFundInfo.getFundSchemeId(), insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + if (fundPaymentBaseString != null) { + insertFundInfo.setFundPaymentBaseString(fundPaymentBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg = "公积金个人:" + errorMsg; + } } + //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String fundPaymentComBaseString = adaptWelBaseLimit(insertFundInfo.getFundSchemeId(), insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + if (fundPaymentComBaseString != null) { + insertFundInfo.setFundPaymentComBaseString(fundPaymentComBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg += "公积金公司:" + errorMsg; + } } } + if (StringUtils.isNotBlank(combineErrorMsg)) { + throw new SalaryRunTimeException(combineErrorMsg); + } encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); getFundSchemeMapper().insert(insertFundInfo); @@ -3367,6 +3470,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build(); + + String combineErrorMsg = ""; //组装新数据 if (oldSocialInfoList.size() == 1) { //老数据 @@ -3397,17 +3502,42 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .paymentOrganization(param.getPaymentOrganization()) .build(); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String socialPaymentBaseString = adaptWelBaseLimit(updateSocialInfo.getSocialSchemeId(), updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + if (socialPaymentBaseString != null) { + updateSocialInfo.setSocialPaymentBaseString(socialPaymentBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg = "社保个人:" + errorMsg; + } } + //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String socialPaymentComBaseString = adaptWelBaseLimit(updateSocialInfo.getSocialSchemeId(), updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + if (socialPaymentComBaseString != null) { + updateSocialInfo.setSocialPaymentComBaseString(socialPaymentComBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg += "社保公司:" + errorMsg; + } } } + + if (StringUtils.isNotBlank(combineErrorMsg)) { + throw new SalaryRunTimeException(combineErrorMsg); + } encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); getSocialSchemeMapper().updateById(updateSocialInfo); //更新base_info表状态 @@ -3447,17 +3577,40 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService .paymentOrganization(param.getPaymentOrganization()) .build(); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String socialPaymentBaseString = adaptWelBaseLimit(insertSocialInfo.getSocialSchemeId(), insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + if (socialPaymentBaseString != null) { + insertSocialInfo.setSocialPaymentBaseString(socialPaymentBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + combineErrorMsg = "社保个人:" + errorMsg; + } } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 - if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + if (paramReq.getChangeData() != null && paramReq.getChangeData()) { + // 将不满足上下限基数修改为上限或下限 + String socialPaymentComBaseString = adaptWelBaseLimit(insertSocialInfo.getSocialSchemeId(), insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + if (socialPaymentComBaseString != null) { + insertSocialInfo.setSocialPaymentComBaseString(socialPaymentComBaseString); + } + } else { + StringBuilder errorMsg = new StringBuilder(""); + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg)) { + combineErrorMsg += "社保公司:" + errorMsg; + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); + } } } + if (StringUtils.isNotBlank(combineErrorMsg)) { + throw new SalaryRunTimeException(combineErrorMsg); + } encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); getSocialSchemeMapper().insert(insertSocialInfo); @@ -3509,7 +3662,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService * @return */ @Override - public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { + public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope, StringBuilder errorMsg) { if (primaryId ==null || paymentBaseString == null) { return true; @@ -3518,23 +3671,28 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService if (paymentBaseJson == null) { return true; } + List iCategoryPOS = getICategoryMapper().listAll(); + Map categoryMap = SalaryEntityUtil.convert2Map(iCategoryPOS, po -> po.getId().toString(), ICategoryPO::getInsuranceName); + Boolean flag = true; for (Map.Entry entry : paymentBaseJson.entrySet()) { //判断福利值是否为空/数字 if (entry.getValue() == null || entry.getValue().length() == 0) { continue; } else if (!isNumeric(entry.getValue())) { + errorMsg.append("福利值非数字"); log.info("福利值非数字!"); - return false; + flag = false; } //根据福利方案id、险种id、缴纳对象、缴费状态查询明细 List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); if (insuranceSchemeDetailPOList.size() == 0) { + errorMsg.append("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: " + primaryId + ", 福利明细项id:" + Long.valueOf(entry.getKey()) + ";"); log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); - return false; + flag = false; } List isPaymentList = insuranceSchemeDetailPOList.stream() .filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue()) && f.getPaymentScope().equals(paymentScope)).collect(Collectors.toList()); @@ -3546,13 +3704,15 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { //数值低于对应福利明细下限 + errorMsg.append("【"+ categoryMap.getOrDefault(entry.getKey(), "") + "】数值: " + entry.getValue() +",低于对应福利明细下限: " + lowerLimit+ "\n"); log.info("社保基数 {} 数值 {} 低于对应福利明细下限 {}!", entry.getKey(), entry.getValue(), lowerLimit); - return false; + flag = false; } if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { //数值高于对应福利明细上限 + errorMsg.append("【"+ categoryMap.getOrDefault(entry.getKey(), "") + "】数值: " + entry.getValue() +",高于对应福利明细上限: " + upperLimit+ "\n"); log.info("社保基数 {} 数值 {} 高于对应福利明细上限 {} !", entry.getKey(), entry.getValue(), upperLimit); - return false; + flag = false; } } else { log.info("福利明细项属于未缴费状态,不对上下限进行约束"); @@ -3560,7 +3720,67 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService } - return true; + return flag; + } + + /** + * 校验福利基数是否符合上下限要求 + * @param primaryId + * @param paymentBaseString + * @return + */ + @Override + public String adaptWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { + + if (primaryId ==null || paymentBaseString == null) { + return null; + } + Map paymentBaseJson = JSON.parseObject(paymentBaseString, new HashMap().getClass()); + if (paymentBaseJson == null) { + return null; + } + + for (Map.Entry entry : paymentBaseJson.entrySet()) { + + //判断福利值是否为空/数字 + if (entry.getValue() == null || entry.getValue().length() == 0) { + continue; + } else if (!isNumeric(entry.getValue())) { + log.info("福利值非数字!"); + throw new SalaryRunTimeException("福利值非数字"); + } + + //根据福利方案id、险种id、缴纳对象、缴费状态查询明细 + List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); + log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); + if (insuranceSchemeDetailPOList.size() == 0) { + log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); + throw new SalaryRunTimeException("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: "+primaryId+", 福利明细项id:{}"+ Long.valueOf(entry.getKey())); + } + List isPaymentList = insuranceSchemeDetailPOList.stream() + .filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue()) && f.getPaymentScope().equals(paymentScope)).collect(Collectors.toList()); + if (isPaymentList.size() > 0) { + InsuranceSchemeDetailPO insuranceSchemeDetailPO = isPaymentList.get(0); + + encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); + String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); + String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); + if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { + //数值低于对应福利明细下限 + entry.setValue(lowerLimit); + } + if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { + //数值高于对应福利明细上限 + entry.setValue(upperLimit); + } + } else { + log.info("福利明细项属于未缴费状态,不对上下限进行约束"); + return null; + } + + + } + return JSON.toJSONString(paymentBaseJson); } diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 062f744b2..1e990d265 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -1451,24 +1451,25 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { boolean welBaseAutoAdjustSign = welBaseAutoAdjust != null && welBaseAutoAdjust.getConfValue().equals(OpenEnum.OPEN.getValue()); if (!isError && !welBaseAutoAdjustSign) { + StringBuilder errorMsg = new StringBuilder(""); insuranceArchivesAccountPO.setSocial(insuranceArchivesSocialSchemePO); insuranceArchivesAccountPO.setFund(insuranceArchivesFundSchemePO); insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO); insuranceArchivesAccountPO.setBaseInfo(insuranceArchivesBaseInfoPO); //校验福利基数是否符合上下限要求, - Boolean socialCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + Boolean socialCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg); - Boolean fundCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + Boolean fundCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg); - Boolean otherCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + Boolean otherCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg); Boolean socialCheckComBase = true; Boolean fundCheckComBase = true; Boolean otherCheckComBase = true; if (welBaseDiffSign) { - socialCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); - fundCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); - otherCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + socialCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg); + fundCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg); + otherCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg); } if (socialCheckBase && fundCheckBase && otherCheckBase && socialCheckComBase && fundCheckComBase && otherCheckComBase) { insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO); diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 3cc6dcb55..2cbb928b9 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -12,6 +12,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultLogBO; @@ -158,13 +159,17 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return ServiceUtil.getService(SalaryAcctResultTemplateServiceImpl.class, user); } + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + @Override public XSSFWorkbook exportSalaryAcctEmployee(SalaryAcctEmployeeQueryParam queryParam) { ValidUtil.doValidator(queryParam); SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); if (salaryAcctRecordPO == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"薪资核算记录不存在或已被删除")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "薪资核算记录不存在或已被删除")); } // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "核算人员范围"); @@ -431,7 +436,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryI18nUtil.getI18nLabel(0, "导出薪资核算结果"), SalaryI18nUtil.getI18nLabel(0, "导出薪资核算结果") + ":" + targetName, user - ); + ); String sheetName = "薪资核算结果"; @@ -451,7 +456,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctRecordPO.getId()); boolean isBackCalc = Objects.equals(byId.getBackCalcStatus(), 1); // 查询薪资账套下的薪资项目+员工信息字段 - SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId(), isBackCalc); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getId(),salaryAcctRecordPO.getSalarySobId(), isBackCalc); // 构建薪资核算结果列表表头 List columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds())); // 获取固定列头数 @@ -504,8 +509,11 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } + + SalaryAcctConfig config = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordId); + // 查询薪资核算记录所用的薪资账套的薪资项目副本 - List salarySobItems = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItems = config.getSalarySobItems(); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); // 查询薪资项目 List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); @@ -514,7 +522,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc Map> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItems, SalarySobItemPO::getSalarySobItemGroupId); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemGroupPOS = config.getSalarySobItemGroups(); // 对分组进行排序 salarySobItemGroupPOS = SalaryAcctResultBO.sortGroup(salarySobItemGroupPOS); // 对分组内薪资项目排序 @@ -595,8 +603,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } + SalaryAcctConfig salaryAcctConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordId); + // 查询薪资核算记录所用的薪资账套的薪资项目副本 - List salarySobItems = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItems = salaryAcctConfig.getSalarySobItems(); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); // 查询薪资项目 List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); @@ -605,7 +615,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc Map> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItems, SalarySobItemPO::getSalarySobItemGroupId); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemGroupPOS = salaryAcctConfig.getSalarySobItemGroups(); // 对分组进行排序 salarySobItemGroupPOS = SalaryAcctResultBO.sortGroup(salarySobItemGroupPOS); // 对分组内薪资项目排序 @@ -875,7 +885,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // headerList.add("手机号"); // headerList.add("工号"); // 查询薪资账套下的薪资项目 - SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateByRecordId(exportParam.getSalaryAcctRecordId(),true); // // 员工信息 // for (SalarySobEmpFieldDTO item : salarySobItemAggregateDTO.getEmpFields()) { @@ -1352,7 +1362,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc List list4log = new ArrayList<>(); salaryAcctResults.stream().forEach(source -> { SalaryAcctResultPO target = new SalaryAcctResultPO(); - BeanUtils.copyProperties(source,target); + BeanUtils.copyProperties(source, target); list4log.add(target); }); getSalaryAcctResultService(user).batchSave(salaryAcctResults); @@ -1365,8 +1375,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc loggerContext.setTargetId(param.getSalaryAcctRecordId().toString()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "导入薪资核算数据")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "导入薪资核算数据 ") + targetName); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据 ") + targetName); loggerContext.setOldValueList(list4log); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); @@ -1442,6 +1452,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc /** * 保存导出模板 + * * @param saveParam */ @Override @@ -1508,7 +1519,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc @Override public Map exportTemplateList(SalaryAcctResultTemplateSaveParam param) { SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId()); - if (salaryAcctRecordPO == null){ + if (salaryAcctRecordPO == null) { throw new SalaryRunTimeException("薪资核算记录为空"); } List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 2ccf1ff62..32a23ed79 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -27,7 +27,6 @@ import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentAdminPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; -import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.common.FilterEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; @@ -56,7 +55,6 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; import com.weaver.util.threadPool.entity.LocalRunnable; @@ -195,9 +193,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(TaxAgentAdminServiceImpl.class, user); } - private SalaryCheckResultService salaryCheckResultService; + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + @Override public List listBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { if (CollectionUtils.isEmpty(salaryAcctRecordIds)) { @@ -253,31 +254,23 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除")); } // 查询是否是回算 - SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); - boolean isBackCal = Objects.equals(byId.getBackCalcStatus(), 1); - //---------------------------------------------- + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); + boolean isBackCal = Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1); + SalaryAcctConfig salaryAcctConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordPO.getId()); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salaryAcctEmployeePO.getSalarySobId()); - // 获取关闭显示的分类 - List hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salaryAcctEmployeePO.getSalarySobId()).isGroup(1).build()); + List salarySobItemGroupPOS = salaryAcctConfig.getSalarySobItemGroups(); // 过滤关闭显示的薪资项目分类 - salarySobItemGroupPOS = salarySobItemGroupPOS.stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList()); + salarySobItemGroupPOS = salarySobItemGroupPOS.stream().filter(group -> group.getItemHide() == null || group.getItemHide().equals(0L)).collect(Collectors.toList()); // 获取薪资项目分类ID List salarySobItemGroupIds = salarySobItemGroupPOS.stream().map(SalarySobItemGroupPO::getId).collect(Collectors.toList()); //加上未分类 salarySobItemGroupIds.add(0L); // 查询薪资账套的薪资项目副本(已经过滤关闭分类显示按钮的薪资项目) - List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobIdAndGroupId(salaryAcctEmployeePO.getSalarySobId(), salarySobItemGroupIds); - //---------------------------------------------- - - // 查询薪资核算所用薪资账套的薪资项目副本 -// List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctEmployeePO.getSalarySobId()); - // 获取关闭显示的薪资项目 - List hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salaryAcctEmployeePO.getSalarySobId()).isGroup(0).build()); + List salarySobItemPOS = salaryAcctConfig.getSalarySobItems(); // 过滤薪资项目 - salarySobItemPOS = salarySobItemPOS.stream().filter(item -> !(hideItemIDs.contains(item.getSalaryItemId()))).collect(Collectors.toList()); + salarySobItemPOS = salarySobItemPOS.stream().filter(item -> item.getItemHide() == null || item.getItemHide().equals(0L)).collect(Collectors.toList()); // 查询已发补发薪资项目 List salarySobBackItemPOList = Collections.emptyList(); @@ -285,7 +278,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // key:账套中回算薪资项目的薪资项目id value:账套中回算薪资项目所对应的公式内容 Map salaryBackItemFormula = new HashMap<>(); if (isBackCal) { - salarySobBackItemPOList = getSalarySobBackItemService(user).listBySalarySobId(byId.getSalarySobId()); + salarySobBackItemPOList = salaryAcctConfig.getSalarySobBackItems(); Set salarySobBackItemIds = SalaryEntityUtil.properties(salarySobBackItemPOList, SalarySobBackItemPO::getSalaryItemId); salaryBackItemPOS = getSalaryItemService(user).listByIds(salarySobBackItemIds); // 查询薪资账套中已发补发的公式内容 @@ -301,7 +294,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算所用薪资账套的人员信息字段 - List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctEmployeePO.getSalarySobId()); + List salarySobEmpFieldPOS = salaryAcctConfig.getSalarySobEmpFields(); // 查询人员信息 DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salaryAcctEmployeePO.getEmployeeId()); // 查询薪资核算结果 @@ -310,7 +303,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe TaxAgentPO taxAgent = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); // 查询公式 Map formulaContentMap = getSalaryAcctResultService(user).getColumnBySalaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()); - List lockItems = byId.getLockSalaryItemIds() == null ? Collections.emptyList() : byId.getLockSalaryItemIds(); + List lockItems = salaryAcctRecordPO.getLockSalaryItemIds() == null ? Collections.emptyList() : salaryAcctRecordPO.getLockSalaryItemIds(); // 转换成薪资核算结果详情dto return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula, formulaContentMap, lockItems); @@ -443,10 +436,13 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } boolean isBackCalc = Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1); + + SalaryAcctConfig salaryAcctConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(queryParam.getSalaryAcctRecordId()); + // 查询薪资核算所用的薪资账套的员工信息字段 - List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobEmpFieldPOS = salaryAcctConfig.getSalarySobEmpFields(); // 查询薪资核算所用薪资账套的薪资项目 - List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemPOS = salaryAcctConfig.getSalarySobItems(); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); // 是否是回算 List salarySobBackItemPOList = Collections.emptyList(); @@ -565,7 +561,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } Map resultMap = Maps.newHashMap(); // 查询薪资核算使用的薪资账套下的薪资项目 - SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateByRecordId(salaryAcctRecordId,true); for (SalarySobItemIncomeCategoryDTO incomeCategoryDTO : salarySobItemAggregateDTO.getIncomeCategories()) { for (SalarySobItemGroupDTO salarySobItemGroupDTO : incomeCategoryDTO.getItemGroups()) { for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { @@ -741,6 +737,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (Objects.isNull(salarySobPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除")); } + + // 不是查询薪资账套下实时的薪资项目,而是查询发起薪资核算时存储的薪资项目快照 + SalaryAcctConfig salaryAcctSobConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(calculateParam.getSalaryAcctRecordId()); + // 1.1、如果薪资核算记录已经归档了,就不能继续核算 if (!Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99148, "当前薪资核算记录已归档,请重新打开后再进行核算")); @@ -748,14 +748,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 2、查询薪资核算记录的薪资周期、考勤周期等 SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(calculateParam.getSalaryAcctRecordId()); // 3、查询薪资核算记录所用薪资账套的薪资项目副本 - List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemPOS = salaryAcctSobConfig.getSalarySobItems(); if (CollectionUtils.isEmpty(salarySobItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算")); } // 回算薪资项目 List salarySobBackItems = Collections.emptyList(); if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { - salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + salarySobBackItems = salaryAcctSobConfig.getSalarySobBackItems(); } // 4、查询当前租户的所有薪资项目 List salaryItemPOS = getSalaryItemService(user).listAll(); @@ -1032,18 +1032,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return; } - // 查询薪资核算结果 -// List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId,Collectors.toList()); -// List salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); -// Map salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); - // 值可以锁定的薪资项目 -// Set salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId()); -// if (Objects.nonNull(updateParam.getSalaryItemId())) { -// if (!salaryItemIds.contains(updateParam.getSalaryItemId())) { -// return; -// } -// salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); -// } Set salaryItemIds; if (CollectionUtils.isNotEmpty(updateParam.getSalaryItemIds())) { @@ -1123,30 +1111,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return result; } - private Set canLockSalaryItemIds(Long salarySobId) { - // 值可以锁定的薪资项目 - Set salaryItemIds = Sets.newHashSet(); - // 查询薪资核算记录所用的薪资账套的薪资项目 - List salarySobItems = Lists.newArrayList(); - SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId); - for (SalarySobItemIncomeCategoryDTO incomeCategory : salarySobItemAggregate.getIncomeCategories()) { - for (SalarySobItemGroupDTO itemGroup : incomeCategory.getItemGroups()) { - salarySobItems.addAll(itemGroup.getItems()); - } - salarySobItems.addAll(incomeCategory.getItems()); - } - for (SalarySobItemDTO salarySobItem : salarySobItems) { - if (Objects.equals(salarySobItem.getValueType(), SalaryValueTypeEnum.FORMULA.getValue()) && salarySobItem.isCanEdit()) { - salaryItemIds.add(salarySobItem.getSalaryItemId()); - } - } -// for (SalarySobItemDTO backCalcItem : salarySobItemAggregate.getBackCalcItems()) { -// if (Objects.equals(backCalcItem.getValueType(), SalaryValueTypeEnum.FORMULA.getValue()) && backCalcItem.isCanEdit()) { -// salaryItemIds.add(backCalcItem.getSalaryItemId()); -// } -// } - return salaryItemIds; - } @Override public Boolean checkAuth(Long salaryAcctRecordId) { diff --git a/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java new file mode 100644 index 000000000..085abe60e --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java @@ -0,0 +1,188 @@ +package com.engine.salary.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.cache.SalaryCacheKey; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import com.engine.salary.entity.salarysob.po.*; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salaryacct.SalaryAcctSobConfigMapper; +import com.engine.salary.service.*; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import weaver.hrm.User; + +import java.util.*; + +/** + * 薪资核算的账套副本配置 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryAcctSobConfigServiceImpl extends Service implements SalaryAcctSobConfigService { + + private SalaryAcctSobConfigMapper getSalaryAcctSobConfigMapper() { + return MapperProxyFactory.getProxy(SalaryAcctSobConfigMapper.class); + } + + private SalaryFormulaService getSalaryFormulaService(User user) { + return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalarySobEmpFieldService getSalarySobEmpFieldService(User user) { + return ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user); + } + + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { + return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); + } + + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalarySobBackItemService getSalarySobBackItemService(User user) { + return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); + } + + private SalarySobAdjustRuleService getSalarySobAdjustRuleService(User user) { + return ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user); + } + + private SalarySobCheckRuleService salarySobCheckRuleService; + + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } + + @Override + public SalaryAcctSobConfigPO getBySalaryAcctRecordId(Long salaryAcctRecordId) { + return getBySalaryAcctRecordId(true, salaryAcctRecordId); + } + + @Override + public SalaryAcctConfig getSalaryAcctConfig(Long salaryAcctRecordId) { + SalaryAcctSobConfigPO po = getBySalaryAcctRecordId(true, salaryAcctRecordId); + return SalaryAcctConfig.parse(po); + } + + @Override + public SalaryAcctSobConfigPO getBySalaryAcctRecordId(boolean needInit, Long salaryAcctRecordId) { + SalaryAcctSobConfigPO salaryAcctSobConfig = getSalaryAcctSobConfigMapper().getBySalaryAcctRecordId(salaryAcctRecordId); + if (Objects.nonNull(salaryAcctSobConfig)) { + return salaryAcctSobConfig; + } + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + // 初始化薪资核算记录的列配置 + if (needInit) { + salaryAcctSobConfig = initBySalaryAcctRecord(salaryAcctRecord); + } + return salaryAcctSobConfig; + } + + @Override + public SalarySobItemAggregateDTO getSalarySobItemAggregate(Long salaryAcctRecordId) { + return getSalarySobItemAggregate(true, salaryAcctRecordId); + } + + @Override + public SalarySobItemAggregateDTO getSalarySobItemAggregateNoFormula(Long salaryAcctRecordId) { + return getSalarySobItemAggregate(false, salaryAcctRecordId); + } + + private SalarySobItemAggregateDTO getSalarySobItemAggregate(boolean needFormula, Long salaryAcctRecordId) { + // 查询薪资核算 + SalaryAcctSobConfigPO salaryAcctSobConfig = getBySalaryAcctRecordId(salaryAcctRecordId); + // 薪资账套的基本信息 + SalarySobPO salarySob = JsonUtil.parseObject(salaryAcctSobConfig.getBasicConfig(), SalarySobPO.class); + // 员工信息字段 + List salarySobEmpFields = JsonUtil.parseList(salaryAcctSobConfig.getEmployeeFieldConfig(), SalarySobEmpFieldPO.class); + // 薪资项目分类 + List salarySobItemGroups = JsonUtil.parseList(salaryAcctSobConfig.getItemGroupConfig(), SalarySobItemGroupPO.class); + // 薪资项目 + List salarySobItems = JsonUtil.parseList(salaryAcctSobConfig.getItemConfig(), SalarySobItemPO.class); + // 回算薪资项目 + List salarySobBackItems = JsonUtil.parseList(salaryAcctSobConfig.getBackItemConfig(), SalarySobBackItemPO.class); + // 查询薪资账套的薪资项目所关联的薪资项目 + Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); + salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId)); + List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); + // 函数公式 + List expressFormulas = Collections.emptyList(); + if (needFormula) { + Set formulaIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getFormulaId); + formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getFormulaId)); + expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + } + // 转换成聚合dto + SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySob, salarySobEmpFields, + salarySobItemGroups, salarySobItems, expressFormulas, salaryItems, salarySobBackItems, Collections.emptyList()); + return salarySobItemAggregateBO.convert2AggregateDTO(); + } + + @Override + public SalaryAcctSobConfigPO initBySalaryAcctRecord(SalaryAcctRecordPO salaryAcctRecord) { + // 薪资账套的基本信息 + SalarySobPO salarySob = getSalarySobService(user).getById(salaryAcctRecord.getSalarySobId()); + // 薪资账套的员工信息字段 + List salarySobEmpFields = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecord.getSalarySobId()); + // 薪资账套的薪资项目分类 + List salarySobItemGroups = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecord.getSalarySobId()); + // 薪资账套的薪资项目 + List salarySobItems = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecord.getSalarySobId()); + // 薪资账套的回算薪资项目 + List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecord.getSalarySobId()); + + SalaryAcctConfig salaryAcctConfig = new SalaryAcctConfig(salaryAcctRecord, salarySob, salarySobEmpFields, + salarySobItems, salarySobItemGroups, salarySobBackItemPOS, Collections.emptyList(), Collections.emptyList()); + return salaryAcctConfig.buildAcctSobConfig(); + } + + @Override + public void save(SalaryAcctSobConfigPO salaryAcctSobConfig) { + deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctSobConfig.getSalaryAcctRecordId())); + getSalaryAcctSobConfigMapper().insertIgnoreNull(salaryAcctSobConfig); + String cacheIndex = salaryAcctSobConfig.getSalaryAcctRecordId().toString(); + getSalaryCacheService(user).set(SalaryCacheKey.ACCT_SOB_CONFIG + cacheIndex, "FALSE"); + } + + @Override + public void updateBySalaryAcctRecordId(Long salaryAcctRecordId) { + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (salaryAcctRecord == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156474, "参数错误,薪资核算记录不存在或已被删除")); + } + SalaryAcctSobConfigPO salaryAcctSobConfig = initBySalaryAcctRecord(salaryAcctRecord); + deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); + getSalaryAcctSobConfigMapper().insertIgnoreNull(salaryAcctSobConfig); + } + + @Override + public void deleteBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { + getSalaryAcctSobConfigMapper().deleteBySalaryAcctRecordIds(salaryAcctRecordIds); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index 3f3c3fd71..688eba134 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -5,6 +5,7 @@ import com.engine.core.impl.Service; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; @@ -101,6 +102,10 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); } + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + @Override public List listBySalaryAcctRecordId(Long salaryAcctRecordId) { List excelAcctResultPOS = getExcelAcctResultMapper().listSome(ExcelAcctResultPO.builder().salaryAcctRecordId(salaryAcctRecordId).build()); @@ -143,18 +148,19 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } + + SalaryAcctConfig salaryAcctConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(queryParam.getSalaryAcctRecordId()); + // 查询薪资核算所用薪资账套 SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); // 查询薪资核算所用的薪资账套的员工信息字段 - List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobEmpFieldPOS = salaryAcctConfig.getSalarySobEmpFields(); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemGroupPOS = salaryAcctConfig.getSalarySobItemGroups(); // 查询薪资核算所用薪资账套的薪资项目副本 - List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemPOS = salaryAcctConfig.getSalarySobItems(); // 过滤在账套中隐藏的薪资项目 - List hideItemIds = getSalarySobItemHideService(user).listSome(SalarySobItemHidePO.builder().itemHide(1L).salarySobId(salaryAcctRecordPO.getSalarySobId()).build()) - .stream().map(SalarySobItemHidePO::getSalaryItemId).collect(Collectors.toList()); - salarySobItemPOS = salarySobItemPOS.stream().filter(po -> !hideItemIds.contains(po.getSalaryItemId())).collect(Collectors.toList()); + salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide()==null || po.getItemHide() == 0).collect(Collectors.toList()); // 查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); diff --git a/src/com/engine/salary/service/impl/SalarySobItemGroupServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemGroupServiceImpl.java index 366a23d7d..a46462b91 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemGroupServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemGroupServiceImpl.java @@ -30,11 +30,6 @@ public class SalarySobItemGroupServiceImpl extends Service implements SalarySobI return salarySobItemGroupMapper.listSome(SalarySobItemGroupPO.builder().salarySobId(salarySobId).build()); } - @Override - public List listBySalarySobIdWithItemHide(Long salarySobId) { - return salarySobItemGroupMapper.listSomeWithItemHide(SalarySobItemGroupPO.builder().salarySobId(salarySobId).build()); - } - @Override public void batchSave(Collection salarySobItemGroupPOS) { salarySobItemGroupMapper.batchInsert(salarySobItemGroupPOS); diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 100e35ad6..a8cfe0900 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -11,6 +11,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.hrmelog.entity.dto.LoggerContext; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -105,6 +106,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class); } + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + private SalaryAcctResultService getSalaryAcctResultService(User user) { return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } @@ -120,11 +125,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return salarySobItemMapper.listSome(SalarySobItemPO.builder().salarySobId(salarySobId).build()); } - @Override - public List listBySalarySobIdWithHideItem(Long salarySobId) { - return salarySobItemMapper.listBySalarySobIdWithHideItem(SalarySobItemPO.builder().salarySobId(salarySobId).build()); - } - @Override public List listBySalarySobIdAndGroupId(Long salarySobId, Collection salarySobItemGroupIds) { return salarySobItemMapper.listBySalarySobIdAndGroupId(salarySobId, salarySobItemGroupIds); @@ -170,9 +170,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe // 查询薪资账套的员工信息字段 List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salarySobId); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salarySobId); + List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salarySobId); // 查询薪资账套的薪资项目副本 - List salarySobItemPOS = listBySalarySobIdWithHideItem(salarySobId); + List salarySobItemPOS = listBySalarySobId(salarySobId); // 薪资项目副本去重 salarySobItemPOS = salarySobItemPOS.stream().filter(SalaryEntityUtil.distinctByKey(PO -> PO.getSalarySobId() + "-" + PO.getSalaryItemId())).collect(Collectors.toList()); // 回算薪资项目 @@ -208,38 +208,80 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return salarySobItemAggregateBO.convert2AggregateDTO(); } - @Override - public SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salarySobId, boolean isBackCalc) { + public SalarySobItemAggregateDTO getAggregateByRecordId(Long salaryAcctRecordId, boolean hideItem) { + SalaryAcctConfig salaryAcctConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordId); // 查询薪资账套 - SalarySobPO salarySobPO = salarySobBiz.getById(salarySobId); + SalarySobPO salarySobPO = salaryAcctConfig.getSalarySob(); if (Objects.isNull(salarySobPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); } // 查询薪资账套的员工信息字段 - List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salarySobId); + List salarySobEmpFieldPOS = salaryAcctConfig.getSalarySobEmpFields(); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salarySobId); + List salarySobItemGroupPOS = salaryAcctConfig.getSalarySobItemGroups(); + if (hideItem) { + salarySobItemGroupPOS = salarySobItemGroupPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide().equals(0L)).collect(Collectors.toList()); + } + // 查询薪资账套的薪资项目副本(已经过滤关闭分类显示按钮的薪资项目) + List salarySobItemPOS = salaryAcctConfig.getSalarySobItems(); + if (hideItem) { + salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide().equals(0L)).collect(Collectors.toList()); + } + // 回算薪资项目 + List salarySobBackItems = salaryAcctConfig.getSalarySobBackItems(); + // 薪资账套的薪资项目副本所用的公式id + Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); + // 添加薪资回算项目的公式id + formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getFormulaId)); + // 查询公式详情 + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 查询薪资账套的薪资项目副本+回算的薪资项目所关联的薪资项目 + Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + Set backCalcItemIds = SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); + salaryItemIds.addAll(backCalcItemIds); - // 获取关闭显示的分类 - List hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build()); - // 过滤关闭显示的薪资项目分类 - salarySobItemGroupPOS = salarySobItemGroupPOS.stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList()); - // 获取薪资项目分类ID - List salarySobItemGroupIds = salarySobItemGroupPOS.stream().map(SalarySobItemGroupPO::getId).collect(Collectors.toList()); - salarySobItemGroupIds.add(0L); + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + final Set ids = new HashSet(); + if (needAuth) { + Set collect = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()).stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); + ids.addAll(collect); + } + List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds).stream().filter(po -> Boolean.FALSE.equals(needAuth) || getSalaryItemService(user).filterInRange(ids, po)).collect(Collectors.toList()); + + //获取系统值 + List salarySobDefaultItemPOS = getSalarySobDefaultItemMapper().listAll(); + + // 转换成聚合dto + SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySobPO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS, salarySobBackItems, salarySobDefaultItemPOS); + return salarySobItemAggregateBO.convert2AggregateDTO(); + } + + @Override + public SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salaryAcctRecordId, Long salarySobId, boolean isBackCalc) { + + SalaryAcctConfig salaryAcctConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordId); + + // 查询薪资账套 + SalarySobPO salarySobPO = salaryAcctConfig.getSalarySob(); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); + } + // 查询薪资账套的员工信息字段 + List salarySobEmpFieldPOS = salaryAcctConfig.getSalarySobEmpFields(); + + // 查询薪资账套的薪资项目分类 + List salarySobItemGroupPOS = salaryAcctConfig.getSalarySobItemGroups(); + salarySobItemGroupPOS = salarySobItemGroupPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide().equals(0L)).collect(Collectors.toList()); // 查询薪资账套的薪资项目副本(已经过滤关闭分类显示按钮的薪资项目) - List salarySobItemPOS = listBySalarySobIdAndGroupId(salarySobId, salarySobItemGroupIds); - - // 获取关闭显示的薪资项目 - List hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(0).build()); - salarySobItemPOS = salarySobItemPOS.stream().filter(group -> !(hideItemIDs.contains(group.getSalaryItemId()))).collect(Collectors.toList()); + List salarySobItemPOS = salaryAcctConfig.getSalarySobItems(); + salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide().equals(0L)).collect(Collectors.toList()); // 回算薪资项目 List salarySobBackItems = Collections.emptyList(); if (isBackCalc) { - salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salarySobId); + salarySobBackItems = salaryAcctConfig.getSalarySobBackItems(); } // 薪资账套的薪资项目副本所用的公式id @@ -350,47 +392,15 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe List allSalaryItemList = getSalaryItemService(user).listAll(); Map salaryItemsMap = SalaryEntityUtil.convert2Map(allSalaryItemList, SalaryItemPO::getId); - // 需要保存的隐藏项目 - List needInsertItemShow = new ArrayList<>(); - //先保存项目分类获,取分类id Collection salarySobItems = new ArrayList<>(); for (SalarySobItemSaveParam.SalarySobItemGroupParam itemGroupParam : needAddGroup) { Long salarySobItemGroupId = IdGenerator.generate(); - SalarySobItemGroupPO salarySobItemGroupPO = SalarySobItemGroupPO.builder() - .id(salarySobItemGroupId) - .salarySobId(salarySobId) - .name(itemGroupParam.getName()) - .sortedIndex(itemGroupParam.getSortedIndex()) - .description(StringUtils.EMPTY) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); + SalarySobItemGroupPO salarySobItemGroupPO = SalarySobItemGroupPO.builder().id(salarySobItemGroupId).salarySobId(salarySobId).name(itemGroupParam.getName()).sortedIndex(itemGroupParam.getSortedIndex()).itemHide(itemGroupParam.getItemHide()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build(); //保存分类 salarySobItemGroupBiz.insert(salarySobItemGroupPO); - // 保存薪资项目分类 字段显隐 - Long salarySobGroupItemShowId = IdGenerator.generate(); - SalarySobItemHidePO salarySobGroupItemHidePO = SalarySobItemHidePO.builder() - .id(salarySobGroupItemShowId) - .salarySobId(salarySobId) - .salaryItemId(salarySobItemGroupId) - .isGroup(1) - .itemHide(itemGroupParam.getItemHide() == null ? 0L : itemGroupParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - needInsertItemShow.add(salarySobGroupItemHidePO); -// salarySobItemMapper.InsertItemShow(salarySobGroupItemHidePO); - - for (SalarySobItemSaveParam.SalarySobItemParam itemParam : itemGroupParam.getItems()) { SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() @@ -410,26 +420,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .itemHide(itemParam.getItemHide()) .build(); salarySobItems.add(salarySobItemPO); - - // 保存薪资项目是否展示 - Long salarySobItemShowId = IdGenerator.generate(); - SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder() - .id(salarySobItemShowId) - .salarySobId(salarySobId) - .salaryItemId(itemParam.getSalaryItemId()) - .isGroup(0) - .itemHide(itemParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); -// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); - needInsertItemShow.add(salarySobItemHidePO); - } } @@ -437,31 +430,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe //更新分组 for (SalarySobItemSaveParam.SalarySobItemGroupParam itemGroupParam : needUpdateGroup) { Long groupId = itemGroupParam.getId(); - SalarySobItemGroupPO salarySobItemGroupPO = SalarySobItemGroupPO.builder() - .id(groupId) - .name(itemGroupParam.getName()) - .sortedIndex(itemGroupParam.getSortedIndex()) - .build(); + SalarySobItemGroupPO salarySobItemGroupPO = SalarySobItemGroupPO.builder().id(groupId).name(itemGroupParam.getName()).sortedIndex(itemGroupParam.getSortedIndex()).itemHide(itemGroupParam.getItemHide()).build(); //更新分类 salarySobItemGroupBiz.update(salarySobItemGroupPO); - // 保存薪资项目分类 字段显隐 - Long salarySobGroupItemShowId = IdGenerator.generate(); - SalarySobItemHidePO salarySobGroupItemHidePO = SalarySobItemHidePO.builder() - .id(salarySobGroupItemShowId) - .salarySobId(salarySobId) - .salaryItemId(groupId) - .isGroup(1) - .itemHide(itemGroupParam.getItemHide() == null ? 0L : itemGroupParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - needInsertItemShow.add(salarySobGroupItemHidePO); - - List items = itemGroupParam.getItems(); List itemIds = SalaryEntityUtil.properties(items, SalarySobItemSaveParam.SalarySobItemParam::getId, Collectors.toList()); List oldItems = salarySobItemMapper.listBySalarySobIdAndGroupId(salarySobId, Collections.singleton(groupId)); @@ -490,24 +462,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .itemHide(itemParam.getItemHide()) .build(); salarySobItems.add(salarySobItemPO); - - // 保存薪资项目是否展示 - Long salarySobItemShowId = IdGenerator.generate(); - SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder() - .id(salarySobItemShowId) - .salarySobId(salarySobId) - .salaryItemId(itemParam.getSalaryItemId()) - .isGroup(0) - .itemHide(itemParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - needInsertItemShow.add(salarySobItemHidePO); } //更新 for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { @@ -525,22 +482,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .itemHide(itemParam.getItemHide()) .build(); getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO); - // 保存薪资项目是否展示 - Long salarySobItemShowId = IdGenerator.generate(); - needInsertItemShow.add(SalarySobItemHidePO.builder() - .id(salarySobItemShowId) - .salarySobId(salarySobId) - .salaryItemId(itemParam.getSalaryItemId()) - .isGroup(0) - .itemHide(itemParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build()); + } @@ -565,74 +510,14 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needAddItems) { SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); - SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() - .salarySobId(salarySobId) - .salaryItemId(itemParam.getSalaryItemId()) - .salaryItemCode(salaryItemPO.getCode()) - .salarySobItemGroupId(NumberUtils.LONG_ZERO) - .formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)) - .sortedIndex(itemParam.getSortedIndex()) - .description(StringUtils.EMPTY) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)) - .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) - .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) - .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) - .build(); + SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salaryItemCode(salaryItemPO.getCode()).salarySobItemGroupId(NumberUtils.LONG_ZERO).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).build(); salarySobItems.add(salarySobItemPO); - - // 保存未分类薪资项目是否展示 - Long salarySobItemShowId = IdGenerator.generate(); - SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder() - .id(salarySobItemShowId) - .salarySobId(salarySobId) - .salaryItemId(itemParam.getSalaryItemId()) - .isGroup(0) - .itemHide(itemParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); -// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); - needInsertItemShow.add(salarySobItemHidePO); } for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); - SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() - .id(itemParam.getId()) - .formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)) - .sortedIndex(itemParam.getSortedIndex()) - .updateTime(now) - .canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)) - .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) - .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) - .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) - .build(); + SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().id(itemParam.getId()).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).updateTime(now).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).build(); getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO); - - // 保存未分类薪资项目是否展示 - Long salarySobItemShowId = IdGenerator.generate(); - SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder() - .id(salarySobItemShowId) - .salarySobId(salarySobId) - .salaryItemId(itemParam.getSalaryItemId()) - .isGroup(0) - .itemHide(itemParam.getItemHide()) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); -// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); - needInsertItemShow.add(salarySobItemHidePO); } if (CollectionUtils.isNotEmpty(needDeleteItemIds)) { @@ -644,8 +529,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe // 删除原薪资项目是否显示 deleteItemShowBySalarySobIds(Collections.singleton(salarySobId)); - // 保存薪资账套的薪资项目隐藏信息 - batchSaveShow(needInsertItemShow); } private SalaryItemPO checkItemExists(Long salaryItemId, Map salaryItemsMap) { @@ -672,24 +555,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe Collection needInsertSalarySobEmpFields = new ArrayList<>(); for (SalarySobItemSaveParam.SalarySobEmpFieldParam salarySobEmpFieldParam : empFields) { if (salarySobEmpFieldParam.getId() == null) { - SalarySobEmpFieldPO salarySobEmpFieldPO = SalarySobEmpFieldPO.builder() - .salarySobId(saveParam.getSalarySobId()) - .fieldCode(salarySobEmpFieldParam.getFieldId()) - .sortedIndex(salarySobEmpFieldParam.getSortedIndex()) - .canDelete(salarySobEmpFieldParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); + SalarySobEmpFieldPO salarySobEmpFieldPO = SalarySobEmpFieldPO.builder().salarySobId(saveParam.getSalarySobId()).fieldCode(salarySobEmpFieldParam.getFieldId()).sortedIndex(salarySobEmpFieldParam.getSortedIndex()).canDelete(salarySobEmpFieldParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build(); needInsertSalarySobEmpFields.add(salarySobEmpFieldPO); } else { - SalarySobEmpFieldPO salarySobEmpFieldPO = SalarySobEmpFieldPO.builder() - .id(salarySobEmpFieldParam.getId()) - .sortedIndex(salarySobEmpFieldParam.getSortedIndex()) - .updateTime(now) - .build(); + SalarySobEmpFieldPO salarySobEmpFieldPO = SalarySobEmpFieldPO.builder().id(salarySobEmpFieldParam.getId()).sortedIndex(salarySobEmpFieldParam.getSortedIndex()).updateTime(now).build(); getSalarySobEmpFieldMapper().updateIgnoreNull(salarySobEmpFieldPO); } @@ -705,23 +574,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return; } //前端可能传重复数据,去重 - List list = new ArrayList<>(salarySobItemPOS.stream() - .collect(Collectors.toMap(SalarySobItemPO::getSalaryItemId, Function.identity(), (oldValue, newValue) -> oldValue)) - .values()); + List list = new ArrayList<>(salarySobItemPOS.stream().collect(Collectors.toMap(SalarySobItemPO::getSalaryItemId, Function.identity(), (oldValue, newValue) -> oldValue)).values()); salarySobItemMapper.batchInsert(list); } - private void batchSaveShow(List needInsertItemShow) { - if (CollectionUtils.isEmpty(needInsertItemShow)) { - return; - } - //前端可能传重复数据,去重 - List list = new ArrayList<>(needInsertItemShow.stream() - .collect(Collectors.toMap(SalarySobItemHidePO::getSalaryItemId, Function.identity(), (oldValue, newValue) -> oldValue)) - .values()); - salarySobItemMapper.batchInsertItemShow(list); - } - @Override public void deleteBySalarySobIds(Collection salarySobIds) { salarySobItemMapper.deleteBySalarySobIds(salarySobIds); @@ -770,30 +626,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe // 强制开启账套的公式配置 BaseBean baseBean = new BaseBean(); final Boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); - // 获取核算时隐藏的薪资项目id - List hideItemIds = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder() - .salarySobId(param.getSalarySobId()) - .isGroup(new Integer(0)) - .salaryItemId(param.getSalaryItemId()) - .build()); String formulaContent = CollectionUtils.isEmpty(expressFormulas) ? "" : expressFormulas.get(0).getFormula(); Integer valueType = salarySobItemPO.getValueType() == null ? salaryItemPO.getValueType() : salarySobItemPO.getValueType(); - salarySobItemFormDTO - .setId(salarySobItemPO.getId()) - .setName(salaryItemPO.getName()) - .setItemHide(hideItemIds.contains(salaryItemPO.getId()) ? 1 : 0) - .setDataType(salaryItemPO.getDataType()) - .setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()) - .setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()) - .setValueType(valueType) - .setFormulaId(salarySobItemPO.getFormulaId()) - .setFormulaContent(CollectionUtils.isNotEmpty(expressFormulas) ? formulaContent : "") - .setOriginFormulaContent(valueType.equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : "") - .setOriginSqlContent(valueType.equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "") - .setUseInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) - .setDescription(salarySobItemPO.getDescription()) - .setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0); + salarySobItemFormDTO.setId(salarySobItemPO.getId()).setName(salaryItemPO.getName()).setItemHide(Integer.valueOf(salarySobItemPO.getItemHide().toString())).setDataType(salaryItemPO.getDataType()).setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()).setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()).setValueType(valueType).setFormulaId(salarySobItemPO.getFormulaId()).setFormulaContent(CollectionUtils.isNotEmpty(expressFormulas) ? formulaContent : "").setOriginFormulaContent(valueType.equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : "").setOriginSqlContent(valueType.equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "").setUseInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()).setDescription(salarySobItemPO.getDescription()).setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0); } return salarySobItemFormDTO; } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index f1ca4db3a..9d146b115 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -693,7 +693,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { // 薪资项目副本去重 salarySobItemPOS = salarySobItemPOS.stream().filter(SalaryEntityUtil.distinctByKey(PO -> PO.getSalarySobId() + "-" + PO.getSalaryItemId())).collect(Collectors.toList()); // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = salarySobItemGroupService.listSomeWithItemHide(SalarySobItemGroupPO.builder().salarySobId(duplicateParam.getId()).build()); + List salarySobItemGroupPOS = salarySobItemGroupService.listSome(SalarySobItemGroupPO.builder().salarySobId(duplicateParam.getId()).build()); // 查询薪资账套的调薪计薪规则 List salarySobAdjustRulePOS = salarySobAdjustRuleService.listBySalarySobId(duplicateParam.getId()); // 查询薪资账套的校验规则 diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index 2bf76796f..f8ee03c5a 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -6,10 +6,10 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.SalarySobBiz; import com.engine.salary.biz.SalaryTemplateBiz; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO; @@ -24,7 +24,6 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; -import com.engine.salary.entity.salarysob.po.SalarySobItemHidePO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.OperateTypeEnum; @@ -127,8 +126,8 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate loggerContext.setTargetId(String.valueOf(salaryTemplateNew.getId())); loggerContext.setTargetName(salaryTemplateNew.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "设为默认使用")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "设为默认使用")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "设为默认使用")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "设为默认使用")); SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); return ""; } @@ -178,8 +177,8 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate loggerContext.setTargetId(String.valueOf(salaryTemplate.getId())); loggerContext.setTargetName(salaryTemplate.getName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增工资单模板")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增工资单模板")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增工资单模板")); loggerContext.setNewValues(salaryTemplate); SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); @@ -269,8 +268,8 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate loggerContext.setTargetId(String.valueOf(salaryTemplateNew.getId())); loggerContext.setTargetName(salaryTemplateNew.getName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "编辑工资单模板")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "编辑工资单模板")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑工资单模板")); loggerContext.setOldValues(salaryTemplate); loggerContext.setNewValues(salaryTemplateNew); SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); @@ -308,7 +307,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate List empFieldCodeList = salarySobEmpFieldPOS.stream().map(SalarySobEmpFieldPO::getFieldCode).collect(Collectors.toList()); Map empFieldCodeWithIdMap = SalaryEntityUtil.convert2Map(salarySobEmpFieldPOS, SalarySobEmpFieldPO::getFieldCode, SalarySobEmpFieldPO::getId); // 查询薪资账套的薪资项目副本 - List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobIdWithHideItem(copyParam.getSalarySobId()); + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(copyParam.getSalarySobId()); List salaryItemIdList = salarySobItemPOS.stream().map(SalarySobItemPO::getSalaryItemId).collect(Collectors.toList()); //拷贝数据中的薪资项目 List salaryItemSettingList = StrUtil.isNotBlank(salaryTemplate.getSalaryItemSetting()) @@ -325,7 +324,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate } } salaryItemSetting.setItems(newItems); - } else if (salaryItemSetting.getItems() != null){ + } else if (salaryItemSetting.getItems() != null) { List newItems = new ArrayList<>(); for (SalaryTemplateSalaryItemListDTO templateItem : salaryItemSetting.getItems()) { if (salaryItemIdList.contains(Long.valueOf(templateItem.getSalaryItemId()))) { @@ -336,7 +335,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate } } List replenishSalaryItemSettingList = StrUtil.isNotBlank(salaryTemplate.getReplenishSalaryItemSetting()) - ? JSONArray.parseArray(salaryTemplate.getReplenishSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class): new ArrayList<>(); + ? JSONArray.parseArray(salaryTemplate.getReplenishSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class) : new ArrayList<>(); for (SalaryTemplateSalaryItemSetListDTO salaryItemSetting : replenishSalaryItemSettingList) { if ("111111111111111111".equals(salaryItemSetting.getGroupId()) && salaryItemSetting.getItems() != null) { List newItems = new ArrayList<>(); @@ -349,7 +348,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate } } salaryItemSetting.setItems(newItems); - } else if (!"333333333333333333".equals(salaryItemSetting.getGroupId()) && salaryItemSetting.getItems() != null){ + } else if (!"333333333333333333".equals(salaryItemSetting.getGroupId()) && salaryItemSetting.getItems() != null) { List newItems = new ArrayList<>(); for (SalaryTemplateSalaryItemListDTO templateItem : salaryItemSetting.getItems()) { if (salaryItemIdList.contains(Long.valueOf(templateItem.getSalaryItemId()))) { @@ -386,8 +385,8 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate loggerContext.setTargetId(String.valueOf(salaryTemplateNew.getId())); loggerContext.setTargetName(salaryTemplateNew.getName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "复制工资单模板")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "复制工资单模板")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "复制工资单模板")); loggerContext.setNewValues(salaryTemplateNew); SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); @@ -414,8 +413,8 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate loggerContext.setTargetId(String.valueOf(template.getId())); loggerContext.setTargetName(template.getName() + ":" + template.getId()); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除工资单模板")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除工资单模板")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除工资单模板")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除工资单模板")); SalaryElogConfig.salaryTemplateLoggerTemplate.write(loggerContext); }); return ""; @@ -437,25 +436,16 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate public List getSalaryItemSet(Long salarySobId, boolean isReplenish) { SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId); // 处理薪资账套中隐藏的分类和项目 - // 获取关闭显示的分类 - List hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build()); - // 过滤关闭显示的薪资项目分类 - List itemGroupDTOS = salarySobItemAggregate.getItemGroups().stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList()); + List itemGroupDTOS = salarySobItemAggregate.getItemGroups().stream().filter(group -> group.getItemHide() == null || group.getItemHide().equals(0L)).collect(Collectors.toList()); // 获取关闭显示的薪资项目 - List hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(0).build()); for (SalarySobItemGroupDTO DTO : itemGroupDTOS) { List items = DTO.getItems(); - DTO.setItems(items.stream().filter(item -> !(hideItemIDs.contains(item.getSalaryItemId()))).collect(Collectors.toList())); + DTO.setItems(items.stream().filter(item -> item.getItemHide() == null || item.getItemHide().equals(0L)).collect(Collectors.toList())); } itemGroupDTOS = itemGroupDTOS.stream().filter(DTO -> CollectionUtils.isNotEmpty(DTO.getItems())).collect(Collectors.toList()); salarySobItemAggregate.setItemGroups(itemGroupDTOS); - if (hideGroupIDs.contains(0L)) { - // 隐藏了未分类 - salarySobItemAggregate.setItems(Collections.emptyList()); - } else { - salarySobItemAggregate.setItems(salarySobItemAggregate.getItems().stream().filter(item -> !(hideItemIDs.contains(item.getSalaryItemId()))).collect(Collectors.toList())); - } - return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish); + salarySobItemAggregate.setItems(salarySobItemAggregate.getItems().stream().filter(item -> item.getItemHide() == null || item.getItemHide().equals(0L)).collect(Collectors.toList())); + return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, isReplenish); } @Override @@ -472,7 +462,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate Map itemShowNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId, SalaryBillItemNamePO::getSalaryItemShowName); - List salaryTemplateSalaryItemSetListDTOS = SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish); + List salaryTemplateSalaryItemSetListDTOS = SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, isReplenish); salaryTemplateSalaryItemSetListDTOS.stream() .filter(data -> !StringUtils.equals(data.getGroupId(), "111111111111111111")) .forEach(data -> { diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index bb4a3e3b7..7067466e5 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -713,8 +713,6 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } List taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List employees = getSalaryEmployeeService(user).listEmployee(); - List allEmployees = convert2TaxAgentEmployeePO(employees); if (employeeStatus != null) { List personnelStatusList; // 查询人员状态 @@ -727,7 +725,7 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { // 是否开启分权 if (!isOpenDevolution() || isChief(employeeId)) { - return getTaxAgentEmp(allTaxAgents, taxAgentIds, allEmployees); + return getTaxAgentEmp(allTaxAgents, taxAgentIds); } // 1.判断自己是否是管理员, 如果是管理员,就是能够操作所属个税扣缴义务人下的所有人的数据 @@ -736,7 +734,7 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { List adminTaxAgentIds = taxAgentAdminList.stream().map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(adminTaxAgentIds)) { - taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds, allEmployees)); + taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds)); } return taxAgentManageRangeEmployeeList; @@ -752,9 +750,7 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { return taxAgentManageRangeEmployeeList; } List taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List employees = getSalaryEmployeeService(user).listEmployee(); - List allEmployees = convert2TaxAgentEmployeePO(employees); - taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, taxAgentIds, allEmployees)); + taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, taxAgentIds)); return taxAgentManageRangeEmployeeList; } @@ -768,54 +764,17 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } List taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List employees = getSalaryEmployeeService(user).listEmployee(); - List allEmployees = convert2TaxAgentEmployeePO(employees); // 1.判断自己是否是管理员, 如果是管理员,就是能够操作所属个税扣缴义务人下的所有人的数据 List taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIdsAndEmployeeId(taxAgentIds, (long) user.getUID()); // 是管理员的列表 List adminTaxAgentIds = taxAgentAdminList.stream().map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList()); - taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds, allEmployees)); + taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds)); taxAgentManageRangeEmployeeList = taxAgentManageRangeEmployeeList.stream().distinct().collect(Collectors.toList()); return taxAgentManageRangeEmployeeList; } - /** - * 获取分管理员的关联人员 - * - * @param allTaxAgents - * @param noAdminTaxAgentIds - * @param allEmployees - * @return - */ - private List getTaxAgentSubAdminEmp(List allTaxAgents, List noAdminTaxAgentIds, List allEmployees) { - List taxAgentManageRangeEmployeeList = Lists.newArrayList(); - List taxAgentEmps = taxAgentSubAdminEmpService.listByTaxAgentIds(noAdminTaxAgentIds); - - taxAgentEmps = taxAgentEmps.stream().filter(f -> allEmployees.stream().anyMatch(e -> e.getEmployeeId().equals(f.getEmployeeId()))).collect(Collectors.toList()); - - List finalTaxAgentEmps = taxAgentEmps; - noAdminTaxAgentIds.forEach(e -> { - Optional optionalTaxAgent = allTaxAgents.stream().filter(t -> t.getId().equals(e)).findFirst(); - String taxAgentName = (optionalTaxAgent.isPresent() ? optionalTaxAgent.get().getName() : ""); - List taxAgentEmployees = finalTaxAgentEmps.stream().filter(f -> f.getTaxAgentId().equals(e)).map(m -> { - TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee taxAgentEmployee = new TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee(); - taxAgentEmployee.setEmployeeId(m.getEmployeeId()); - taxAgentEmployee.setUsername(m.getEmployeeName()); - return taxAgentEmployee; - }).collect(Collectors.toList()); - taxAgentManageRangeEmployeeList.add( - TaxAgentManageRangeEmployeeDTO.builder() - .taxAgentId(e) - .taxAgentName(taxAgentName) - .employeeList(taxAgentEmployees) - .build() - ); - }); - return taxAgentManageRangeEmployeeList; - } - /** * 获取个税口角义务人的关联人员 * @@ -823,17 +782,13 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { * @param taxAgentIds * @return */ - private List getTaxAgentEmp(List allTaxAgents, List taxAgentIds, List allEmployees) { + private List getTaxAgentEmp(List allTaxAgents, List taxAgentIds) { List taxAgentManageRangeEmployeeList = Lists.newArrayList(); List taxAgentEmps = getTaxAgentEmpService(user).listByTaxAgentIds(taxAgentIds, UseEmployeeTypeEnum.ALL); - - taxAgentEmps = taxAgentEmps.stream().filter(f -> allEmployees.stream().anyMatch(e -> e.getEmployeeId().equals(f.getEmployeeId()))).collect(Collectors.toList()); - - List finalTaxAgentEmps = taxAgentEmps; taxAgentIds.forEach(e -> { Optional optionalTaxAgent = allTaxAgents.stream().filter(t -> t.getId().equals(e)).findFirst(); String taxAgentName = (optionalTaxAgent.isPresent() ? optionalTaxAgent.get().getName() : ""); - List taxAgentEmployees = finalTaxAgentEmps.stream().filter(f -> f.getTaxAgentId().equals(e)).map(m -> { + List taxAgentEmployees = taxAgentEmps.stream().filter(f -> f.getTaxAgentId().equals(e)).map(m -> { TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee taxAgentEmployee = new TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee(); taxAgentEmployee.setEmployeeId(m.getEmployeeId()); taxAgentEmployee.setUsername(m.getEmployeeName()); diff --git a/src/com/engine/salary/util/valid/Compare.java b/src/com/engine/salary/util/valid/Compare.java new file mode 100644 index 000000000..35ff51b40 --- /dev/null +++ b/src/com/engine/salary/util/valid/Compare.java @@ -0,0 +1,40 @@ +package com.engine.salary.util.valid; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 比较,判断两个实体字段是否改变 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Compare { + + /** + * 是否提示错误 + * + * @return + */ + boolean reportError() default false; + + /** + * 提示信息 + * @return + */ + String message() default ""; + + /** + * 值类型 + * + * @return + */ + ValueTypeEnum type() default ValueTypeEnum.STRING; + +} diff --git a/src/com/engine/salary/util/valid/ValidUtil.java b/src/com/engine/salary/util/valid/ValidUtil.java index 569987ba2..906718077 100644 --- a/src/com/engine/salary/util/valid/ValidUtil.java +++ b/src/com/engine/salary/util/valid/ValidUtil.java @@ -1,8 +1,12 @@ package com.engine.salary.util.valid; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import weaver.general.Util; import java.beans.BeanInfo; import java.beans.Introspector; @@ -20,6 +24,7 @@ import java.util.*; * @author qiantao * @version 1.0 **/ +@Slf4j public class ValidUtil { /** @@ -135,6 +140,7 @@ public class ValidUtil { } } catch (Exception e) { e.printStackTrace(); + log.error("获取属性值失败", e); } return value; } @@ -199,6 +205,12 @@ public class ValidUtil { return convertSuccess; } + /** + * 处理参数值,trim,xss + * + * @param t + * @param + */ public static void modify(T t) { Class clazz = t.getClass(); Field[] fields = clazz.getDeclaredFields(); @@ -251,5 +263,46 @@ public class ValidUtil { } } + /** + * 比较两个对象,如果值不相等,则抛出异常 + *

+ * true代表相等,false代表不相等 + * + * @param o + * @param n + * @param + */ + public static boolean compare(T o, T n) { + Class clazz = o.getClass(); + Field[] fields = clazz.getDeclaredFields(); + boolean result = true; + for (Field field : fields) { + Compare rule = field.getDeclaredAnnotation(Compare.class); + if (null == rule) { + continue; + } + boolean reportError = rule.reportError(); + String message = rule.message(); + + ValueTypeEnum valueTypeEnum = rule.type(); + Object oValue = getValue(o, field.getName()); + Object nValue = getValue(n, field.getName()); + if (valueTypeEnum == ValueTypeEnum.STRING) { + result = result && StrUtil.equals(Util.null2String(oValue), Util.null2String(nValue)); + if (!result && reportError) { + throw new RuntimeException(message); + } + } else if (valueTypeEnum == ValueTypeEnum.DATE) { + result = result && DateUtil.compare((Date) o, (Date) n) == 0; + if (!result && reportError) { + throw new RuntimeException(message); + } + } else if (valueTypeEnum == ValueTypeEnum.OBJECT) { + result = result && compare(oValue, nValue); + } + } + return result; + } + } diff --git a/src/com/engine/salary/util/valid/ValueTypeEnum.java b/src/com/engine/salary/util/valid/ValueTypeEnum.java index f2227d689..12bd9fc2d 100644 --- a/src/com/engine/salary/util/valid/ValueTypeEnum.java +++ b/src/com/engine/salary/util/valid/ValueTypeEnum.java @@ -9,5 +9,5 @@ package com.engine.salary.util.valid; * @version 1.0 **/ public enum ValueTypeEnum { - STRING, OBJECT,ARRAY + STRING, DATE, OBJECT, ARRAY } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 62342d1f4..52d95a469 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -46,8 +46,6 @@ import java.util.stream.Collectors; @Slf4j public class SalaryAcctController { - private SalaryAcctRecordWrapper salaryAcctRecordWrapper; - private SalaryAcctRecordWrapper getSalaryAcctRecordWrapper(User user) { return ServiceUtil.getService(SalaryAcctRecordWrapper.class, user); } @@ -159,6 +157,35 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::backCalculate, param.getSalaryAcctRecordId()); } + /** + * 检查薪资核算的账套配置是否发生变更 + * + * @param id 薪资核算记录id + * @return + */ + @GET + @Path("/compareSobConfig") + @Produces(MediaType.APPLICATION_JSON) + public String compareSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::compareSobConfig, id); + } + + /** + * 更新薪资核算的账套配置 + * + * @param id 薪资核算记录id + * @return + */ + @GET + @Path("/updateSobConfig") + @Produces(MediaType.APPLICATION_JSON) + public String updateSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::updateSobConfig, id); + } + + /* ********************************薪资核算记录相关 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index b3d7d06e3..853a46e4d 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -2,8 +2,10 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.dto.SalarySendCheckDTO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO; @@ -11,9 +13,11 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; 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.SalarySobPO; +import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; @@ -22,8 +26,10 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalarySobUtil; import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.valid.ValidUtil; import com.engine.salary.wrapper.proxy.SalaryAcctRecordWrapperProxy; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; @@ -68,6 +74,15 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } + + // private ComInfoCache comInfoCache; public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { @@ -246,7 +261,6 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord } - /** * 判断是否存在合并计税 * @@ -258,12 +272,91 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord } /** - * @description 回算 * @return void + * @description 回算 * @author Harryxzy * @date 2022/11/24 15:52 */ - public void backCalculate(Long salaryAcctRecordId){ + public void backCalculate(Long salaryAcctRecordId) { getSalaryAcctRecordService(user).backCalculate(salaryAcctRecordId); } + + + /** + * 薪资核算的账套配置是否已经发生变更 + * + * @param id + * @return true--发生了变更、false--没有发生变更 + */ + public boolean compareSobConfig(Long id) { + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(id); + if (salaryAcctRecord == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156474, "参数错误,薪资核算记录不存在或已被删除")); + } + // 查询薪资核算记录已有的账套配置 + SalaryAcctSobConfigPO salaryAcctSobConfig = getSalaryAcctSobConfigService(user).getBySalaryAcctRecordId(false, id); + // 查询最新的账套配置 + SalaryAcctSobConfigPO newSalaryAcctSobConfig = getSalaryAcctSobConfigService(user).initBySalaryAcctRecord(salaryAcctRecord); + if (Objects.isNull(salaryAcctSobConfig)) { + // 为避免并发造成的事物问题,需要做一下并发处理 + String cacheIndex = id.toString(); + String acctSobConfigFlag = getSalaryCacheService(user).get(SalaryCacheKey.ACCT_SOB_CONFIG + cacheIndex); + if (acctSobConfigFlag != null && StringUtils.equals(acctSobConfigFlag, "TRUE")) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160540, "其他人员正在操作此条薪资核算记录,请稍后再试")); + } + getSalaryCacheService(user).set(SalaryCacheKey.ACCT_SOB_CONFIG + cacheIndex, "TRUE"); + getSalaryAcctSobConfigService(user).save(newSalaryAcctSobConfig); + getSalaryCacheService(user).remove(SalaryCacheKey.ACCT_SOB_CONFIG + cacheIndex); + return false; + } + + // 如果薪资核算记录已经归档了,不再校验薪资核算的账套配置是否已经发生变更 + if (!Objects.equals(salaryAcctRecord.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) { + return false; + } + + SalaryAcctConfig config = SalaryAcctConfig.parse(salaryAcctSobConfig); + SalaryAcctConfig newConfig = SalaryAcctConfig.parse(newSalaryAcctSobConfig); + + // 判断账套配置是否已经变更了 + SalarySobPO salarySobPO = config.getSalarySob(); + SalarySobPO newSalarySobPO = newConfig.getSalarySob(); + if (!ValidUtil.compare(salarySobPO, newSalarySobPO)) { + return true; + } + + List salarySobEmpFields = config.getSalarySobEmpFields(); + List newSalarySobEmpFields = newConfig.getSalarySobEmpFields(); + if (SalarySobEmpFieldPO.toCompareString(salarySobEmpFields).compareTo(SalarySobEmpFieldPO.toCompareString(newSalarySobEmpFields)) != 0) { + return true; + } + + List salarySobItemGroups = config.getSalarySobItemGroups(); + List newSalarySobItemGroups = newConfig.getSalarySobItemGroups(); + if (SalarySobItemGroupPO.toCompareString(salarySobItemGroups).compareTo(SalarySobItemGroupPO.toCompareString(newSalarySobItemGroups)) != 0) { + return true; + } + + List salarySobItems = config.getSalarySobItems(); + List newSalarySobItems = newConfig.getSalarySobItems(); + if (SalarySobItemPO.toCompareString(salarySobItems).compareTo(SalarySobItemPO.toCompareString(newSalarySobItems)) != 0) { + return true; + } + + List salarySobBackItems = config.getSalarySobBackItems(); + List newSalarySobBackItems = newConfig.getSalarySobBackItems(); + if (SalarySobBackItemPO.toCompareString(salarySobBackItems).compareTo(SalarySobBackItemPO.toCompareString(newSalarySobBackItems)) != 0) { + return true; + } + return false; + } + + /** + * 更新薪资核算的账套配置 + * + * @param id + */ + public void updateSobConfig(Long id) { + getSalaryAcctSobConfigService(user).updateBySalaryAcctRecordId(id); + } } diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index d5693105c..1407d0f8d 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -84,7 +84,7 @@ public class SalaryItemWrapper extends Service { List usingCodes = usingItem.getUsingCodes(); //删除无用公式 - getSalaryFormulaService(user).deleteNotIn(usingFormulaIds); +// getSalaryFormulaService(user).deleteNotIn(usingFormulaIds); //薪资档案引用的项目转移到字段管理功能项 searchParam.setUseInEmployeeSalary(SalaryOnOffEnum.OFF.getValue()); diff --git a/src/com/engine/salary/wrapper/SalarySobWrapper.java b/src/com/engine/salary/wrapper/SalarySobWrapper.java index c94b09e15..e0f456a5f 100644 --- a/src/com/engine/salary/wrapper/SalarySobWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobWrapper.java @@ -66,6 +66,11 @@ public class SalarySobWrapper extends Service { return ServiceUtil.getService(SysSalaryItemServiceImpl.class, user); } + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + /** * 薪资账套列表