From 3428de9e33f102776f9dfa1e40b87b2e63e040b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 6 May 2024 16:03:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A6=E5=A5=97=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202404260903.sql | 19 ++ resource/sqlupgrade/DM/sql202404290603.sql | 12 + resource/sqlupgrade/GS/sql202404260903.sql | 19 ++ resource/sqlupgrade/GS/sql202404290603.sql | 12 + resource/sqlupgrade/JC/sql202404260903.sql | 19 ++ resource/sqlupgrade/JC/sql202404290603.sql | 12 + resource/sqlupgrade/Mysql/sql202404260903.sql | 18 + resource/sqlupgrade/Mysql/sql202404290603.sql | 7 + .../sqlupgrade/Oracle/sql202404260903.sql | 18 + .../sqlupgrade/Oracle/sql202404290603.sql | 9 + resource/sqlupgrade/PG/sql202404260903.sql | 18 + resource/sqlupgrade/PG/sql202404290603.sql | 7 + .../sqlupgrade/SQLServer/sql202404260903.sql | 18 + .../sqlupgrade/SQLServer/sql202404290603.sql | 14 + resource/sqlupgrade/ST/sql202404260903.sql | 19 ++ resource/sqlupgrade/ST/sql202404290603.sql | 12 + .../salary/biz/SalarySobItemGroupBiz.java | 9 - .../salaryacct/bo/SalaryAcctConfig.java | 84 +++++ .../salaryacct/po/SalaryAcctSobConfigPO.java | 100 ++++++ .../salarysob/po/SalarySobBackItemPO.java | 28 ++ .../salarysob/po/SalarySobEmpFieldPO.java | 23 ++ .../salarysob/po/SalarySobItemGroupPO.java | 22 ++ .../entity/salarysob/po/SalarySobItemPO.java | 30 ++ .../entity/salarysob/po/SalarySobPO.java | 10 + .../salaryacct/SalaryAcctSobConfigMapper.java | 80 +++++ .../salaryacct/SalaryAcctSobConfigMapper.xml | 316 ++++++++++++++++++ .../salarysob/SalarySobItemGroupMapper.java | 2 - .../salarysob/SalarySobItemGroupMapper.xml | 53 ++- .../mapper/salarysob/SalarySobItemMapper.xml | 29 +- .../service/SalaryAcctSobConfigService.java | 86 +++++ .../service/SalarySobItemGroupService.java | 8 - .../salary/service/SalarySobItemService.java | 10 +- .../impl/SalaryAcctExcelServiceImpl.java | 33 +- .../impl/SalaryAcctResultServiceImpl.java | 22 +- .../impl/SalaryAcctSobConfigServiceImpl.java | 188 +++++++++++ .../SalaryComparisonResultServiceImpl.java | 18 +- .../impl/SalarySobItemGroupServiceImpl.java | 5 - .../impl/SalarySobItemServiceImpl.java | 185 ++-------- .../service/impl/SalarySobServiceImpl.java | 2 +- .../impl/SalaryTemplateServiceImpl.java | 2 +- src/com/engine/salary/util/valid/Compare.java | 40 +++ .../engine/salary/util/valid/ValidUtil.java | 53 +++ .../salary/util/valid/ValueTypeEnum.java | 2 +- .../salary/web/SalaryAcctController.java | 31 +- .../wrapper/SalaryAcctRecordWrapper.java | 101 +++++- .../salary/wrapper/SalaryItemWrapper.java | 2 +- .../salary/wrapper/SalarySobWrapper.java | 5 + 47 files changed, 1547 insertions(+), 265 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202404260903.sql create mode 100644 resource/sqlupgrade/DM/sql202404290603.sql create mode 100644 resource/sqlupgrade/GS/sql202404260903.sql create mode 100644 resource/sqlupgrade/GS/sql202404290603.sql create mode 100644 resource/sqlupgrade/JC/sql202404260903.sql create mode 100644 resource/sqlupgrade/JC/sql202404290603.sql create mode 100644 resource/sqlupgrade/Mysql/sql202404260903.sql create mode 100644 resource/sqlupgrade/Mysql/sql202404290603.sql create mode 100644 resource/sqlupgrade/Oracle/sql202404260903.sql create mode 100644 resource/sqlupgrade/Oracle/sql202404290603.sql create mode 100644 resource/sqlupgrade/PG/sql202404260903.sql create mode 100644 resource/sqlupgrade/PG/sql202404290603.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202404260903.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202404290603.sql create mode 100644 resource/sqlupgrade/ST/sql202404260903.sql create mode 100644 resource/sqlupgrade/ST/sql202404290603.sql create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConfig.java create mode 100644 src/com/engine/salary/entity/salaryacct/po/SalaryAcctSobConfigPO.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctSobConfigMapper.xml create mode 100644 src/com/engine/salary/service/SalaryAcctSobConfigService.java create mode 100644 src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java create mode 100644 src/com/engine/salary/util/valid/Compare.java 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/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/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/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/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/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/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/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/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/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/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 15704802b..dd33e7086 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; /** * 薪资账套薪资项目 @@ -124,4 +128,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 1b314b536..942731380 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salarysob.po; import com.engine.hrmelog.annotation.ElogTransform; +import com.engine.salary.util.valid.Compare; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,12 +27,14 @@ public class SalarySobPO { * 主键id */ @ElogTransform( name="主键" ) + @Compare private Long id; /** * 名称 */ @ElogTransform( name="名称" ) + @Compare private String name; /** @@ -44,42 +47,49 @@ public class SalarySobPO { * 应税项目。1:正常工资薪金所得 */ @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/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 ed7016175..fb545ee6b 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml @@ -15,6 +15,7 @@ + @@ -37,6 +38,7 @@ , t.rounding_mode , t.pattern , t.value_type + , t.item_hide @@ -219,6 +221,9 @@ can_delete, + + item_hide, + @@ -258,7 +263,10 @@ #{updateTime}, - can_delete, + #{canDelete}, + + + #{itemHide}, @@ -282,6 +290,7 @@ rounding_mode=#{roundingMode}, pattern=#{pattern}, value_type=#{valueType}, + item_hide=#{itemHide}, WHERE id = #{id} AND delete_type = 0 @@ -336,6 +345,9 @@ value_type=#{valueType}, + + item_hide=#{itemHide}, + WHERE id = #{id} AND delete_type = 0 @@ -382,7 +394,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) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide) VALUES ( @@ -400,13 +412,14 @@ #{item.canDelete}, #{item.roundingMode}, #{item.pattern}, - #{item.valueType} + #{item.valueType}, + #{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) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide) select @@ -424,14 +437,15 @@ #{item.canDelete,jdbcType=INTEGER}, #{item.roundingMode,jdbcType=INTEGER}, #{item.pattern,jdbcType=INTEGER}, - #{item.valueType,jdbcType=INTEGER} + #{item.valueType,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) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide) VALUES ( #{item.salarySobId}, @@ -448,7 +462,8 @@ #{item.canDelete}, #{item.roundingMode}, #{item.pattern}, - #{item.valueType} + #{item.valueType}, + #{item.itemHide} ) 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/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index 7f1aa0647..5d9914e9e 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -33,14 +33,6 @@ public interface SalarySobItemService { */ List listBySalarySobId(Long salarySobId); - /** - * 根据薪资账套id查询薪资账套的薪资项目副本(不包括已隐藏的薪资项目列) - * - * @param salarySobId 薪资账套的id - * @return - */ - List listBySalarySobIdWithHideItem(Long salarySobId); - /** * 根据薪资账套id和薪资项目分类查询薪资账套的薪资项目副本 * @@ -93,7 +85,7 @@ public interface SalarySobItemService { * @param salarySobId * @return */ - SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salarySobId, boolean isBackCalc); + SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salaryAcctRecordId,Long salarySobId, boolean isBackCalc); /** * 保存 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index c9956d1ab..9e8900254 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); // 对分组内薪资项目排序 @@ -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 246b6a6f4..643a9c82e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -188,9 +188,10 @@ 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)) { @@ -251,7 +252,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe //---------------------------------------------- // 查询薪资账套的薪资项目分类 - List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salaryAcctEmployeePO.getSalarySobId()); + List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctEmployeePO.getSalarySobId()); // 获取关闭显示的分类 List hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salaryAcctEmployeePO.getSalarySobId()).isGroup(1).build()); // 过滤关闭显示的薪资项目分类 @@ -436,10 +437,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(); @@ -734,6 +738,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, "当前薪资核算记录已归档,请重新打开后再进行核算")); @@ -741,14 +749,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(); 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 d857a9709..4bb367f12 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.salary.biz.SalarySobItemHideBiz; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; 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.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; @@ -97,6 +98,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class); } + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + @Override public List list() { return salarySobItemMapper.listAll(); @@ -107,11 +112,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); @@ -157,9 +157,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()); // 回算薪资项目 @@ -197,36 +197,30 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe @Override - public SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salarySobId, boolean isBackCalc) { + public SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salaryAcctRecordId, Long salarySobId, boolean isBackCalc) { + + 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 salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salarySobId); + List salarySobEmpFieldPOS = salaryAcctConfig.getSalarySobEmpFields(); - // 获取关闭显示的分类 - 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); + // 查询薪资账套的薪资项目分类 + 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 @@ -337,9 +331,6 @@ 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) { @@ -349,6 +340,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .salarySobId(salarySobId) .name(itemGroupParam.getName()) .sortedIndex(itemGroupParam.getSortedIndex()) + .itemHide(itemGroupParam.getItemHide()) .description(StringUtils.EMPTY) .creator(employeeId) .createTime(now) @@ -360,24 +352,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe 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() @@ -396,26 +370,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); - } } @@ -427,27 +384,11 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .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)); @@ -475,24 +416,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) { @@ -509,22 +435,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,25 +479,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); } for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { @@ -597,25 +495,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(); 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)) { @@ -627,8 +509,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe // 删除原薪资项目是否显示 deleteItemShowBySalarySobIds(Collections.singleton(salarySobId)); - // 保存薪资账套的薪资项目隐藏信息 - batchSaveShow(needInsertItemShow); } private SalaryItemPO checkItemExists(Long salaryItemId, Map salaryItemsMap) { @@ -694,17 +574,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe 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); diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index b8cf6acdb..413bbecd5 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -675,7 +675,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..22e87ef65 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -308,7 +308,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()) 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 1d37dad5e..4088342c7 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 d86ea9b26..ed64c571a 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); + } + + /** * 薪资账套列表