diff --git a/resource/sqlupgrade/DM/sql202308080403.sql b/resource/sqlupgrade/DM/sql202308080403.sql new file mode 100644 index 000000000..df4bb57b5 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202308080403.sql @@ -0,0 +1,12 @@ +alter table hrsa_salary_sob_item + add rounding_mode NUMBER null; +/ + +alter table hrsa_salary_sob_item + add pattern NUMBER null; +/ + +alter table hrsa_salary_sob_item + add value_type NUMBER null; +/ + diff --git a/resource/sqlupgrade/DM/sql202308080503.sql b/resource/sqlupgrade/DM/sql202308080503.sql new file mode 100644 index 000000000..771c36cba --- /dev/null +++ b/resource/sqlupgrade/DM/sql202308080503.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_bill_item_name( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_template_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + salary_item_show_name VARCHAR2(255) NOT NULL, + salary_bill_type NUMBER NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) NOT NULL, + delete_type NUMBER NOT NULL, + tenant_key VARCHAR2(255) +); +/ + diff --git a/resource/sqlupgrade/DM/sql202308090203.sql b/resource/sqlupgrade/DM/sql202308090203.sql new file mode 100644 index 000000000..ee8394990 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202308090203.sql @@ -0,0 +1,48 @@ +ALTER Table hrsa_social_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_social_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_social_archives drop column employee_id; +/ + +alter table hrsa_social_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_social_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_fund_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_fund_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_fund_archives drop column employee_id; +/ + +alter table hrsa_fund_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_fund_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_other_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_other_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_other_archives drop column employee_id; +/ + +alter table hrsa_other_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_other_archives MODIFY (employee_id not null); +/ + +ALTER TABLE hrsa_insurance_base_info ADD employee_type number; +/ + diff --git a/resource/sqlupgrade/GS/sql202308090203.sql b/resource/sqlupgrade/GS/sql202308090203.sql new file mode 100644 index 000000000..ee8394990 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202308090203.sql @@ -0,0 +1,48 @@ +ALTER Table hrsa_social_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_social_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_social_archives drop column employee_id; +/ + +alter table hrsa_social_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_social_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_fund_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_fund_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_fund_archives drop column employee_id; +/ + +alter table hrsa_fund_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_fund_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_other_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_other_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_other_archives drop column employee_id; +/ + +alter table hrsa_other_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_other_archives MODIFY (employee_id not null); +/ + +ALTER TABLE hrsa_insurance_base_info ADD employee_type number; +/ + diff --git a/resource/sqlupgrade/JC/sql202308080403.sql b/resource/sqlupgrade/JC/sql202308080403.sql new file mode 100644 index 000000000..df4bb57b5 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202308080403.sql @@ -0,0 +1,12 @@ +alter table hrsa_salary_sob_item + add rounding_mode NUMBER null; +/ + +alter table hrsa_salary_sob_item + add pattern NUMBER null; +/ + +alter table hrsa_salary_sob_item + add value_type NUMBER null; +/ + diff --git a/resource/sqlupgrade/JC/sql202308080503.sql b/resource/sqlupgrade/JC/sql202308080503.sql new file mode 100644 index 000000000..771c36cba --- /dev/null +++ b/resource/sqlupgrade/JC/sql202308080503.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_salary_bill_item_name( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_template_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + salary_item_show_name VARCHAR2(255) NOT NULL, + salary_bill_type NUMBER NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) NOT NULL, + delete_type NUMBER NOT NULL, + tenant_key VARCHAR2(255) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202308090203.sql b/resource/sqlupgrade/JC/sql202308090203.sql new file mode 100644 index 000000000..ee8394990 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202308090203.sql @@ -0,0 +1,48 @@ +ALTER Table hrsa_social_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_social_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_social_archives drop column employee_id; +/ + +alter table hrsa_social_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_social_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_fund_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_fund_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_fund_archives drop column employee_id; +/ + +alter table hrsa_fund_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_fund_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_other_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_other_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_other_archives drop column employee_id; +/ + +alter table hrsa_other_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_other_archives MODIFY (employee_id not null); +/ + +ALTER TABLE hrsa_insurance_base_info ADD employee_type number; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202308080403.sql b/resource/sqlupgrade/Mysql/sql202308080403.sql new file mode 100644 index 000000000..841e22e7a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202308080403.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_sob_item +ADD COLUMN rounding_mode int NULL, +ADD COLUMN pattern int NULL, +ADD COLUMN value_type int NULL; diff --git a/resource/sqlupgrade/Mysql/sql202308080503.sql b/resource/sqlupgrade/Mysql/sql202308080503.sql new file mode 100644 index 000000000..8ea1db64c --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202308080503.sql @@ -0,0 +1,12 @@ +CREATE TABLE hrsa_salary_bill_item_name ( + id bigint PRIMARY KEY, + salary_template_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + salary_item_show_name varchar(255)NOT NULL, + salary_bill_type int NOT NULL, + creator bigint NOT NULL, + create_time datetime NOT NULL , + update_time datetime NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NOT NULL +) ; diff --git a/resource/sqlupgrade/Mysql/sql202308090203.sql b/resource/sqlupgrade/Mysql/sql202308090203.sql new file mode 100644 index 000000000..34eed003a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202308090203.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_social_archives +MODIFY COLUMN employee_id bigint; +ALTER TABLE hrsa_fund_archives +MODIFY COLUMN employee_id bigint; +ALTER TABLE hrsa_other_archives +MODIFY COLUMN employee_id bigint; + +ALTER TABLE hrsa_insurance_base_info ADD employee_type int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202308080403.sql b/resource/sqlupgrade/Oracle/sql202308080403.sql new file mode 100644 index 000000000..c34571ba4 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202308080403.sql @@ -0,0 +1,11 @@ +alter table hrsa_salary_sob_item + add rounding_mode NUMBER null +/ + +alter table hrsa_salary_sob_item + add pattern NUMBER null +/ + +alter table hrsa_salary_sob_item + add value_type NUMBER null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202308080503.sql b/resource/sqlupgrade/Oracle/sql202308080503.sql new file mode 100644 index 000000000..6ac9927fd --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202308080503.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_bill_item_name( + id NUMBER(38,0) PRIMARY KEY NOT NULL, + salary_template_id NUMBER(38,0) NOT NULL, + salary_item_id NUMBER(38,0) NOT NULL, + salary_item_show_name VARCHAR2(255) NOT NULL, + salary_bill_type NUMBER NOT NULL, + create_time DATE DEFAULT sysdate, + update_time DATE DEFAULT sysdate, + creator NUMBER(38,0) NOT NULL, + delete_type NUMBER NOT NULL, + tenant_key VARCHAR2(255) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202308090203.sql b/resource/sqlupgrade/Oracle/sql202308090203.sql new file mode 100644 index 000000000..f901fc9a3 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202308090203.sql @@ -0,0 +1,36 @@ +ALTER Table hrsa_social_archives Add employee_id2 NUMBER(38,0) +/ +update hrsa_social_archives a SET a.employee_id2=a.employee_id +/ +alter table hrsa_social_archives drop column employee_id +/ +alter table hrsa_social_archives rename column employee_id2 to employee_id +/ +alter table hrsa_social_archives MODIFY (employee_id not null) +/ + +ALTER Table hrsa_fund_archives Add employee_id2 NUMBER(38,0) +/ +update hrsa_fund_archives a SET a.employee_id2=a.employee_id +/ +alter table hrsa_fund_archives drop column employee_id +/ +alter table hrsa_fund_archives rename column employee_id2 to employee_id +/ +alter table hrsa_fund_archives MODIFY (employee_id not null) +/ + +ALTER Table hrsa_other_archives Add employee_id2 NUMBER(38,0) +/ +update hrsa_other_archives a SET a.employee_id2=a.employee_id +/ +alter table hrsa_other_archives drop column employee_id +/ +alter table hrsa_other_archives rename column employee_id2 to employee_id +/ +alter table hrsa_other_archives MODIFY (employee_id not null) +/ + + +ALTER TABLE hrsa_insurance_base_info ADD employee_type number +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202308080403.sql b/resource/sqlupgrade/PG/sql202308080403.sql new file mode 100644 index 000000000..752565503 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202308080403.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_sob_item +ADD COLUMN rounding_mode int NULL, +ADD COLUMN pattern int NULL, +ADD COLUMN value_type int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202308080503.sql b/resource/sqlupgrade/PG/sql202308080503.sql new file mode 100644 index 000000000..ded2d46b0 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202308080503.sql @@ -0,0 +1,12 @@ +CREATE TABLE hrsa_salary_bill_item_name ( + id bigint PRIMARY KEY, + salary_template_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + salary_item_show_name varchar(255)NOT NULL, + salary_bill_type int NOT NULL, + creator bigint NOT NULL, + create_time TIMESTAMP NOT NULL , + update_time TIMESTAMP NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NOT NULL +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202308090203.sql b/resource/sqlupgrade/PG/sql202308090203.sql new file mode 100644 index 000000000..d14a9e4c9 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202308090203.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_social_archives +ALTER employee_id TYPE bigint; +ALTER TABLE hrsa_fund_archives +ALTER employee_id TYPE bigint; +ALTER TABLE hrsa_other_archives +ALTER employee_id TYPE bigint; + +ALTER TABLE hrsa_insurance_base_info ADD employee_type int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202308080403.sql b/resource/sqlupgrade/SQLServer/sql202308080403.sql new file mode 100644 index 000000000..c8a9e79bf --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202308080403.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_sob_item +ADD rounding_mode int NULL, +pattern int NULL, +value_type int NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202308080503.sql b/resource/sqlupgrade/SQLServer/sql202308080503.sql new file mode 100644 index 000000000..063d85a76 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202308080503.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_salary_bill_item_name ( + id bigint PRIMARY KEY, + salary_template_id bigint NOT NULL, + salary_item_id bigint NOT NULL, + salary_item_show_name varchar(255)NOT NULL, + salary_bill_type int NOT NULL, + creator bigint NOT NULL, + create_time datetime NOT NULL , + update_time datetime NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NOT NULL +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202308090203.sql b/resource/sqlupgrade/SQLServer/sql202308090203.sql new file mode 100644 index 000000000..8c03dcf48 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202308090203.sql @@ -0,0 +1,13 @@ +ALTER TABLE hrsa_social_archives +ALTER COLUMN employee_id bigint +GO +ALTER TABLE hrsa_fund_archives +ALTER COLUMN employee_id bigint +GO +ALTER TABLE hrsa_other_archives +ALTER COLUMN employee_id bigint +GO + + +ALTER TABLE hrsa_insurance_base_info ADD employee_type int NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202308090203.sql b/resource/sqlupgrade/ST/sql202308090203.sql new file mode 100644 index 000000000..ee8394990 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202308090203.sql @@ -0,0 +1,48 @@ +ALTER Table hrsa_social_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_social_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_social_archives drop column employee_id; +/ + +alter table hrsa_social_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_social_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_fund_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_fund_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_fund_archives drop column employee_id; +/ + +alter table hrsa_fund_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_fund_archives MODIFY (employee_id not null); +/ + +ALTER Table hrsa_other_archives Add employee_id2 NUMBER(38,0); +/ + +update hrsa_other_archives a SET a.employee_id2=a.employee_id; +/ + +alter table hrsa_other_archives drop column employee_id; +/ + +alter table hrsa_other_archives rename column employee_id2 to employee_id; +/ + +alter table hrsa_other_archives MODIFY (employee_id not null); +/ + +ALTER TABLE hrsa_insurance_base_info ADD employee_type number; +/ + diff --git a/src/com/engine/salary/action/InitSalaryAction.java b/src/com/engine/salary/action/InitSalaryAction.java index 25e0669c8..4b2b0472b 100644 --- a/src/com/engine/salary/action/InitSalaryAction.java +++ b/src/com/engine/salary/action/InitSalaryAction.java @@ -77,7 +77,7 @@ public class InitSalaryAction implements Action { List errorNotice = (List) map.get("errorNotice"); if (CollectionUtils.isNotEmpty(errorNotice)) { - log.error("调薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + log.error("定薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); List> excelComments = (List>) map.get("errorNotice"); StringBuilder message = new StringBuilder(""); for (Map comments : excelComments) { @@ -87,7 +87,7 @@ public class InitSalaryAction implements Action { return FAILURE_AND_CONTINUE; } } catch (Exception e) { - log.error("调薪异常", e); + log.error("定薪异常", e); requestInfo.getRequestManager().setMessage(e.getMessage()); return FAILURE_AND_CONTINUE; } diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index d0f59f3f5..17d925fd0 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -672,11 +672,10 @@ public class SIArchivesBiz extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542533, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } -// List oldOtherInfoList = otherSchemeMapper.getOtherByEmployeeId(Collections.singletonList(param.getEmployeeId())); - List oldOtherInfoList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build()); + List otherIds = new ArrayList(); + otherIds.add(param.getId()); + List oldOtherInfoList = otherSchemeMapper.getOtherById(otherIds); + if (oldOtherInfoList.size() == 1) { InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); InsuranceArchivesOtherSchemePO updateOtherInfo = @@ -704,7 +703,48 @@ public class SIArchivesBiz extends Service { otherSchemeMapper.updateById(updateOtherInfo); sqlSession.commit(); } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),543879, "该员工已关联的其他福利档案不存在或存在多条,请处理后再重复当前操作!")); + otherSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesOtherSchemePO insertOtherInfo = InsuranceArchivesOtherSchemePO.builder() + .otherSchemeId(param.getOtherSchemeId()) + .otherStartTime(StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) + .underTake(param.getUnderTake()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .welfareType(paramReq.getWelfareType().getValue()) + .otherEndTime(StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) + .employeeId(param.getEmployeeId()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(new Date()) + .updateTime(new Date()) + .nonPayment(param.getNonPayment()) + .creator(employeeId) + .paymentOrganization(param.getPaymentOrganization()) + .otherPaymentBaseString(paramReq.getPaymentForm()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString())) { + throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + } + encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class, user); + otherSchemeMapper.insert(insertOtherInfo); + sqlSession.commit(); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List otherInfos = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + baseInfoPO.setOtherArchivesId(otherInfos.get(0).getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + } + + } } finally { @@ -730,11 +770,10 @@ public class SIArchivesBiz extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542531, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } -// List oldFundInfoList = fundSchemeMapper.getFundByEmployeeId(Collections.singletonList(param.getEmployeeId())); - List oldFundInfoList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build()); + List fundIds = new ArrayList(); + fundIds.add(param.getId()); + List oldFundInfoList = fundSchemeMapper.getFundById(fundIds); + if (oldFundInfoList.size() == 1) { InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); InsuranceArchivesFundSchemePO updateFundInfo = InsuranceArchivesFundSchemePO.builder() @@ -764,7 +803,49 @@ public class SIArchivesBiz extends Service { sqlSession.commit(); } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),543881, "该员工已关联的公积金档案不存在或存在多条,请处理后再重复当前操作!")); + fundSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesFundSchemePO insertFundInfo = InsuranceArchivesFundSchemePO.builder() + .fundSchemeId(param.getFundSchemeId()) + .fundAccount(param.getFundAccount()) + .fundEndTime(StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) + .fundStartTime(StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) + .fundPaymentBaseString(paramReq.getPaymentForm()) + .supplementFundAccount(param.getSupplementFundAccount()) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .underTake(param.getUnderTake()) + .paymentOrganization(param.getPaymentOrganization()) + .createTime(new Date()) + .updateTime(new Date()) + .welfareType(paramReq.getWelfareType().getValue()) + .employeeId(param.getEmployeeId()) + .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString())) { + throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + } + encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class, user); + fundSchemeMapper.insert(insertFundInfo); + sqlSession.commit(); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List fundInfos = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + baseInfoPO.setFundArchivesId(fundInfos.get(0).getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + } + } } finally { @@ -797,11 +878,9 @@ public class SIArchivesBiz extends Service { // socialSchemeMapper.batchDeleteByEmployeeIds(Collections.singletonList(param.getEmployeeId())); //查询已有数据 -// List oldSocialInfoList = socialSchemeMapper.getSocialByEmployeeId(Collections.singletonList(param.getEmployeeId())); - List oldSocialInfoList = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() - .employeeId(param.getEmployeeId()) - .paymentOrganization(param.getPaymentOrganization()) - .build()); + List socialIds = new ArrayList(); + socialIds.add(param.getId()); + List oldSocialInfoList = socialSchemeMapper.getSocialById(socialIds); //组装新数据 if (oldSocialInfoList.size() == 1) { InsuranceArchivesSocialSchemePO oldSocialInfo = oldSocialInfoList.get(0); @@ -833,7 +912,49 @@ public class SIArchivesBiz extends Service { sqlSession.commit(); } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),543883, "该员工已关联的社保档案不存在或存在多条,请处理后再重复当前操作!")); + socialSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + //新建社保档案,并关联主表 + InsuranceArchivesSocialSchemePO insertSocialInfo = + InsuranceArchivesSocialSchemePO.builder() + .welfareType(paramReq.getWelfareType().getValue()) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .socialPaymentBaseString(paramReq.getPaymentForm()) + .socialSchemeId(param.getSocialSchemeId()) + .socialEndTime(StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) + .socialStartTime(StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) + .creator(employeeId) + .nonPayment(param.getNonPayment()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeId(param.getEmployeeId()) + .createTime(new Date()) + .updateTime(new Date()) + .underTake(param.getUnderTake()) + .socialAccount(param.getSchemeAccount()) + .paymentOrganization(param.getPaymentOrganization()) + .build(); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString())) { + throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + } + encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class, user); + socialSchemeMapper.insert(insertSocialInfo); + sqlSession.commit(); + + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null) { + List socialInfos = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(param.getEmployeeId()) + .paymentOrganization(param.getPaymentOrganization()) + .build()); + baseInfoPO.setSocialArchivesId(socialInfos.get(0).getId()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } else { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); + } + } } finally { @@ -969,6 +1090,8 @@ public class SIArchivesBiz extends Service { request.setTaxAgentId(param.getTaxAgentId()); + request.setExtWelArchiveList(param.isExtWelArchiveList()); + apidatas = listPageEmployeePOS(request, operateId); return apidatas; @@ -1004,7 +1127,11 @@ public class SIArchivesBiz extends Service { Collection taxAgentIds = param.getTaxAgentIds(); log.info("从数据库获取档案列表数据开始"); sw.start("获取福利档案列表数据"); - page = socialSchemeMapper.queryEmployeeList(param); + if (param.isExtWelArchiveList()) { + page = socialSchemeMapper.queryExtEmployeeList(param); + } else { + page = socialSchemeMapper.queryEmployeeList(param); + } sw.stop(); log.info("从数据库获取档案列表数据完成!"); page = page.stream().filter(f -> @@ -1020,7 +1147,11 @@ public class SIArchivesBiz extends Service { } else { log.info("从数据库获取档案列表数据开始"); sw.start("获取档案列表数据"); - page = socialSchemeMapper.queryEmployeeList(param); + if (param.isExtWelArchiveList()) { + page = socialSchemeMapper.queryExtEmployeeList(param); + } else { + page = socialSchemeMapper.queryEmployeeList(param); + } sw.stop(); log.info("从数据库获取档案列表数据完成!"); pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), @@ -1091,7 +1222,7 @@ public class SIArchivesBiz extends Service { list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),1933,"工号"), "jobNum")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期"), "companystartdate")); - list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),543192, "合同到期日期"), "dismissdate")); +// list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),543192, "合同到期日期"), "dismissdate")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),542267, "社保方案名称"), "socialName")); titleMap.get(WelfareTypeEnum.SOCIAL_SECURITY.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); diff --git a/src/com/engine/salary/biz/SalarySobItemHideBiz.java b/src/com/engine/salary/biz/SalarySobItemHideBiz.java index af3cb0142..5aa0f5a77 100644 --- a/src/com/engine/salary/biz/SalarySobItemHideBiz.java +++ b/src/com/engine/salary/biz/SalarySobItemHideBiz.java @@ -10,11 +10,11 @@ import java.util.List; public class SalarySobItemHideBiz { - public List listSome(SalarySobItemHidePO salarySobPO) { + public List listHideItemIds(SalarySobItemHidePO salarySobPO) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { SalarySobItemHideMapper mapper = sqlSession.getMapper(SalarySobItemHideMapper.class); - return mapper.getById(salarySobPO); + return mapper.listHideItemIds(salarySobPO); } finally { sqlSession.close(); } @@ -53,4 +53,14 @@ public class SalarySobItemHideBiz { sqlSession.close(); } } + + public List listSome(SalarySobItemHidePO po) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalarySobItemHideMapper mapper = sqlSession.getMapper(SalarySobItemHideMapper.class); + return mapper.listSome(po); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/entity/extemp/param/ExtEmpImportParam.java b/src/com/engine/salary/entity/extemp/param/ExtEmpImportParam.java new file mode 100644 index 000000000..f30f4f758 --- /dev/null +++ b/src/com/engine/salary/entity/extemp/param/ExtEmpImportParam.java @@ -0,0 +1,22 @@ +package com.engine.salary.entity.extemp.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: sy + * @Description: 非系统人员导入参数 + * @Date: 2023/7/26 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ExtEmpImportParam { + //上传文件id + @DataCheck(require = true,message = "imageId为空") + String imageId; +} diff --git a/src/com/engine/salary/entity/hrm/DeptInfo.java b/src/com/engine/salary/entity/hrm/DeptInfo.java index 0a6e9d0c8..12f2f61f9 100644 --- a/src/com/engine/salary/entity/hrm/DeptInfo.java +++ b/src/com/engine/salary/entity/hrm/DeptInfo.java @@ -25,4 +25,9 @@ public class DeptInfo { * 名称 */ private String name; + + /** + * 所属分部id + */ + private Long subcompanyid1; } diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillItemNameBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillItemNameBO.java new file mode 100644 index 000000000..ce1deaf67 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillItemNameBO.java @@ -0,0 +1,30 @@ +package com.engine.salary.entity.salaryBill.bo; + +import com.engine.salary.entity.salaryBill.dto.SalaryBillItemNameDTO; +import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemNameBO + * @date 2023/07/19 9:19 + * @description 工资单薪资项目展示名称 + */ +public class SalaryBillItemNameBO { + + public static List convert2ListDTO(List SalaryBillItemNamePOList){ + if (CollectionUtils.isEmpty(SalaryBillItemNamePOList)) { + return Collections.emptyList(); + } + return SalaryBillItemNamePOList.stream() + .map(po -> SalaryBillItemNameDTO.builder() + .salaryItemId(po.getSalaryItemId()) + .salaryItemShowName(po.getSalaryItemShowName()) + .build()) + .collect(Collectors.toList()); + } +} diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java index dba599a59..7a7f020ff 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryTemplateBO.java @@ -121,6 +121,8 @@ public class SalaryTemplateBO { .id(String.valueOf(i.getSalaryItemId())) .salaryItemId(String.valueOf(i.getSalaryItemId())) .name(i.getName()) + .salaryItemShowName(i.getName()) + .originName(i.getName()) .sortedIndex(i.getSortedIndex()) .build()); }); diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillItemNameDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillItemNameDTO.java new file mode 100644 index 000000000..4deae25f5 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillItemNameDTO.java @@ -0,0 +1,30 @@ +package com.engine.salary.entity.salaryBill.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemNameDTO + * @date 2023/07/19 9:21 + * @description 工资单薪资项目展示名称 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryBillItemNameDTO { + + /** + * 薪资项目id + */ + private Long salaryItemId; + + + /** + * 工资单展示名称 + */ + private String salaryItemShowName; +} diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java index 5a19f39e9..0e90569db 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateReplenishFormDTO.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; +import java.util.Map; /** * @author Harryxzy @@ -26,4 +27,7 @@ public class SalaryTemplateReplenishFormDTO { // 薪资项目设置") private List replenishSalaryTemplateSalaryItemSet; + // 工资单项目名称设置 + private Map salaryBillItemNameSet; + } diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java index bedf72566..858db75a1 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java @@ -26,9 +26,15 @@ public class SalaryTemplateSalaryItemListDTO { // 薪资项目值") private String salaryItemValue; -// 薪资项目名称") + // 模板展示名称 salaryItemShowName+(originName) private String name; + // 薪资项目修改后展示名称 + private String salaryItemShowName; + + // 薪资项目名称原始值 + private String originName; + // 顺序") private Integer sortedIndex; } diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java index 364cb8a63..43e52905b 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateShowFormDTO.java @@ -29,4 +29,10 @@ public class SalaryTemplateShowFormDTO { // 薪资项目设置") private List salaryTemplateSalaryItemSet; + + // 补发工资薪资项目设置") + private List replenishSalaryTemplateSalaryItemSet; + + // 工资单项目名称设置 + private Map salaryBillItemNameSet; } diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBillItemNameSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBillItemNameSaveParam.java new file mode 100644 index 000000000..9674df028 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBillItemNameSaveParam.java @@ -0,0 +1,46 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.*; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemNameSaveParam + * @date 2023/07/19 10:20 + * @description 设置工资单项目展示名参数 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryBillItemNameSaveParam { + /** + * 工资单模板id + */ + private Long salaryTemplateId; + + /** + * 工资单类型。0:正常工资单、1:补发工资单 + */ + private Integer salaryBillType; + + private List itemShowNameSetting; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class itemShowNameSetting { + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 工资单展示名称 + */ + private String salaryItemShowName; + } + +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryGroupQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryGroupQueryParam.java index 8bf974208..36d8ab498 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryGroupQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryGroupQueryParam.java @@ -23,4 +23,9 @@ public class SalaryBillSalaryGroupQueryParam extends BaseQueryParam { * 前端已有的分组id */ private List existSalaryGroupIds; + + /** + * 工资单模板id + */ + private Long salaryTemplateId; } diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryItemQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryItemQueryParam.java index ee0be17f7..26c819771 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryItemQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBillSalaryItemQueryParam.java @@ -19,4 +19,6 @@ public class SalaryBillSalaryItemQueryParam extends BaseQueryParam { private Boolean isReplenish; private List existSalaryItemIds; + + private Long salaryTemplateId; } diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java index c398e8e09..8e4cef165 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java @@ -105,6 +105,8 @@ public class SalaryTemplateSaveParam { */ private String feedbackUrl; + List salaryBillItemNameSetting; + public static void checkParam(SalaryTemplateSaveParam saveParam, User user) { if (saveParam.getSalarySobId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),544117,"薪资账套表的主键id必传;")); diff --git a/src/com/engine/salary/entity/salaryBill/po/SalaryBillItemNamePO.java b/src/com/engine/salary/entity/salaryBill/po/SalaryBillItemNamePO.java new file mode 100644 index 000000000..5dcf872d6 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/po/SalaryBillItemNamePO.java @@ -0,0 +1,71 @@ +package com.engine.salary.entity.salaryBill.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemName + * @date 2023/07/18 15:55 + * @description 工资单薪资项目展示名称 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryBillItemNamePO { + private Long id; + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 薪资项目展示名称 + */ + private String salaryItemShowName; + + /** + * 工资单模板id + */ + private Long salaryTemplateId; + + /** + * 工资单类型。0:正常工资单、1:补发工资单 + */ + private Integer salaryBillType; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 创建人 + */ + private Long creator; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; + + /** + * 租户ID + */ + private String tenantKey; + + //主键id集合 + private Collection ids; +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java index f218318ff..eb0f968eb 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java @@ -4,11 +4,13 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; @@ -33,9 +35,13 @@ public class SalaryAcctFormulaBO { * @param salaryItem * @param salarySobBackItems 薪资账套回算项目List * @param salarySobBackItemMap 薪资账套回算项目Map + * @param salaryItemIdKeySalarySobItemPOMap 薪资账套下薪资项目Map * @return */ - public static String roundResultValue(String value, SalaryItemPO salaryItem, List salarySobBackItems, Map salarySobBackItemMap) { + public static String roundResultValue(String value, SalaryItemPO salaryItem, + List salarySobBackItems, + Map salarySobBackItemMap, + Map salaryItemIdKeySalarySobItemPOMap) { // 值为空,不需要四舍五入 if (StringUtils.isEmpty(value) || salaryItem == null) { return StringUtils.EMPTY; @@ -45,10 +51,13 @@ public class SalaryAcctFormulaBO { if (dataTypeEnum == SalaryDataTypeEnum.STRING) { return value; } - Integer salaryItemRoundingMode = salaryItem.getRoundingMode(); - Integer salaryItemPattern = salaryItem.getPattern(); - // 薪资项目是回算项目 - if(salarySobBackItems != null && salarySobBackItems.size() > 0 && salarySobBackItemMap.containsKey(salaryItem.getId())){ + // 获取薪资账套副本中的舍入规则和保留位数,拿不到再去薪资项目中取 + Integer salaryItemRoundingMode = Optional.ofNullable(salaryItemIdKeySalarySobItemPOMap.get(salaryItem.getId())).map(SalarySobItemPO::getRoundingMode) + .orElse(salaryItem.getRoundingMode()); + Integer salaryItemPattern = Optional.ofNullable(salaryItemIdKeySalarySobItemPOMap.get(salaryItem.getId())).map(SalarySobItemPO::getPattern) + .orElse(salaryItem.getPattern()); + if(CollectionUtils.isNotEmpty(salarySobBackItems) && salarySobBackItemMap.containsKey(salaryItem.getId())){ + // 薪资项目是回算项目 salaryItemRoundingMode = salarySobBackItemMap.get(salaryItem.getId()).getRoundingMode(); salaryItemPattern = salarySobBackItemMap.get(salaryItem.getId()).getPattern(); } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAccEmployeeListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAccEmployeeListDTO.java index ae56c0c51..cff4b082e 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAccEmployeeListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAccEmployeeListDTO.java @@ -66,6 +66,6 @@ public class SalaryAccEmployeeListDTO { private String hireDate; //离职日期 - @TableTitle(title = "离职日期", dataIndex = "dismissDate", key = "dismissDate", labelId = 15961) +// @TableTitle(title = "离职日期", dataIndex = "dismissDate", key = "dismissDate", labelId = 15961) private String dismissDate; } diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java index 7c73ac2b1..4a7cacaa9 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java @@ -85,7 +85,7 @@ public class SalaryArchiveBO { columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),542346, "起始发薪日期"), "payStartDate")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),542347, "最后发薪日期"), "payEndDate")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期"), "companystartdate").setDisplay(WeaBoolAttr.FALSE)); - columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期"), "dismissdate").setDisplay(WeaBoolAttr.FALSE)); +// columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期"), "dismissdate").setDisplay(WeaBoolAttr.FALSE)); for (SalaryItemPO salaryItem : salaryItems) { //获取name(多语言) String name = ""; diff --git a/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java b/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java index 90e09a558..d8304094e 100644 --- a/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java +++ b/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java @@ -3,9 +3,11 @@ package com.engine.salary.entity.salaryformula.bo; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -18,24 +20,36 @@ import java.util.stream.Collectors; **/ public class SalaryFormulaBO { - public static List convert2DTO(List expressFormulas) { + public static List convert2DTO(List expressFormulas, Map returnTypeMap) { if (CollectionUtils.isEmpty(expressFormulas)) { return Collections.emptyList(); } return expressFormulas.stream() - .map(e -> ExpressFormulaDTO.builder() - .id(e.getId()) - .name(e.getName()) - .formula(e.getFormula()) - .description(e.getDescription()) - .extendParam(e.getExtendParam()) - .module(e.getModule()) - .parameters(e.getParameters()) - .referenceType(e.getReferenceType()) - .returnType(e.getReturnType()) - .useFor(e.getUseFor()) - .validateType(e.getValidateType()) - .build()) + .map(e -> { + String referenceType = returnTypeMap.getOrDefault(e.getId(), ""); + ExpressFormulaDTO build = ExpressFormulaDTO.builder() + .id(e.getId()) + .name(e.getName()) + .formula(e.getFormula()) + .description(e.getDescription()) + .extendParam(e.getExtendParam()) + .module(e.getModule()) + .parameters(e.getParameters()) + .referenceType(e.getReferenceType()) + .returnType(e.getReturnType()) + .useFor(e.getUseFor()) + .validateType(e.getValidateType()) + .build(); + if (StringUtils.isNotBlank(referenceType) && !StringUtils.equals(e.getReferenceType(), referenceType)) { + // 更换了取值方式,返回空对象进行前端处理 + build.setExtendParam(""); + build.setFormula(""); + build.setParameters(Collections.emptyList()); + build.setReferenceType(referenceType); + return build; + } + return build; + }) .collect(Collectors.toList()); } } diff --git a/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaDetailQueryParam.java b/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaDetailQueryParam.java new file mode 100644 index 000000000..aff64ddaa --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaDetailQueryParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.salaryformula.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Harryxzy + * @ClassName SalaryFormulaDetailQueryParam + * @date 2023/07/25 10:17 + * @description + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryFormulaDetailQueryParam { + + // 公式id + private Long formulaId; + + // 取值类型 sql/formula + private String returnType; + +} diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 3ac9bd80a..01e9f28c3 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -161,18 +161,23 @@ public class SalaryItemBO { .useInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) .useDefault(salaryItemPO.getUseDefault()) .hideDefault(salaryItemPO.getHideDefault() == null ? 0 : salaryItemPO.getHideDefault()) - .roundingMode(Optional.ofNullable(salaryRoundingModeEnum) + .roundingMode(salaryItemPO.getRoundingMode()) + .roundingModeShowValue(Optional.ofNullable(salaryRoundingModeEnum) .map(e -> SalaryI18nUtil.getI18nLabel(user.getLanguage(), e.getLabelId(), e.getDefaultLabel())) .orElse(StringUtils.EMPTY)) .pattern(salaryItemPO.getPattern()) - .valueType(Optional.ofNullable(salaryValueTypeEnum) + .valueType(salaryItemPO.getValueType()) + .valueTypeShowValue(Optional.ofNullable(salaryValueTypeEnum) .map(e -> SalaryI18nUtil.getI18nLabel(user.getLanguage(), e.getLabelId(), e.getDefaultLabel())) .orElse(StringUtils.EMPTY)) - .dataType(Optional.ofNullable(salaryDataTypeEnum) + .dataType(salaryItemPO.getDataType()) + .dataTypeShowValue(Optional.ofNullable(salaryDataTypeEnum) .map(e -> SalaryI18nUtil.getI18nLabel(user.getLanguage(), e.getLabelId(), e.getDefaultLabel())) .orElse(StringUtils.EMPTY)) .formulaId(salaryItemPO.getFormulaId()) .formulaContent(formulaMap.getOrDefault(salaryItemPO.getFormulaId(),"")) + .originFormulaContent(salaryValueTypeEnum.getValue() == SalaryValueTypeEnum.FORMULA.getValue() ? formulaMap.getOrDefault(salaryItemPO.getFormulaId(),"") : "") + .originSqlContent(salaryValueTypeEnum.getValue() == SalaryValueTypeEnum.SQL.getValue() ? formulaMap.getOrDefault(salaryItemPO.getFormulaId(),"") : "") .taxDeclarationColumn(buildTaxDeclarationColumn(salaryItemPO.getCode(), user)) .canDelete(true) .canEdit(openFormulaForcedEditing ||Objects.equals(salaryItemPO.getCanEdit(), NumberUtils.INTEGER_ONE)) diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java index c00b85844..5101bf2e4 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java @@ -75,6 +75,11 @@ public class SalaryItemFormDTO { //公式内容") private String formulaContent; + // 用于前端展示 公式原始内容 + private String originFormulaContent; + // 用于前端展示 原始sql + private String originSqlContent; + //备注") private String description; diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java index 82bbea667..4e021b411 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java @@ -55,9 +55,12 @@ public class SalaryItemSobListDTO { private Integer hideDefault; //进位规则 - @SalaryTableColumn(text = "进位规则", width = "10%", column = "roundingMode",transmethod = "com.engine.salary.transmethod.TransMethod.roundingMode") - @TableTitle(title = "进位规则",dataIndex = "roundingMode",key = "roundingMode", labelId = 543176) - private String roundingMode; + @SalaryTableColumn(text = "进位规则", width = "10%", column = "roundingModeShowValue",transmethod = "com.engine.salary.transmethod.TransMethod.roundingMode") + @TableTitle(title = "进位规则",dataIndex = "roundingModeShowValue",key = "roundingModeShowValue", labelId = 543176) + private String roundingModeShowValue; + + private Integer roundingMode; + //保留小数位 @SalaryTableColumn(text = "保留小数位", width = "10%", column = "pattern") @@ -65,15 +68,19 @@ public class SalaryItemSobListDTO { private Integer pattern; //取值方式 - @SalaryTableColumn(text = "取值方式", width = "10%", column = "valueType",transmethod = "com.engine.salary.transmethod.TransMethod.datasource") - @TableTitle(title = "取值方式",dataIndex = "valueType",key = "valueType", labelId = 543297) - private String valueType; + @SalaryTableColumn(text = "取值方式", width = "10%", column = "valueTypeShowValue",transmethod = "com.engine.salary.transmethod.TransMethod.datasource") + @TableTitle(title = "取值方式",dataIndex = "valueTypeShowValue",key = "valueTypeShowValue", labelId = 543297) + private String valueTypeShowValue; + + private Integer valueType; /** * @see SalaryDataTypeEnum */ - @SalaryTableColumn(text = "字段类型", width = "10%", column = "dataType",transmethod = "com.engine.salary.transmethod.TransMethod.dataType") - @TableTitle(title = "字段类型",dataIndex = "dataType",key = "dataType", labelId = 84113) + @SalaryTableColumn(text = "字段类型", width = "10%", column = "dataTypeShowValue",transmethod = "com.engine.salary.transmethod.TransMethod.dataType") + @TableTitle(title = "字段类型",dataIndex = "dataTypeShowValue",key = "dataTypeShowValue", labelId = 84113) + private String dataTypeShowValue; + private String dataType; //公式id @@ -86,6 +93,11 @@ public class SalaryItemSobListDTO { @TableTitle(title = "个税申报表对应字段",dataIndex = "taxDeclarationColumn",key = "taxDeclarationColumn", labelId = 544391) private String taxDeclarationColumn; + // 用于前端展示 公式原始内容 + private String originFormulaContent; + + // 用于前端展示 原始sql + private String originSqlContent; //备注 @SalaryTableColumn(text = "备注", width = "10%", column = "description") @TableTitle(title = "备注",dataIndex = "description",key = "description", labelId = 536726) diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java index f43f8e6d9..069195d6c 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.po.*; +import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -125,17 +126,22 @@ public class SalarySobItemAggregateBO { String name = ""; name = salaryItemPO.getLabelId() != null ? SalaryI18nUtil.getI18nLabel(user.getLanguage(),salaryItemPO.getLabelId(),salaryItemPO.getName()) : salaryItemPO.getName(); + Integer valueType = Optional.ofNullable(salarySobItemPO.getValueType()).orElse(salaryItemPO.getValueType()); items.add(SalarySobItemDTO.builder() .id(salarySobItemPO.getId()) .salarySobId(salarySob.getId()) .salaryItemGroupId(k) .salaryItemId(salaryItemPO.getId()) - .dateType(salaryItemPO.getDataType()) - .valueType(salaryItemPO.getValueType()) + .dataType(salaryItemPO.getDataType()) + .valueType(valueType) + .roundingMode(Optional.ofNullable(salarySobItemPO.getRoundingMode()).orElse(salaryItemPO.getRoundingMode())) + .pattern(Optional.ofNullable(salarySobItemPO.getPattern()).orElse(salaryItemPO.getPattern())) .name(name) .itemHide(salarySobItemPO.getItemHide()) .formulaId(salarySobItemPO.getFormulaId()) .formulaContent(formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), "")) + .originFormulaContent(valueType == SalaryValueTypeEnum.FORMULA.getValue() ? formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), "") : "") + .originSqlContent(valueType == SalaryValueTypeEnum.SQL.getValue() ? formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), "") : "") .taxDeclarationColumn(SalaryItemBO.buildTaxDeclarationColumn(salaryItemPO.getCode(), user)) .sortedIndex(salarySobItemPO.getSortedIndex()) .canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1)) @@ -180,7 +186,7 @@ public class SalarySobItemAggregateBO { .salarySobId(salarySob.getId()) .salaryItemId(salaryItem.getId()) .salaryItemGroupId(0L) - .dateType(salaryItem.getDataType()) + .dataType(salaryItem.getDataType()) .name(name) .formulaId(salarySobBackItem.getFormulaId()) .formulaContent(formulaMap.getOrDefault(salarySobBackItem.getFormulaId(), SalaryI18nUtil.getI18nLabel(user.getLanguage(),554, "输入"))) diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java index d50c5be97..c173ae015 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java @@ -63,7 +63,7 @@ public class SalarySobItemDTO { //取值方式 @see SalaryValueTypeEnum private Integer valueType; - private String dateType; + private String dataType; //数据来源(展示名称) private String dataSource; @@ -77,6 +77,12 @@ public class SalarySobItemDTO { //公式内容 private String formulaContent; + // 用于前端展示 公式原始内容 + private String originFormulaContent; + // 用于前端展示 原始sql + private String originSqlContent; + + //个税申报表对应字段 private String taxDeclarationColumn; @@ -94,5 +100,15 @@ public class SalarySobItemDTO { @JsonSerialize(using = ToStringSerializer.class) private Long itemHide; + /** + * 进位规则 + */ + private Integer roundingMode; + + /** + * 保留小数位数 + */ + private Integer pattern; + private Integer labelId; } diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java new file mode 100644 index 000000000..240625524 --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java @@ -0,0 +1,86 @@ +package com.engine.salary.entity.salarysob.dto; + +import com.engine.salary.enums.SalaryRoundingModeEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.util.valid.DataCheck; +import com.engine.salary.util.valid.RuntimeTypeEnum; +import com.engine.salary.util.valid.ValidTypeEnum; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 薪资账套-薪资项目表单 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class SalarySobItemFormDTO { + + //主键id") + @JsonSerialize(using = ToStringSerializer.class) + @DataCheck(require = true, runtime = {RuntimeTypeEnum.UPDATE}, message = "id不允许为空") + private Long id; + + //名称") + private String name; + + //核算时隐藏") + @DataCheck(require = true, runtime = {RuntimeTypeEnum.UPDATE}, message = "核算时隐藏不允许为空") + private Integer itemHide; + + //字段类型 + /** + * @see SalaryDataTypeEnum + */ + private String dataType; + + //舍入规则") + /** + * @see SalaryRoundingModeEnum + */ + @DataCheck(require = true, runtime = {RuntimeTypeEnum.UPDATE}, message = "舍入规则不允许为空") + private Integer roundingMode; + + //保留小数位") + @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 6, message = "小数位最多为6") + private Integer pattern; + + //取值方式") + /** + * @see SalaryValueTypeEnum + */ + @DataCheck(require = true, runtime = {RuntimeTypeEnum.UPDATE}, message = "取值方式不允许为空") + private Integer valueType; + + //公式") + private Long formulaId; + + //公式内容") + private String formulaContent; + + // 用于前端展示 公式原始内容 + private String originFormulaContent; + // 用于前端展示 原始sql + private String originSqlContent; + + //备注") + private String description; + + //是否可以编辑") + private Integer canEdit; + + + // 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 + private Integer useInEmployeeSalary; +} diff --git a/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java b/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java index a1ebb158d..e19856374 100644 --- a/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java +++ b/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java @@ -77,6 +77,22 @@ public class SalarySobItemSaveParam { private Long itemHide; private Boolean canDelete; + + /** + * 进位规则 + */ + private Integer roundingMode; + + /** + * 保留小数位数 + */ + private Integer pattern; + + /** + * 取值方式 + */ + private Integer valueType; + } @Data diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java index 0464d63f8..e3167bc23 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java @@ -1,5 +1,7 @@ package com.engine.salary.entity.salarysob.po; +import com.engine.salary.enums.SalaryRoundingModeEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -88,6 +90,26 @@ public class SalarySobItemPO { */ private Date updateTime; + /** + * 进位规则 + * + * @see SalaryRoundingModeEnum + */ + private Integer roundingMode; + + /** + * 保留的小数位数 + */ + private Integer pattern; + + /** + * 取值方式 + * + * @see SalaryValueTypeEnum + */ + private Integer valueType; + + //该分类是否隐藏(0不隐藏,1隐藏) private Long itemHide; diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java index 6b2ba7ac1..e44a15752 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceComparisonResultBO.java @@ -141,7 +141,7 @@ public class InsuranceComparisonResultBO { */ public static List> buildComparisonTableData(List accountExportPOS, List excelAccountExportPOS, Map schemeIdNameMap, User user) { - Map> excelResultMap = SalaryEntityUtil.group2Map(excelAccountExportPOS, ExcelAccountExportPO::getWorkcode); + Map> excelResultMap = SalaryEntityUtil.group2Map(excelAccountExportPOS, ExcelAccountExportPO::getEmployeeId); // Map> acctResultMap = SalaryEntityUtil.group2Map(accountExportPOS, AccountExportPO::getWorkcode); List paymentList = MapperProxyFactory.getProxy(TaxAgentMapper.class).listAll(); @@ -186,7 +186,7 @@ public class InsuranceComparisonResultBO { map.put("otherSchemeName", schemeIdNameMap.get(accountExportPO.getOtherSchemeId())); //线下值 - List excelResultValueList = excelResultMap.get(accountExportPO.getWorkcode()); + List excelResultValueList = excelResultMap.get(accountExportPO.getEmployeeId()); ExcelAccountExportPO excelAccountExportPO = new ExcelAccountExportPO(); if (excelResultValueList != null && excelResultValueList.size() == 1) { excelAccountExportPO = excelResultValueList.get(0); diff --git a/src/com/engine/salary/entity/siarchives/bo/InsuranceArchivesBaseInfoBO.java b/src/com/engine/salary/entity/siarchives/bo/InsuranceArchivesBaseInfoBO.java index f5cd11ee4..8c22ae58f 100644 --- a/src/com/engine/salary/entity/siarchives/bo/InsuranceArchivesBaseInfoBO.java +++ b/src/com/engine/salary/entity/siarchives/bo/InsuranceArchivesBaseInfoBO.java @@ -81,6 +81,7 @@ public class InsuranceArchivesBaseInfoBO { .creator(currentEmployeeId) .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeType(change.getEmployeeType()) .build()); } // 如果是删除 说明:如果有档案并且是在缴纳中才处理,没档案不用管 diff --git a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java index 276fd82b3..ab15e4b6a 100644 --- a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java +++ b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesListParam.java @@ -115,4 +115,9 @@ public class InsuranceArchivesListParam extends BaseQueryParam { * 人事状态 */ private List personnelStatuses; + + /** + * 是否是外部系统档案 + */ + private boolean extWelArchiveList; } diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java index 7e1b8e406..f05cc309d 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.siarchives.po; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -79,6 +80,13 @@ public class InsuranceArchivesBaseInfoPO { */ private String runStatus; + /** + * 人员类型,0或null组织架构,1非系统人员 + * + * @see DataCollectionEmployeeTypeEnum + */ + private Integer employeeType; + //---------条件------- private Collection ids; private Collection employeeIds; diff --git a/src/com/engine/salary/enums/SalaryValueTypeEnum.java b/src/com/engine/salary/enums/SalaryValueTypeEnum.java index 391803d54..64540d853 100644 --- a/src/com/engine/salary/enums/SalaryValueTypeEnum.java +++ b/src/com/engine/salary/enums/SalaryValueTypeEnum.java @@ -56,16 +56,17 @@ public enum SalaryValueTypeEnum implements BaseEnum { return null; } -// public static String getDefaultLabelByValue(Integer value) { -// if (value == null) { -// return ""; -// } -// SalaryValueTypeEnum[] enumAry = SalaryValueTypeEnum.values(); -// for (int i = 0; i < Arrays.asList(enumAry).size(); i++) { -// if (Integer.valueOf(enumAry[i].getValue()).equals(value)) { -// return enumAry[i].getDefaultLabel(); -// } -// } -// return ""; -// } + + public static String getDefaultLabelByValue(Integer value) { + if (value == null) { + return ""; + } + SalaryValueTypeEnum[] enumAry = SalaryValueTypeEnum.values(); + for (int i = 0; i < Arrays.asList(enumAry).size(); i++) { + if (Integer.valueOf(enumAry[i].getValue()).equals(value)) { + return enumAry[i].getDefaultLabel(); + } + } + return ""; + } } diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.java b/src/com/engine/salary/mapper/datacollection/EmployMapper.java index d73cef7ba..e2d0ada69 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.java +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.java @@ -87,4 +87,19 @@ public interface EmployMapper { List listHrmInfoByIdAndName(@Param("param") HrmQueryParam param); + + /** + * 根据部门名称查询部门 + */ + List getDeptInfosByName(String name); + + /** + * 根据分部名称查询分部 + */ + List getSubCompanyInfosByName(String name); + + /** + * 根据部门id查询部门 + */ + DeptInfo getDeptInfoById(Long id); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 9965888f7..0939b02d2 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -233,8 +233,10 @@ e.mobile as mobile, e.subcompanyid1 as subcompanyid, e.departmentid as departmentId, + d.DEPARTMENTNAME as departmentName, e.jobtitle as jobtitleId from hrmresource e + left join hrmdepartment d on e.departmentid = d.id where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) @@ -348,4 +350,26 @@ + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalaryBillItemNameMapper.java b/src/com/engine/salary/mapper/salarybill/SalaryBillItemNameMapper.java new file mode 100644 index 000000000..8833c47c6 --- /dev/null +++ b/src/com/engine/salary/mapper/salarybill/SalaryBillItemNameMapper.java @@ -0,0 +1,102 @@ +package com.engine.salary.mapper.salarybill; + +import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemNameMapper + * @date 2023/07/18 15:58 + * @description 工资单薪资项目展示名 + */ +public interface SalaryBillItemNameMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryBillItemNamePO salaryBillItemNamePO); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryBillItemNamePO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryBillItemNamePO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO); + + /** + * 修改,修改所有字段 + * + * @param salaryBillItemNamePO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryBillItemNamePO salaryBillItemNamePO); + + /** + * 修改,忽略null字段 + * + * @param salaryBillItemNamePO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO); + + /** + * 删除记录 + * + * @param id 待删除的记录id + * @return 返回影响行数 + */ + int delete(Long id); + + /** + * 批量更新 + * @param salaryBillItemNamePO + */ + void batchUpdate(@Param("collection") List salaryBillItemNamePO); + + /** + * 批量插入 + * @param salaryBillItemNamePO + */ + void batchInsert(@Param("collection") List salaryBillItemNamePO); + + /** + * 根据薪资项目、模板id、模板类型批量删除 + * @param salaryItemIds + * @param salaryTemplateId + * @param salaryBillType + */ + void deleteByItemIdsAndTemplateId(@Param("salaryItemIds") List salaryItemIds, @Param("salaryTemplateId") Long salaryTemplateId, @Param("salaryBillType") Integer salaryBillType); + + /** + * 根据idList删除 + * @param ids + */ + void deleteByIds(@Param("collection") List ids); + + /** + * 根据模板id删除 + * @param ids + */ + void deleteByTemplateIds(@Param("collection") Collection ids); +} diff --git a/src/com/engine/salary/mapper/salarybill/SalaryBillItemNameMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryBillItemNameMapper.xml new file mode 100644 index 000000000..d00b52f35 --- /dev/null +++ b/src/com/engine/salary/mapper/salarybill/SalaryBillItemNameMapper.xml @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + t.id + , t.salary_item_id + , t.salary_item_show_name + , t.salary_template_id + , t.salary_bill_type + , t.delete_type + , t.creator + , t.create_time + , t.update_time + , t.tenant_key + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_bill_item_name + + + + id, + + + salary_item_id, + + + salary_item_show_name, + + + salary_template_id, + + + salary_bill_type, + + + creator, + + + create_time, + + + update_time, + + + delete_type, + + + tenant_key, + + + + + #{id}, + + + #{salaryItemId}, + + + #{salaryItemShowName}, + + + #{salaryTemplateId}, + + + #{salaryBillType}, + + + #{creator}, + + + #{createTime}, + + + #{updateTime}, + + + #{deleteType}, + + + #{tenantKey}, + + + + + + INSERT INTO hrsa_salary_bill_item_name ( + id, + salary_template_id, + salary_item_id, + salary_item_show_name, + salary_bill_type, + creator, + create_time, + update_time, + delete_type, + tenant_key + ) + VALUES + + ( + #{item.id}, + #{item.salaryTemplateId}, + #{item.salaryItemId}, + #{item.salaryItemShowName}, + #{item.salaryBillType}, + #{item.creator}, + #{item.createTime}, + #{item.updateTime}, + #{item.deleteType}, + #{item.tenantKey} + ) + + + + INSERT INTO hrsa_salary_bill_item_name ( + id, + salary_template_id, + salary_item_id, + salary_item_show_name, + salary_bill_type, + creator, + create_time, + update_time, + delete_type, + tenant_key + ) + + select + #{item.id,jdbcType=DOUBLE}, + #{item.salaryTemplateId,jdbcType=DOUBLE}, + #{item.salaryItemId,jdbcType=DOUBLE}, + #{item.salaryItemShowName,jdbcType=VARCHAR}, + #{item.salaryBillType,jdbcType=INTEGER}, + #{item.creator,jdbcType=DOUBLE}, + #{item.createTime,jdbcType=DATE}, + #{item.updateTime,jdbcType=DATE}, + #{item.deleteType,jdbcType=INTEGER}, + #{item.tenantKey,jdbcType=VARCHAR} + from dual + + + + + INSERT INTO hrsa_salary_bill_item_name ( + id, + salary_template_id, + salary_item_id, + salary_item_show_name, + salary_bill_type, + creator, + create_time, + update_time, + delete_type, + tenant_key + ) + VALUES + ( + #{item.id}, + #{item.salaryTemplateId}, + #{item.salaryItemId}, + #{item.salaryItemShowName}, + #{item.salaryBillType}, + #{item.creator}, + #{item.createTime}, + #{item.updateTime}, + #{item.deleteType}, + #{item.tenantKey} + ) + + + + + + UPDATE hrsa_salary_bill_item_name + + salary_item_id=#{salaryItemId}, + salary_item_show_name=#{salaryItemShowName}, + salary_template_id=#{salaryTemplateId}, + salary_bill_type=#{salaryBillType}, + creator=#{creator}, + create_time={createTime}, + update_time=#{updateTime}, + tenant_key=#{tenantKey} + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_bill_item_name + + + salary_item_id=#{salaryItemId}, + + + salary_item_show_name=#{salaryItemShowName}, + + + salary_template_id=#{salaryTemplateId}, + + + salary_bill_type=#{salaryBillType}, + + + creator=#{creator}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + tenant_key=#{tenantKey}, + + + WHERE id = #{id} AND delete_type = 0 + + + + UPDATE hrsa_salary_bill_item_name + + + + WHEN id = #{item.id} THEN #{item.salaryItemShowName} + + + + + WHEN id = #{item.id} THEN #{item.updateTime} + + + + WHERE delete_type = 0 + AND id IN + + #{item.id} + + + + + + + UPDATE hrsa_salary_bill_item_name + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + UPDATE hrsa_salary_bill_item_name + SET delete_type=1 + WHERE delete_type = 0 + AND salary_template_id = #{salaryTemplateId} + AND salary_bill_type = #{salaryBillType} + AND salary_item_id IN + + #{itemId} + + + + + UPDATE hrsa_salary_bill_item_name + SET delete_type=1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + UPDATE hrsa_salary_bill_item_name + SET delete_type=1 + WHERE delete_type = 0 + AND salary_template_id IN + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.java b/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.java index 033fd38f1..77106cd38 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.java +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.java @@ -13,7 +13,7 @@ public interface SalarySobItemHideMapper { * @param salarySobPO * @return */ - List getById(SalarySobItemHidePO salarySobPO); + List listHideItemIds(SalarySobItemHidePO salarySobPO); /*** * @description 删除薪资账套的薪资项目隐藏信息 @@ -28,4 +28,5 @@ public interface SalarySobItemHideMapper { void updateByItemId(SalarySobItemHidePO salarySobGroupItemHidePO); + List listSome(@Param("param") SalarySobItemHidePO po); } diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.xml index f49701ba7..05fc565c6 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemHideMapper.xml @@ -12,7 +12,7 @@ - SELECT salary_item_id FROM hrsa_salary_item_hide where delete_type=0 and salary_sob_id=#{salarySobId} @@ -20,6 +20,35 @@ and is_group=#{isGroup} + + and salary_item_id=#{salaryItemId} + + + + diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml index cf3d2173e..ed7016175 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml @@ -33,7 +33,10 @@ , t.sorted_index , t.tenant_key , t.update_time - ,t.can_delete + , t.can_delete + , t.rounding_mode + , t.pattern + , t.value_type @@ -159,6 +162,9 @@ , t.sorted_index , t.tenant_key , t.update_time + , t.rounding_mode + , t.pattern + , t.value_type ,t.can_delete ,h.item_hide FROM hrsa_salary_sob_item t @@ -273,6 +279,9 @@ tenant_key=#{tenantKey}, update_time=#{updateTime}, can_delete=#{canDelete}, + rounding_mode=#{roundingMode}, + pattern=#{pattern}, + value_type=#{valueType}, WHERE id = #{id} AND delete_type = 0 @@ -318,6 +327,15 @@ can_delete=#{canDelete}, + + rounding_mode=#{roundingMode}, + + + pattern=#{pattern}, + + + value_type=#{valueType}, + WHERE id = #{id} AND delete_type = 0 @@ -364,7 +382,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) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type) VALUES ( @@ -379,13 +397,16 @@ #{item.creator}, #{item.deleteType}, #{item.tenantKey}, - #{item.canDelete} + #{item.canDelete}, + #{item.roundingMode}, + #{item.pattern}, + #{item.valueType} ) 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) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type) select @@ -400,14 +421,17 @@ #{item.creator,jdbcType=DOUBLE}, #{item.deleteType,jdbcType=INTEGER}, #{item.tenantKey,jdbcType=VARCHAR}, - #{item.canDelete,jdbcType=INTEGER} + #{item.canDelete,jdbcType=INTEGER}, + #{item.roundingMode,jdbcType=INTEGER}, + #{item.pattern,jdbcType=INTEGER}, + #{item.valueType,jdbcType=INTEGER} 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) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type) VALUES ( #{item.salarySobId}, @@ -421,7 +445,10 @@ #{item.creator}, #{item.deleteType}, #{item.tenantKey}, - #{item.canDelete} + #{item.canDelete}, + #{item.roundingMode}, + #{item.pattern}, + #{item.valueType} ) diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java index 558d84eb0..ca0cb78fb 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java @@ -85,4 +85,10 @@ public interface FundSchemeMapper { * @param fundArchiveDelIds */ void deleteByIds(@Param("ids")List fundArchiveDelIds); + + /** + * 新增 + * @param insuranceArchivesFundSchemePO + */ + void insert(InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO); } diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index 17416d13c..8590a88e6 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -327,4 +327,45 @@ + + + + INSERT INTO hrsa_fund_archives( + fund_scheme_id, + fund_account, + fund_end_time, + fund_start_time, + fund_payment_base_string, + supplement_fund_account, + create_time, + creator, + non_payment, + delete_type, + tenant_key, + under_take, + payment_organization, + update_time, + welfare_type, + employee_id) + VALUES + ( + #{fundSchemeId}, + #{fundAccount}, + #{fundEndTime}, + #{fundStartTime}, + #{fundPaymentBaseString}, + #{supplementFundAccount}, + #{createTime}, + #{creator}, + #{nonPayment}, + #{deleteType}, + #{tenantKey}, + #{underTake}, + #{paymentOrganization}, + #{updateTime}, + #{welfareType}, + #{employeeId} + ) + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.java b/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.java index 4f308f1b4..b604d49ef 100644 --- a/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.java +++ b/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.java @@ -113,4 +113,11 @@ public interface InsuranceBaseInfoMapper { * @param archiveDelIds */ void deleteByIds(@Param("ids")List archiveDelIds); + + /** + * 根据id更新 + * + * @param po + */ + void updateById(InsuranceArchivesBaseInfoPO po); } diff --git a/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.xml b/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.xml index 2d63845b8..6caa9ac34 100644 --- a/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/InsuranceBaseInfoMapper.xml @@ -15,6 +15,7 @@ + @@ -31,6 +32,7 @@ , t.creator , t.delete_type , t.tenant_key + , t.employee_type @@ -100,7 +102,7 @@ INSERT INTO hrsa_insurance_base_info - (id,employee_id,payment_organization,social_archives_id,fund_archives_id,other_archives_id,tenant_key,creator,delete_type,create_time,update_time,run_status) + (id,employee_id,payment_organization,social_archives_id,fund_archives_id,other_archives_id,tenant_key,creator,delete_type,create_time,update_time,run_status, employee_type) VALUES ( @@ -115,13 +117,14 @@ #{item.deleteType}, #{item.createTime}, #{item.updateTime}, - #{item.runStatus} + #{item.runStatus}, + #{item.employeeType} ) INSERT INTO hrsa_insurance_base_info - (id,employee_id,payment_organization,social_archives_id,fund_archives_id,other_archives_id,tenant_key,creator,delete_type,create_time,update_time,run_status) + (id,employee_id,payment_organization,social_archives_id,fund_archives_id,other_archives_id,tenant_key,creator,delete_type,create_time,update_time,run_status, employee_type) select #{item.id,jdbcType=DOUBLE}, @@ -135,14 +138,15 @@ #{item.deleteType}, #{item.createTime}, #{item.updateTime}, - #{item.runStatus,jdbcType=VARCHAR} + #{item.runStatus,jdbcType=VARCHAR}, + #{item.employeeType} from dual INSERT INTO hrsa_insurance_base_info - (id,employee_id,payment_organization,social_archives_id,fund_archives_id,other_archives_id,tenant_key,creator,delete_type,create_time,update_time,run_status) + (id,employee_id,payment_organization,social_archives_id,fund_archives_id,other_archives_id,tenant_key,creator,delete_type,create_time,update_time,run_status, employee_type) VALUES ( #{item.id}, @@ -156,7 +160,8 @@ #{item.deleteType}, #{item.createTime}, #{item.updateTime}, - #{item.runStatus} + #{item.runStatus}, + #{item.employeeType} ) @@ -318,4 +323,23 @@ + + UPDATE hrsa_insurance_base_info + + + employee_id = #{employeeId}, + payment_organization = #{paymentOrganization}, + social_archives_id = #{socialArchivesId}, + fund_archives_id = #{fundArchivesId}, + other_archives_id = #{otherArchivesId}, + run_status = #{runStatus}, + create_time = #{createTime}, + update_time = #{updateTime}, + creator = #{creator}, + delete_type = #{deleteType}, + tenant_key = #{tenantKey}, + + WHERE id = #{id} + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java index 80d9785f4..26d684d21 100644 --- a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java @@ -77,4 +77,10 @@ public interface OtherSchemeMapper { * @param otherArchiveDelIds */ void deleteByIds(@Param("ids") List otherArchiveDelIds); + + /** + * 新增 + * @param insuranceArchivesOtherSchemePO + */ + void insert(InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO); } diff --git a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml index fcfd38706..74c514a6e 100644 --- a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml @@ -305,4 +305,39 @@ + + + INSERT INTO hrsa_other_archives( + other_scheme_id, + other_start_time, + under_take, + tenant_key, + welfare_type, + other_end_time, + employee_id, + delete_type, + update_time, + create_time, + non_payment, + creator, + payment_organization, + other_payment_base_string) + VALUES + ( + #{otherSchemeId}, + #{otherStartTime}, + #{underTake}, + #{tenantKey}, + #{welfareType}, + #{otherEndTime}, + #{employeeId}, + #{deleteType}, + #{updateTime}, + #{createTime}, + #{nonPayment}, + #{creator}, + #{paymentOrganization}, + #{otherPaymentBaseString} + ) + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java index 28f1bc511..b2857ba99 100644 --- a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java @@ -77,6 +77,8 @@ public interface SocialSchemeMapper { List queryEmployeeList(@Param("param") InsuranceArchivesListParam param); + List queryExtEmployeeList(@Param("param") InsuranceArchivesListParam param); + /** * 根据社保缴纳组织id获取 * @param paymentOrganization @@ -113,4 +115,10 @@ public interface SocialSchemeMapper { * @param socialArchiveDelIds */ void deleteByIds(@Param("ids")List socialArchiveDelIds); + + /** + * 新增 + * @param insuranceArchivesSocialSchemePO + */ + void insert(InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO); } diff --git a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml index 10395159b..4d61d248d 100644 --- a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml @@ -369,12 +369,41 @@ WHERE 1=1 AND base.delete_type = 0 + AND base.employee_type is null ORDER BY ${param.orderRule.orderRule} ${param.orderRule.ascOrDesc} + @@ -623,6 +652,235 @@ + + + AND + ( + e.username like CONCAT('%',#{param.keyword},'%') + ) + + + AND e.username like CONCAT('%',#{param.userName},'%') + + + AND e.workcode like CONCAT('%',#{param.jobNum},'%') + + + AND e.department_id IN + + #{departmentId} + + + + AND e.subcompany_id IN + + #{subcompanyId} + + + + AND e.status IN + + #{userStatus} + + + + AND e.jobtitle_id IN + + #{position} + + + + AND e.companystartdate > #{param.hiredateStart} + + + AND e.companystartdate < #{param.hiredateEnd} + + + AND siSchemeId = #{param.siSchemeId} + + + AND fundSchemeId = #{param.fundSchemeId} + + + AND otherSchemeId = #{param.otherSchemeId} + + + AND base.payment_organization = #{param.taxAgentId} + + + AND base.run_status IN + + #{runStatus} + + + + + AND e.id IN + + #{item} + + + + + AND base.id IN + + #{item} + + + + + + + AND + ( + e.username like '%'+#{param.keyword}+'%' + ) + + + AND e.username like '%'+#{param.userName}+'%' + + + AND e.workcode like '%'+#{param.jobNum}+'%' + + + AND e.department_id IN + + #{departmentId} + + + + AND e.subcompany_id IN + + #{subcompanyId} + + + + AND e.status IN + + #{userStatus} + + + + AND e.jobtitle_id IN + + #{position} + + + + AND e.companystartdate > #{param.hiredateStart} + + + AND e.companystartdate < #{param.hiredateEnd} + + + + AND siSchemeId = #{param.siSchemeId} + + + AND fundSchemeId = #{param.fundSchemeId} + + + AND otherSchemeId = #{param.otherSchemeId} + + + AND base.payment_organization = #{param.taxAgentId} + + + AND base.run_status IN + + #{runStatus} + + + + AND e.id IN + + #{item} + + + + AND base.id IN + + #{item} + + + + + + + + AND + ( + e.username like '%'||#{param.keyword}||'%' + ) + + + AND e.username like '%'||#{param.userName}||'%' + + + AND e.workcode like '%'||#{param.jobNum}||'%' + + + AND e.department_id IN + + #{departmentId} + + + + AND e.subcompany_id IN + + #{subcompanyId} + + + + AND e.status IN + + #{userStatus} + + + + AND e.jobtitle_id IN + + #{position} + + + + AND e.companystartdate > #{param.hiredateStart} + + + AND e.companystartdate < #{param.hiredateEnd} + + + AND siSchemeId = #{param.siSchemeId} + + + AND fundSchemeId = #{param.fundSchemeId} + + + AND otherSchemeId = #{param.otherSchemeId} + + + AND base.payment_organization = #{param.taxAgentId} + + + AND base.run_status IN + + #{runStatus} + + + + AND e.id IN + + #{item} + + + + AND base.id IN + + #{item} + + + + select @@ -201,5 +212,14 @@ + + + UPDATE hrsa_insurance_category + + update_time=#{updateTime}, + delete_type = 1 + + WHERE id = #{id} AND delete_type = 0 AND data_type = 0 + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml index bae6797bf..a74e1c1aa 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml @@ -80,7 +80,12 @@ AND update_time = #{updateTime} - AND employee_type = #{employeeType} + + AND (employee_type = #{employeeType} or employee_type is null) + + + AND employee_type = #{employeeType} + AND tax_agent_id IN diff --git a/src/com/engine/salary/service/ExtEmpService.java b/src/com/engine/salary/service/ExtEmpService.java index d6f3b2d7d..ff5879c3f 100644 --- a/src/com/engine/salary/service/ExtEmpService.java +++ b/src/com/engine/salary/service/ExtEmpService.java @@ -1,14 +1,17 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.extemp.param.ExtEmpImportParam; import com.engine.salary.entity.extemp.param.ExtEmpQueryParam; import com.engine.salary.entity.extemp.param.ExtEmpSaveParam; import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.Collection; import java.util.List; +import java.util.Map; public interface ExtEmpService { @@ -45,4 +48,10 @@ public interface ExtEmpService { Collection listAllForReport(); ExtEmpPO getById(Long id); + + XSSFWorkbook exportImportTemplate(); + + Map previewImportExtEmp(ExtEmpImportParam param); + + Map importExtEmp(ExtEmpImportParam param); } \ No newline at end of file diff --git a/src/com/engine/salary/service/SICategoryService.java b/src/com/engine/salary/service/SICategoryService.java index d38b8357d..dfaa84349 100644 --- a/src/com/engine/salary/service/SICategoryService.java +++ b/src/com/engine/salary/service/SICategoryService.java @@ -58,4 +58,11 @@ public interface SICategoryService { * @date 2022/10/14 14:50 */ Map updateCategoryName(ICategoryFormDTO iCategoryFormDTO); + + /*** + * @description 修改自定义福利 名称、缴费对象 + */ + Map updateCategoryNameAndPayScope(ICategoryFormDTO iCategoryFormDTO); + + Map deleteCustomCategory(ICategoryFormDTO iCategoryFormDTO); } diff --git a/src/com/engine/salary/service/SalaryBillItemNameService.java b/src/com/engine/salary/service/SalaryBillItemNameService.java new file mode 100644 index 000000000..5399e47f1 --- /dev/null +++ b/src/com/engine/salary/service/SalaryBillItemNameService.java @@ -0,0 +1,100 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryBill.param.SalaryBillItemNameSaveParam; +import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; + +import java.util.Collection; +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemNameService + * @date 2023/07/18 16:15 + * @description 工资单薪资项目展示名称 + */ +public interface SalaryBillItemNameService { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryBillItemNamePO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryBillItemNamePO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO); + + /** + * 修改,修改所有字段 + * + * @param salaryBillItemNamePO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryBillItemNamePO salaryBillItemNamePO); + + /** + * 修改,忽略null字段 + * + * @param salaryBillItemNamePO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO); + + /** + * 删除记录 + * + * @param id 待删除的记录id + * @return 返回影响行数 + */ + int delete(Long id); + + /** + * 根据工资单模板id和工资单类型获取 设置的项目名称信息 + * @param build + * @return + */ + List ListByTemplateAndType(SalaryBillItemNamePO build); + + /** + * 设置工资单薪资项目显示名 + * @param saveList + */ + void saveItemShowName(List saveList); + + /** + * 批量更新 + * @param needUpdateList + */ + void batchUpdate(List needUpdateList); + + /** + * 批量插入 + * @param needInsertList + */ + void batchInsert(List needInsertList); + + /** + * 根据id批量删除 + * @param needDeleteIds + */ + void deleteByIds(List needDeleteIds); + + /** + * 根据工资单模板id删除 + * @param ids + */ + void deleteByTemplateIds(Collection ids); +} diff --git a/src/com/engine/salary/service/SalarySobItemHideService.java b/src/com/engine/salary/service/SalarySobItemHideService.java index 7551c75c2..826825449 100644 --- a/src/com/engine/salary/service/SalarySobItemHideService.java +++ b/src/com/engine/salary/service/SalarySobItemHideService.java @@ -13,4 +13,14 @@ public interface SalarySobItemHideService { * @return */ List listHideGroupBysalarySobId(SalarySobItemHidePO salarySobId); + + /** + * 根据薪资账套id查询哪些字段关闭显示 + * + * @param po + * @return + */ + List listSome(SalarySobItemHidePO po); + + void updateById(SalarySobItemHidePO salarySobItemHidePO); } diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index adca1503b..37197e51f 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -119,4 +120,9 @@ public interface SalarySobItemService { * */ void deleteItemShowBySalarySobIds(Collection salarySobIds); + + /** + * 薪资项目的详情 + */ + SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param); } diff --git a/src/com/engine/salary/service/SalaryTemplateService.java b/src/com/engine/salary/service/SalaryTemplateService.java index bdf8826cb..29766417c 100644 --- a/src/com/engine/salary/service/SalaryTemplateService.java +++ b/src/com/engine/salary/service/SalaryTemplateService.java @@ -97,7 +97,7 @@ public interface SalaryTemplateService { * @param salarySobId * @return */ - List getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish); + List getSalaryItemSetContainHide(Long salarySobId, Long salaryTemplateId, boolean isReplenish); /** * 获取默认工资单模板 diff --git a/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java b/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java index 169e25ae7..d6008fc62 100644 --- a/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java +++ b/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java @@ -3,6 +3,7 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.extemp.param.ExtEmpImportParam; import com.engine.salary.entity.extemp.param.ExtEmpQueryParam; import com.engine.salary.entity.extemp.param.ExtEmpSaveParam; import com.engine.salary.entity.extemp.po.ExtEmpPO; @@ -10,22 +11,40 @@ import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.extemp.ExternalEmployeeMapper; import com.engine.salary.service.ExtEmpService; import com.engine.salary.service.SalaryEmployeeService; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.excel.ExcelComment; +import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelSupport; +import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; +import weaver.file.ImageFileManager; +import weaver.general.Util; import weaver.hrm.User; +import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; + /** * 累计专项 *

Copyright: Copyright (c) 2022

@@ -45,6 +64,9 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private EmployMapper getEmployMapper() { + return MapperProxyFactory.getProxy(EmployMapper.class); + } @Override public List list(ExtEmpQueryParam param) { @@ -203,4 +225,318 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { return employee; }).collect(Collectors.toList()); } + + @Override + public XSSFWorkbook exportImportTemplate() { + + // 模板表头 + List headerList = Lists.newArrayList( + SalaryI18nUtil.getI18nLabel(25034, "姓名"), + SalaryI18nUtil.getI18nLabel(27511, "部门"), + SalaryI18nUtil.getI18nLabel(33553, "分部"), + SalaryI18nUtil.getI18nLabel(1516, "入职日期"), + SalaryI18nUtil.getI18nLabel(125238, "手机号"), + SalaryI18nUtil.getI18nLabel(1933, "工号"), + SalaryI18nUtil.getI18nLabel(1887, "身份证号码"), + SalaryI18nUtil.getI18nLabel(0, "本人开户的银行卡卡号"), + SalaryI18nUtil.getI18nLabel(0, "本人开户的银行卡开户支行全称")); + List dataIndexList = Lists.newArrayList("username", "departmentName", "subcompanyName", "companystartdate", "mobile", "workcode", "idNo", "bankCardNum", "bankName"); + + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + + // 注释 + List excelComments = Lists.newArrayList(); + excelComments.add(new ExcelComment(0, 0, 1, 2, SalaryI18nUtil.getI18nLabel(30036, "必填"))); + excelComments.add(new ExcelComment(3, 0, 4, 2, SalaryI18nUtil.getI18nLabel(542348, "格式样例为'2022-01-01'、'2022/1/1'"))); + + String sheetName = "非系统人员导入模板"; + return ExcelUtilPlus.genWorkbookV2(rows, sheetName, excelComments); + } + + @Override + public Map previewImportExtEmp(ExtEmpImportParam param) { + //参数校验 + ValidUtil.doValidator(param); + + Map map = new HashMap<>(); + + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + map.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); + map.put("list", ExcelParseHelper.parse2List(sheet, 1)); + return map; + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + + @Override + public Map importExtEmp(ExtEmpImportParam param){ + + Map apidatas = new HashMap(); + + //excel文件id + String imageId = Util.null2String(param.getImageId()); + Validate.notBlank(imageId, SalaryI18nUtil.getI18nLabel(542127, "imageId为空")); + + // 失败的数量 + int failCount = 0; + // 成功的数量 + int successCount = 0; + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + //数据库中现有非系统人员集合 + List allExtEmpInfo= getExternalEmployeeMapper().listAll(); + + // 错误提示信息 + List excelComments = Lists.newArrayList(); + // 存在错误的那行数据 + List> errorDatas = Lists.newArrayList(); + // 表头 + List headers = ExcelSupport.getSheetHeader(sheet, 0); + // 处理数值 + List> data = ExcelParseHelper.parse2Map(sheet, 1); + if (CollectionUtils.isEmpty(headers)) { + throw new SalaryRunTimeException("表头为空"); + } + if (CollectionUtils.isEmpty(data)) { + throw new SalaryRunTimeException("无数据"); + } + //存储待新增和待更新的ExtEmpPO数据 + List updateExtEmpPOList = new ArrayList<>(); + List insertExtEmpPOList = new ArrayList<>(); + //遍历excel表具体数据 + for (int i = 0; i < data.size(); i++) { + + String row = "第" + (i + 1) + "行"; + + boolean isError = false; + Map map = data.get(i); + Long employeeId = 0L; + + String username = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(25034, "姓名"), ""); + String departmentName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(27511, "部门"), ""); + String subcompanyName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(33553, "分部"), ""); + String companystartdate = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(1516, "入职日期"), ""); + + //校验姓名 + if (StringUtils.isBlank(username)) { + //姓名是必填项 + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空")); + excelComments.add(errorMessageMap); + } + long usernameNum = updateExtEmpPOList.stream().filter(f -> f.getUsername().equals(username)).count() + insertExtEmpPOList.stream().filter(f -> f.getUsername().equals(username)).count(); + if (usernameNum > 0) { + //excel中姓名相同时,只会录入第一次出现的数据 + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "本次excel文件中已存在该姓名相关数据,本行数据无法录入")); + excelComments.add(errorMessageMap); + } + //校验部门、分部 + List subCompanyInfos = new ArrayList<>(); + List deptInfos = new ArrayList<>(); + if (StringUtils.isNotBlank(subcompanyName)) { + subCompanyInfos = getEmployMapper().getSubCompanyInfosByName(subcompanyName); + if (subCompanyInfos.size() == 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "分部信息不存在,请检查分部数据是否正确")); + excelComments.add(errorMessageMap); + } + } + if (StringUtils.isNotBlank(departmentName)) { + deptInfos = getEmployMapper().getDeptInfosByName(departmentName); + if (deptInfos.size() == 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "部门信息不存在,请检查部门数据是否正确")); + excelComments.add(errorMessageMap); + } + } + if (StringUtils.isNotBlank(companystartdate) && (companystartdate.length() < 10 || !SalaryDateUtil.checkDay(companystartdate.substring(0, 10)))) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "入职日期格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); + excelComments.add(errorMessageMap); + } + + if (!isError){ + //校验当前数据是否有相关数据(姓名相同)存在数据库中,有则更新,无则新建 + List targetExtEmpInfoList = allExtEmpInfo.stream().filter(f -> f.getUsername().equals(username)).collect(Collectors.toList()); + //校验部门和分部关系 + List targetDeptInfos = new ArrayList<>(); + List targetSubCompanyInfos = new ArrayList<>(); + if (targetExtEmpInfoList.size() == 1) { + ExtEmpPO targetExtEmpInfo = targetExtEmpInfoList.get(0); + //将库中已有的部门和分布信息取出(excel行未设置对应字段数据时) + if (targetExtEmpInfo.getSubcompanyId() != null && subCompanyInfos.size() == 0) { + subCompanyInfos.add(SubCompanyInfo.builder().id(targetExtEmpInfo.getSubcompanyId()).name(targetExtEmpInfo.getSubcompanyName()).build()); + } + if (targetExtEmpInfo.getDepartmentId() != null && deptInfos.size() == 0) { + DeptInfo oldDeptInfo = getEmployMapper().getDeptInfoById(targetExtEmpInfo.getDepartmentId()); + deptInfos.add(oldDeptInfo); + } + } + //分部结果数为0,部门结果数大于1,则无法匹配 + if(subCompanyInfos.size() == 0 && deptInfos.size() > 1) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "系统中存在重复部门信息,无法指定当前人员关联的唯一部门,请通过填写部门所属的分部信息来缩小部门筛选范围")); + excelComments.add(errorMessageMap); + } else if (subCompanyInfos.size() > 1 && deptInfos.size() == 0) { + //部门结果数为0,分部结果数大于1,则无法匹配 + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "系统中存在重复分部信息,无法指定当前人员关联的唯一分部,请通过填写人员所属的部门信息来缩小分部筛选范围")); + excelComments.add(errorMessageMap); + } else if (subCompanyInfos.size() >= 1 && deptInfos.size() >= 1) { + //部门结果数大于等于1,分部结果数大于等于1,筛选出可配对的组合,根据部门的所属分部字段进行配对 + for (DeptInfo deptInfo : deptInfos) { + if (subCompanyInfos.stream().filter(g -> g.getId().equals(deptInfo.getSubcompanyid1())).count() > 0) { + targetDeptInfos.add(deptInfo); + } + } + if (targetDeptInfos.size() == 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "部门与分部无法匹配")); + excelComments.add(errorMessageMap); + } else if (targetDeptInfos.size() > 1) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "该组数据中的部门和分部信息在系统中出现多组匹配的部门和分布组合,无法指定唯一的部门和分部组合")); + excelComments.add(errorMessageMap); + } else { + targetSubCompanyInfos = subCompanyInfos.stream().filter(f -> f.getId().equals(targetDeptInfos.get(0).getSubcompanyid1())).collect(Collectors.toList()); + } + + } else if (subCompanyInfos.size() == 0 && deptInfos.size() == 1) { + //分部结果数为0,部门结果数为1,可以匹配 + targetDeptInfos.add(deptInfos.get(0)); + } else if (subCompanyInfos.size() == 1 && deptInfos.size() == 0) { + //部门结果数为0,分部结果数为1,可以匹配 + targetSubCompanyInfos.add(subCompanyInfos.get(0)); + } + //收集excel有效数据,并区分新增和更新 + DeptInfo finalDeptInfo = targetDeptInfos.size() > 0 ? targetDeptInfos.get(0) : null; + SubCompanyInfo finalSubCompanyInfo = targetSubCompanyInfos.size() > 0 ? targetSubCompanyInfos.get(0) : null; + if (targetExtEmpInfoList.isEmpty()) { + if (!isError) { + //添加一条新建数据 + insertExtEmpPOList.add(handleExtEmpInfo(null, map, finalDeptInfo, finalSubCompanyInfo)); + } + } else if (targetExtEmpInfoList.size() > 1) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "数据库中非系统人员信息存在姓名相同数据,请先确保姓名唯一")); + excelComments.add(errorMessageMap); + } else { + if (!isError) { + //添加一条更新数据 + updateExtEmpPOList.add(handleExtEmpInfo(targetExtEmpInfoList.get(0), map, finalDeptInfo, finalSubCompanyInfo)); + } + } + + } + + if (isError) { + failCount++; + errorDatas.add(map); + } else { + successCount++; + } + + } + //更新 + for(ExtEmpPO po : updateExtEmpPOList) { + getExternalEmployeeMapper().updateIgnoreNull(po); + } + //新建 + for(ExtEmpPO po : insertExtEmpPOList) { + getExternalEmployeeMapper().insertIgnoreNull(po); + } + + + apidatas.put("successCount", successCount); + apidatas.put("errorCount", failCount); + apidatas.put("errorData", excelComments); + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + return apidatas; + } + + public ExtEmpPO handleExtEmpInfo(ExtEmpPO po, Map map, DeptInfo deptInfo, SubCompanyInfo subCompanyInfo) { + ExtEmpPO resultPo = new ExtEmpPO(); + if (po == null) { + //新建 + resultPo.setId(IdGenerator.generate()); + resultPo.setStatus("2"); + resultPo.setCreateTime(new Date()); + resultPo.setUpdateTime(new Date()); + resultPo.setDeleteType(0); + resultPo.setCreator((long) user.getUID()); + } else { + //更新 + BeanUtils.copyProperties(po, resultPo); + resultPo.setUpdateTime(new Date()); + } + String username = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(25034, "姓名"), ""); +// String departmentName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(27511, "部门"), ""); +// String subcompanyName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(33553, "分部"), ""); + String companystartdate = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(1516, "入职日期"), ""); + String mobile = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(125238, "手机号"), ""); + String workcode = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(1933, "工号"), ""); + String idNo = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(1887, "身份证号码"), ""); + String bankCardNum = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(0, "本人开户的银行卡卡号"), ""); + String bankName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(0, "本人开户的银行卡开户支行全称"), ""); + + if (StringUtils.isNotBlank(companystartdate)) { + resultPo.setCompanystartdate(companystartdate.substring(0, 10)); + } + + if (StringUtils.isNotBlank(username)) { + resultPo.setUsername(username); + } + if (StringUtils.isNotBlank(mobile)) { + resultPo.setMobile(mobile); + } + if (StringUtils.isNotBlank(workcode)) { + resultPo.setWorkcode(workcode); + } + if (StringUtils.isNotBlank(idNo)) { + resultPo.setIdNo(idNo); + } + if (StringUtils.isNotBlank(bankCardNum)) { + resultPo.setBankCardNum(bankCardNum); + } + if (StringUtils.isNotBlank(bankName)) { + resultPo.setBankName(bankName); + } + if (deptInfo != null) { + resultPo.setDepartmentName(deptInfo.getName()); + resultPo.setDepartmentId(deptInfo.getId()); + } + if (subCompanyInfo != null) { + resultPo.setSubcompanyName(subCompanyInfo.getName()); + resultPo.setSubcompanyId(subCompanyInfo.getId()); + } + if (resultPo.getDepartmentName() == null) { + resultPo.setDepartmentName(""); + } + resultPo.setModifier((long) user.getUID()); + return resultPo; + } } diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index df2d93d8f..7c48f7ce8 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -66,7 +66,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (CollectionUtils.isEmpty(list)) { return result; } - List employeeIds = list.stream().map(item -> item.getEmployeeId()).collect(Collectors.toList()); + List employeeIds = list.stream().map(item -> item.getEmployeeId()).distinct().collect(Collectors.toList()); List employeeByIds = new ArrayList<>(); List> partition = Lists.partition(employeeIds, 1000); for (List longs : partition) { diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 4ae82d294..f6c8fd0d1 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -37,6 +37,7 @@ import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.siaccount.*; import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.enums.sicategory.IsUseEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.InsuranceExportMapper; @@ -1092,7 +1093,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { @Override public Map welfareColumns() { - List listAll = getICategoryMapper().listAll(); + List listAll = getICategoryMapper().listAll().stream().filter(f -> f.getIsUse().equals(IsUseEnum.START.getValue())).collect(Collectors.toList()); List list = new ArrayList<>(); if (CollectionUtils.isNotEmpty(listAll)) { list.addAll(listAll); @@ -1544,12 +1545,18 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { excelComments.add(errorMessageMap); } - if (!checkBillMonth(billMonth)) { + if (billMonth.length() < 7 || !SalaryDateUtil.checkYearMonth(billMonth.substring(0, 7))) { isError = true; Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(user.getLanguage(),542452, "账单月份输入有误,请参照“2022-09”这种格式进行检查")); excelComments.add(errorMessageMap); } + if (headers.contains(SalaryI18nUtil.getI18nLabel(0, "补缴月份")) && (supplementaryMonth.length() < 7 || !SalaryDateUtil.checkYearMonth(supplementaryMonth.substring(0, 7)))) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补缴月份输入有误,请参照“2022-09”这种格式进行检查")); + excelComments.add(errorMessageMap); + } //遍历表头 for (int j = 0; j < headers.size(); j++) { @@ -1611,9 +1618,9 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //根据员工id、个税扣缴义务人id、账单月份查询 //根据表头字段来区分正常缴纳和补缴两类数据 if (!headers.contains(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542265, "补缴月份"))) { - list = getInsuranceAccountDetailMapper().queryNormalList(billMonth, paymentOrganization, employeeIds.get(0)); + list = getInsuranceAccountDetailMapper().queryNormalList(billMonth.substring(0, 7), paymentOrganization, employeeIds.get(0)); } else { - list = getInsuranceAccountDetailMapper().querySupplementList(billMonth, paymentOrganization, employeeIds.get(0), supplementaryMonth); + list = getInsuranceAccountDetailMapper().querySupplementList(billMonth.substring(0, 7), paymentOrganization, employeeIds.get(0), supplementaryMonth.substring(0, 7)); } if (list.isEmpty()) { @@ -2019,7 +2026,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } if (!StringUtils.isEmpty(baseMap.getOrDefault(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542443, "账单月份"), "").toString())) { - insuranceAccountDetailPO.setBillMonth(baseMap.get(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542443, "账单月份")).toString()); + insuranceAccountDetailPO.setBillMonth(baseMap.get(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542443, "账单月份")).toString().substring(0, 7)); } if (!StringUtils.isEmpty(baseMap.getOrDefault(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542280, "社保合计"), "").toString())) { @@ -2056,7 +2063,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //如果导入的时补缴数据,还会包含补缴月份 if (!StringUtils.isEmpty(baseMap.getOrDefault(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542265, "补缴月份"), "").toString())) { - insuranceAccountDetailPO.setSupplementaryMonth(baseMap.get(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542265, "补缴月份")).toString()); + insuranceAccountDetailPO.setSupplementaryMonth(baseMap.get(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542265, "补缴月份")).toString().substring(0, 7)); } insuranceAccountDetailPO.setUpdateTime(new Date()); @@ -2443,7 +2450,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { getExcelInsuranceDetailMapper().batchDelByIds(idList); } //新增 - getExcelInsuranceDetailMapper().batchSave(addCompareList); + List> partition = Lists.partition((List) addCompareList, 20); + partition.forEach(getExcelInsuranceDetailMapper()::batchSave); + +// getExcelInsuranceDetailMapper().batchSave(addCompareList); apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); @@ -3162,7 +3172,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { excelComments.add(errorMessageMap); } - if (!checkBillMonth(billMonth)) { + if (billMonth.length() < 7 || !SalaryDateUtil.checkYearMonth(billMonth.substring(0, 7))) { isError = true; Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(user.getLanguage(),542452, "账单月份输入有误,请参照“2022-09”这种格式进行检查")); @@ -3237,7 +3247,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { list = getInsuranceAccountDetailMapper().queryBalanceList(InsuranceAccountDetailPO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) - .billMonth(billMonth) + .billMonth(billMonth.substring(0, 7)) .build()); if (list.isEmpty()) { @@ -3512,7 +3522,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { InsuranceAccountDetailPO insuranceAccountDetailPO = new InsuranceAccountDetailPO(); insuranceAccountDetailPO.setId(IdGenerator.generate()); insuranceAccountDetailPO.setEmployeeId(employeeId); - insuranceAccountDetailPO.setBillMonth(billMonth); + insuranceAccountDetailPO.setBillMonth(billMonth.substring(0, 7)); insuranceAccountDetailPO.setBillStatus(BillStatusEnum.NOT_ARCHIVED.getValue()); insuranceAccountDetailPO.setPaymentStatus(PaymentStatusEnum.BALANCE.getValue()); insuranceAccountDetailPO.setResourceFrom(ResourceFromEnum.IMPORT.getValue()); diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 2045c38f9..6d6052123 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -43,6 +43,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; +import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; @@ -58,6 +59,9 @@ import java.util.stream.Collectors; **/ @Slf4j public class SIArchivesServiceImpl extends Service implements SIArchivesService { + private final BaseBean baseBean = new BaseBean(); + + private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); private SIArchivesBiz getSiArchivesBiz(User user) { return ServiceUtil.getService(SIArchivesBiz.class, user); @@ -245,26 +249,27 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService @Transactional(rollbackFor = Exception.class) @Override public void handleChangeData(long currentEmployeeId) { - Util_DataCache.setObjVal("welfareChangeSign", "1"); - log.info("福利档案中增量数据处理逻辑开始:"); - // 所有增量人员列表 - List taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.INSURANCE_ARCHIVE); - log.info("待处理的福利档案增量数据数量 {}:", taxAgentEmpChangeList.size()); - if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { - Util_DataCache.setObjVal("welfareChangeSign", "0"); - return; - } - // 当前可以管辖的人员 - Collection taxAgentList = new ArrayList<>(); - if (currentEmployeeId != 1L) { - taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); - Collection finalTaxAgentList = taxAgentList; - taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> finalTaxAgentList.stream().anyMatch(e -> e.getId().equals(f.getTaxAgentId()))).collect(Collectors.toList()); + try { + Util_DataCache.setObjVal("welfareChangeSign", "1"); + log.info("福利档案中增量数据处理逻辑开始:"); + // 所有增量人员列表 + List taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.INSURANCE_ARCHIVE); + log.info("待处理的福利档案增量数据数量 {}:", taxAgentEmpChangeList.size()); if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { Util_DataCache.setObjVal("welfareChangeSign", "0"); return; } - } + // 当前可以管辖的人员 + Collection taxAgentList = new ArrayList<>(); + if (currentEmployeeId != 1L) { + taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); + Collection finalTaxAgentList = taxAgentList; + taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> finalTaxAgentList.stream().anyMatch(e -> e.getId().equals(f.getTaxAgentId()))).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { + Util_DataCache.setObjVal("welfareChangeSign", "0"); + return; + } + } // Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); // log.info("当前可以管辖的个税扣缴义务人数量 {}:", taxAgentList.size()); // taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> taxAgentList.stream().anyMatch(e -> e.getId().equals(f.getTaxAgentId()))).collect(Collectors.toList()); @@ -272,85 +277,98 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService // Util_DataCache.setObjVal("welfareChangeSign", "0"); // return; // } - log.info("根据当前可以管辖的个税扣缴义务人筛选出的可处理增量数据数量 {}:", taxAgentEmpChangeList.size()); - // 所有福利档案基础信息数据 - List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); - log.info("当前数据库中所有福利档案基础信息数据数量 {}:", baseInfoPOList.size()); - StopWatch sw = new StopWatch(); - sw.start("将增量数据进一步处理为新增、更新两类数据"); - InsuranceArchivesBaseInfoBO.ChangeData changeData = InsuranceArchivesBaseInfoBO.buildChangeData(taxAgentEmpChangeList, baseInfoPOList, currentEmployeeId); - sw.stop(); - // 批量修改福利档案 - if (CollectionUtils.isNotEmpty(changeData.getBaseInfoUpdateTodoList())) { - log.info("增量数据中待更新的数据数量 {}:", changeData.getBaseInfoUpdateTodoList().size()); - //对于即将调整为“待减员”的数据,更新社保、公积金、其他福利档案的停止缴纳时间 - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); - String today = simpleDateFormat.format(new Date()); - sw.start("生成增量数据中即将置为“待减员”的数据"); - List toStayDelList = changeData.getBaseInfoUpdateTodoList().stream() - .filter(f -> f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) - .collect(Collectors.toList()); - if (toStayDelList.size() > 0) { - List> partitionUpdateEndTime = Lists.partition(toStayDelList, 100); - partitionUpdateEndTime.forEach(part->{ - List socialIds = part.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); - List fundIds = part.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); - List otherIds = part.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); - - getSocialSchemeMapper().batchUpdateEndTime(socialIds, today); - getFundSchemeMapper().batchUpdateEndTime(fundIds, today); - getOtherSchemeMapper().batchUpdateEndTime(otherIds, today); - }); - - } + log.info("根据当前可以管辖的个税扣缴义务人筛选出的可处理增量数据数量 {}:", taxAgentEmpChangeList.size()); + // 所有福利档案基础信息数据 + List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); + log.info("当前数据库中所有福利档案基础信息数据数量 {}:", baseInfoPOList.size()); + StopWatch sw = new StopWatch(); + sw.start("将增量数据进一步处理为新增、更新两类数据"); + InsuranceArchivesBaseInfoBO.ChangeData changeData = InsuranceArchivesBaseInfoBO.buildChangeData(taxAgentEmpChangeList, baseInfoPOList, currentEmployeeId); sw.stop(); - - sw.start("生成增量数据中即将置为“逻辑删除”的数据"); - //对于逻辑删除的数据,同样逻辑删除相关的社保、公积金、其他福利档案 - List delList = changeData.getBaseInfoUpdateTodoList().stream() - .filter(f -> f.getDeleteType().equals(DeleteTypeEnum.DELETED.getValue())) - .collect(Collectors.toList()); - if (delList.size() > 0) { - for (InsuranceArchivesBaseInfoPO po : delList) { - getSocialSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() - .employeeId(po.getEmployeeId()) - .paymentOrganization(po.getPaymentOrganization()) - .build()); - getFundSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() - .employeeId(po.getEmployeeId()) - .paymentOrganization(po.getPaymentOrganization()) - .build()); - getOtherSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() - .employeeId(po.getEmployeeId()) - .paymentOrganization(po.getPaymentOrganization()) - .build()); + // 批量修改福利档案 + if (CollectionUtils.isNotEmpty(changeData.getBaseInfoUpdateTodoList())) { + log.info("增量数据中待更新的数据数量 {}:", changeData.getBaseInfoUpdateTodoList().size()); + //对于即将调整为“待减员”的数据,更新社保、公积金、其他福利档案的停止缴纳时间 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); + String today = simpleDateFormat.format(new Date()); + sw.start("生成增量数据中即将置为“待减员”的数据"); + List toStayDelList = changeData.getBaseInfoUpdateTodoList().stream() + .filter(f -> f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) + .collect(Collectors.toList()); + if (isLog) { + log.info("福利档案-待减员明细:{}", toStayDelList); } + if (toStayDelList.size() > 0) { + List> partitionUpdateEndTime = Lists.partition(toStayDelList, 100); + partitionUpdateEndTime.forEach(part->{ + List socialIds = part.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); + List fundIds = part.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); + List otherIds = part.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); + + getSocialSchemeMapper().batchUpdateEndTime(socialIds, today); + getFundSchemeMapper().batchUpdateEndTime(fundIds, today); + getOtherSchemeMapper().batchUpdateEndTime(otherIds, today); + }); + + } + sw.stop(); + + sw.start("生成增量数据中即将置为“逻辑删除”的数据"); + //对于逻辑删除的数据,同样逻辑删除相关的社保、公积金、其他福利档案 + List delList = changeData.getBaseInfoUpdateTodoList().stream() + .filter(f -> f.getDeleteType().equals(DeleteTypeEnum.DELETED.getValue())) + .collect(Collectors.toList()); + if (isLog) { + log.info("福利档案-逻辑删除明细:{}", delList); + } + if (delList.size() > 0) { + for (InsuranceArchivesBaseInfoPO po : delList) { + getSocialSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() + .employeeId(po.getEmployeeId()) + .paymentOrganization(po.getPaymentOrganization()) + .build()); + getFundSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() + .employeeId(po.getEmployeeId()) + .paymentOrganization(po.getPaymentOrganization()) + .build()); + getOtherSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() + .employeeId(po.getEmployeeId()) + .paymentOrganization(po.getPaymentOrganization()) + .build()); + } + } + sw.stop(); + //修改福利档案基础信息 + sw.start("增量数据中待更新数据入库"); + if (isLog) { + log.info("福利档案-增量数据中待更新数据入库明细:{}", changeData.getBaseInfoUpdateTodoList()); + } + List> partitionUpdateBase = Lists.partition(changeData.getBaseInfoUpdateTodoList(), 100); + partitionUpdateBase.forEach(part-> getInsuranceBaseInfoMapper().batchUpdate(part)); + sw.stop(); + log.info("增量数据中待更新的数据处理完成!"); + } + + sw.start("处理增量数据中待新增的数据"); + // 批量新增福利档案 + if (CollectionUtils.isNotEmpty(changeData.getBaseInfoAddTodoList())) { + log.info("增量数据中待新增的数据数量 {}:", changeData.getBaseInfoAddTodoList().size()); + //新增社保、公积金、其他福利档案、福利档案基础信息 + addNewInsuranceBaseInfo(changeData.getBaseInfoAddTodoList(), currentEmployeeId); + log.info("增量数据中待新增的数据处理完成!"); } sw.stop(); - //修改福利档案基础信息 - sw.start("增量数据中待更新数据入库"); - List> partitionUpdateBase = Lists.partition(changeData.getBaseInfoUpdateTodoList(), 100); - partitionUpdateBase.forEach(part-> getInsuranceBaseInfoMapper().batchUpdate(part)); - sw.stop(); - log.info("增量数据中待更新的数据处理完成!"); - } - sw.start("处理增量数据中待新增的数据"); - // 批量新增福利档案 - if (CollectionUtils.isNotEmpty(changeData.getBaseInfoAddTodoList())) { - log.info("增量数据中待新增的数据数量 {}:", changeData.getBaseInfoAddTodoList().size()); - //新增社保、公积金、其他福利档案、福利档案基础信息 - addNewInsuranceBaseInfo(changeData.getBaseInfoAddTodoList(), currentEmployeeId); - log.info("增量数据中待新增的数据处理完成!"); + // 删除增量数据 + if (CollectionUtils.isNotEmpty(changeData.getChangeIds())) { + getTaxAgentEmpChangeService(user).deleleByIds(changeData.getChangeIds()); + } + log.info("各操作计时 {}", sw.prettyPrint()); + Util_DataCache.setObjVal("welfareChangeSign", "0"); + } catch (Exception e) { + log.info("福利档案-增量数据处理出错:{}", e.getMessage(), e); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "福利档案-增量数据处理出错")); } - sw.stop(); - - // 删除增量数据 - if (CollectionUtils.isNotEmpty(changeData.getChangeIds())) { - getTaxAgentEmpChangeService(user).deleleByIds(changeData.getChangeIds()); - } - log.info("各操作计时 {}", sw.prettyPrint()); - Util_DataCache.setObjVal("welfareChangeSign", "0"); } /** @@ -404,101 +422,126 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService //新增社保、公积金、其他福利档案、福利档案基础信息 private List addNewInsuranceBaseInfo(List baseInfoPOList, Long currentEmployeeId) { - List socialList = new ArrayList<>(); - List fundList = new ArrayList<>(); - List otherList = new ArrayList<>(); - for (InsuranceArchivesBaseInfoPO baseInfoPO : baseInfoPOList) { - InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = new InsuranceArchivesSocialSchemePO(); - insuranceArchivesSocialSchemePO.setTenantKey(""); - insuranceArchivesSocialSchemePO.setWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue()); - insuranceArchivesSocialSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); - insuranceArchivesSocialSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); - insuranceArchivesSocialSchemePO.setCreator(currentEmployeeId); - insuranceArchivesSocialSchemePO.setCreateTime(new Date()); - insuranceArchivesSocialSchemePO.setUpdateTime(new Date()); - insuranceArchivesSocialSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); - insuranceArchivesSocialSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); - socialList.add(insuranceArchivesSocialSchemePO); + try { + List socialList = new ArrayList<>(); + List fundList = new ArrayList<>(); + List otherList = new ArrayList<>(); + for (InsuranceArchivesBaseInfoPO baseInfoPO : baseInfoPOList) { + InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = new InsuranceArchivesSocialSchemePO(); + insuranceArchivesSocialSchemePO.setTenantKey(""); + insuranceArchivesSocialSchemePO.setWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue()); + insuranceArchivesSocialSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); + insuranceArchivesSocialSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); + insuranceArchivesSocialSchemePO.setCreator(currentEmployeeId); + insuranceArchivesSocialSchemePO.setCreateTime(new Date()); + insuranceArchivesSocialSchemePO.setUpdateTime(new Date()); + insuranceArchivesSocialSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + insuranceArchivesSocialSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); + socialList.add(insuranceArchivesSocialSchemePO); - InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = new InsuranceArchivesFundSchemePO(); - insuranceArchivesFundSchemePO.setTenantKey(""); - insuranceArchivesFundSchemePO.setWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue()); - insuranceArchivesFundSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); - insuranceArchivesFundSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); - insuranceArchivesFundSchemePO.setCreator(currentEmployeeId); - insuranceArchivesFundSchemePO.setCreateTime(new Date()); - insuranceArchivesFundSchemePO.setUpdateTime(new Date()); - insuranceArchivesFundSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); - insuranceArchivesFundSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); - fundList.add(insuranceArchivesFundSchemePO); + InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = new InsuranceArchivesFundSchemePO(); + insuranceArchivesFundSchemePO.setTenantKey(""); + insuranceArchivesFundSchemePO.setWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue()); + insuranceArchivesFundSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); + insuranceArchivesFundSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); + insuranceArchivesFundSchemePO.setCreator(currentEmployeeId); + insuranceArchivesFundSchemePO.setCreateTime(new Date()); + insuranceArchivesFundSchemePO.setUpdateTime(new Date()); + insuranceArchivesFundSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + insuranceArchivesFundSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); + fundList.add(insuranceArchivesFundSchemePO); - InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = new InsuranceArchivesOtherSchemePO(); - insuranceArchivesOtherSchemePO.setTenantKey(""); - insuranceArchivesOtherSchemePO.setWelfareType(WelfareTypeEnum.OTHER.getValue()); - insuranceArchivesOtherSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); - insuranceArchivesOtherSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); - insuranceArchivesOtherSchemePO.setCreator(currentEmployeeId); - insuranceArchivesOtherSchemePO.setCreateTime(new Date()); - insuranceArchivesOtherSchemePO.setUpdateTime(new Date()); - insuranceArchivesOtherSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); - insuranceArchivesOtherSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); - otherList.add(insuranceArchivesOtherSchemePO); + InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = new InsuranceArchivesOtherSchemePO(); + insuranceArchivesOtherSchemePO.setTenantKey(""); + insuranceArchivesOtherSchemePO.setWelfareType(WelfareTypeEnum.OTHER.getValue()); + insuranceArchivesOtherSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); + insuranceArchivesOtherSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); + insuranceArchivesOtherSchemePO.setCreator(currentEmployeeId); + insuranceArchivesOtherSchemePO.setCreateTime(new Date()); + insuranceArchivesOtherSchemePO.setUpdateTime(new Date()); + insuranceArchivesOtherSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + insuranceArchivesOtherSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); + otherList.add(insuranceArchivesOtherSchemePO); - } - //导入社保档案 - if (CollectionUtils.isNotEmpty(socialList)) { - //根据人员id和个税扣缴义务人id删除对应档案 - socialList.forEach(getSocialSchemeMapper()::deleteByEmployeeIdAndPayOrg); - - List> partition = Lists.partition(socialList, 100); - partition.forEach(getSocialSchemeMapper()::batchSave); - } - //导入公积金档案 - if (CollectionUtils.isNotEmpty(fundList)) { - - //根据人员id和个税扣缴义务人id删除对应档案 - fundList.forEach(getFundSchemeMapper()::deleteByEmployeeIdAndPayOrg); - - List> partition = Lists.partition(fundList, 100); - partition.forEach(getFundSchemeMapper()::batchSave); - } - //导入其他福利档案 - if (CollectionUtils.isNotEmpty(otherList)) { - //根据人员id和个税扣缴义务人id删除对应档案 - otherList.forEach(getOtherSchemeMapper()::deleteByEmployeeIdAndPayOrg); - - List> partition = Lists.partition(otherList, 100); - partition.forEach(getOtherSchemeMapper()::batchSave); - } - //导入福利档案基础信息 - if (CollectionUtils.isNotEmpty(baseInfoPOList)) { - //根据人员id和个税扣缴义务人id删除对应档案 - baseInfoPOList.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg); -// //分批批量删除 - List baseInfoEmployeeIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getEmployeeId).collect(Collectors.toList()); - - //查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id) - List moreBaseInfoPOS = new ArrayList<>(); - - List> partitionInfo = Lists.partition((List) baseInfoEmployeeIds, 1000); - partitionInfo.forEach(part -> moreBaseInfoPOS.addAll( - getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part))); - - List newInsuranceArchivesBaseInfoList = new ArrayList<>(); - //设置社保、公积金、其他福利档案id - for (InsuranceArchivesBaseInfoPO po : baseInfoPOList) { - InsuranceArchivesBaseInfoPO moreBaseInfo = moreBaseInfoPOS.stream().filter(s -> Objects.equals(s.getEmployeeId(), po.getEmployeeId()) && Objects.equals(s.getPaymentOrganization(), po.getPaymentOrganization())).findFirst().orElse(null); - po.setSocialArchivesId(moreBaseInfo.getSocialArchivesId()); - po.setFundArchivesId(moreBaseInfo.getFundArchivesId()); - po.setOtherArchivesId(moreBaseInfo.getOtherArchivesId()); - newInsuranceArchivesBaseInfoList.add(po); } - //分批批量入库 - List> partition = Lists.partition(newInsuranceArchivesBaseInfoList, 100); - partition.forEach(getInsuranceBaseInfoMapper()::batchSave); - } + //导入社保档案 + if (CollectionUtils.isNotEmpty(socialList)) { + log.info("新增社保档案数量:{}", socialList.size()); + //根据人员id和个税扣缴义务人id删除对应档案 + socialList.forEach(getSocialSchemeMapper()::deleteByEmployeeIdAndPayOrg); + log.info("删除历史社保档案"); + if (isLog) { + log.info("新增社保档案明细:{}", socialList); + } + List> partition = Lists.partition(socialList, 100); + partition.forEach(getSocialSchemeMapper()::batchSave); + log.info("新增社保档案成功"); + } + //导入公积金档案 + if (CollectionUtils.isNotEmpty(fundList)) { + log.info("新增公积金档案数量:{}", fundList.size()); + //根据人员id和个税扣缴义务人id删除对应档案 + fundList.forEach(getFundSchemeMapper()::deleteByEmployeeIdAndPayOrg); + log.info("删除历史公积金档案"); + if (isLog) { + log.info("新增公积金档案明细:{}", fundList); + } + List> partition = Lists.partition(fundList, 100); + partition.forEach(getFundSchemeMapper()::batchSave); + log.info("新增公积金档案成功"); + } + //导入其他福利档案 + if (CollectionUtils.isNotEmpty(otherList)) { + log.info("新增其他福利档案数量:{}", otherList.size()); + //根据人员id和个税扣缴义务人id删除对应档案 + otherList.forEach(getOtherSchemeMapper()::deleteByEmployeeIdAndPayOrg); + log.info("删除历史其他福利档案"); + if (isLog) { + log.info("新增其他福利档案明细:{}", otherList); + } + List> partition = Lists.partition(otherList, 100); + partition.forEach(getOtherSchemeMapper()::batchSave); + log.info("新增其他福利档案成功"); + } + //导入福利档案基础信息 + if (CollectionUtils.isNotEmpty(baseInfoPOList)) { + //根据人员id和个税扣缴义务人id删除对应档案 + baseInfoPOList.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg); + log.info("删除历史福利档案基础信息"); + // //分批批量删除 + List baseInfoEmployeeIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getEmployeeId).collect(Collectors.toList()); - return baseInfoPOList; + //查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id) + List moreBaseInfoPOS = new ArrayList<>(); + log.info("查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id)"); + List> partitionInfo = Lists.partition((List) baseInfoEmployeeIds, 1000); + partitionInfo.forEach(part -> moreBaseInfoPOS.addAll( + getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part))); + + List newInsuranceArchivesBaseInfoList = new ArrayList<>(); + //设置社保、公积金、其他福利档案id + log.info("设置社保、公积金、其他福利档案id"); + for (InsuranceArchivesBaseInfoPO po : baseInfoPOList) { + InsuranceArchivesBaseInfoPO moreBaseInfo = moreBaseInfoPOS.stream().filter(s -> Objects.equals(s.getEmployeeId(), po.getEmployeeId()) && Objects.equals(s.getPaymentOrganization(), po.getPaymentOrganization())).findFirst().orElse(null); + po.setSocialArchivesId(moreBaseInfo.getSocialArchivesId()); + po.setFundArchivesId(moreBaseInfo.getFundArchivesId()); + po.setOtherArchivesId(moreBaseInfo.getOtherArchivesId()); + newInsuranceArchivesBaseInfoList.add(po); + } + log.info("福利档案基础信息分批批量入库,入库数量:{}", newInsuranceArchivesBaseInfoList.size()); + //分批批量入库 + if (isLog) { + log.info("新增福利档案基础信息明细:{}", newInsuranceArchivesBaseInfoList); + } + List> partition = Lists.partition(newInsuranceArchivesBaseInfoList, 100); + partition.forEach(getInsuranceBaseInfoMapper()::batchSave); + } + + return baseInfoPOList; + } catch (Exception e) { + log.info("新增福利档案出错:{}", e.getMessage(), e); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "福利档案新增失败")); + } } /** * 分批更新福利档案基础信息的runStatus diff --git a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java index d72a2c01c..89c03005e 100644 --- a/src/com/engine/salary/service/impl/SICategoryServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICategoryServiceImpl.java @@ -1,10 +1,13 @@ package com.engine.salary.service.impl; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cmd.sicategory.SICategoryGetFormCmd; import com.engine.salary.cmd.sicategory.SICategoryInsertCmd; import com.engine.salary.cmd.sicategory.SICategoryUpdateCmd; import com.engine.salary.cmd.sicategory.SICategoryUpdateStatusByIdCmd; +import com.engine.salary.encrypt.EncryptUtil; +import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.sicategory.dto.ICategoryDTO; import com.engine.salary.entity.sicategory.dto.ICategoryFormDTO; import com.engine.salary.entity.sicategory.dto.ICategoryListDTO; @@ -14,7 +17,9 @@ import com.engine.salary.enums.sicategory.DataTypeEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; +import com.engine.salary.service.RecordsBuildService; import com.engine.salary.service.SICategoryService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryEnumUtil; @@ -25,6 +30,7 @@ import com.engine.salary.util.page.SalaryPageUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; @@ -41,6 +47,15 @@ public class SICategoryServiceImpl extends Service implements SICategoryService return MapperProxyFactory.getProxy(ICategoryMapper.class); } + private InsuranceAccountDetailMapper getInsuranceAccountDetailMapper() { + return MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class); + } + + public RecordsBuildService getRecordsBuildService(User user) { + return ServiceUtil.getService(RecordsBuildServiceImpl.class, user); + } + + private EncryptUtil encryptUtil = new EncryptUtil(); @Override public Map getForm(Map params) { @@ -152,6 +167,78 @@ public class SICategoryServiceImpl extends Service implements SICategoryService return null; } + @Override + public Map updateCategoryNameAndPayScope(ICategoryFormDTO iCategoryFormDTO) { + ICategoryPO categoryPO = getICategoryMapper().getByIdAndDataType(iCategoryFormDTO.getId(), DataTypeEnum.CUSTOM.getValue()); + if(categoryPO == null){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "自定义福利不存在")); + } + // 判断是否启用 + Integer isUse = categoryPO.getIsUse(); + if(isUse == 1){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "编辑失败,请先关闭启用按钮!")); + } + // 判断福利名称是否重复 + List iCategoryPOS = getICategoryMapper().listByName(iCategoryFormDTO.getInsuranceName()); + iCategoryPOS = iCategoryPOS.stream().filter(f -> !f.getId().equals(iCategoryFormDTO.getId())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(iCategoryPOS)){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "福利名称不能重复")); + } + ICategoryPO iCategoryPO = ICategoryPO.builder().id(iCategoryFormDTO.getId()).insuranceName(iCategoryFormDTO.getInsuranceName()) + .paymentScope(SalaryEnumUtil.enumArrToString(iCategoryFormDTO.getPaymentScope())) + .updateTime(new Date()) + .build(); + getICategoryMapper().updateNameAndPayScopeById(iCategoryPO); + return null; + } + + @Override + public Map deleteCustomCategory(ICategoryFormDTO iCategoryFormDTO) { + ICategoryPO categoryPO = getICategoryMapper().getByIdAndDataType(iCategoryFormDTO.getId(), DataTypeEnum.CUSTOM.getValue()); + if(categoryPO == null){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "自定义福利不存在")); + } + // 判断是否启用 + Integer isUse = categoryPO.getIsUse(); + if(isUse == 1){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "删除失败,请先关闭启用按钮!")); + } + // 判断自定义福利项是否存在核算数据 + //获取所有福利核算数据 + List insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().listAll(); + encryptUtil.decryptList(insuranceAccountDetailPOS, InsuranceAccountDetailPO.class); + //数据组装 + List> records = getRecordsBuildService(user).buildCommonRecords(insuranceAccountDetailPOS, null); + String welfareTypeName = ""; + switch (categoryPO.getWelfareType()) { + case 1: + welfareTypeName = "social"; + break; + case 2: + welfareTypeName = "fund"; + break; + case 3: + welfareTypeName = "other"; + break; + default: + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(542456, "福利类型不在")); + } + String welfareNameStart = categoryPO.getId() + welfareTypeName; + //校验福利项是否存在核算记录 + records.forEach(f -> { + if (!Objects.isNull(f.get(welfareNameStart + "Per")) + || !Objects.isNull(f.get(welfareNameStart + "Com")) + || !Objects.isNull(f.get(welfareNameStart + "Base"))) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "删除失败,已存在福利核算记录")); + } + }); + + //删除自定义福利项 + categoryPO.setUpdateTime(new Date()); + getICategoryMapper().deleteCustomCategoryById(categoryPO); + return null; + } + private ICategoryDTO convertICategoryPO2DTO(ICategoryPO iCategoryPO){ // return ICategoryDTO.builder().id(iCategoryPO.getId()).insuranceName(iCategoryPO.getInsuranceName()) // .welfareType(iCategoryPO.getWelfareType()) diff --git a/src/com/engine/salary/service/impl/SIImportServiceImpl.java b/src/com/engine/salary/service/impl/SIImportServiceImpl.java index 159ea90b7..111781911 100644 --- a/src/com/engine/salary/service/impl/SIImportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIImportServiceImpl.java @@ -77,22 +77,9 @@ public class SIImportServiceImpl extends Service implements SIImportService { //工作簿名称 String sheetName; //表头 -// if (param.getRunStatuses().size() > 0) { -// if (param.getRunStatuses().contains(EmployeeStatusEnum.STAY_ADD.getValue()) && param.getRunStatuses().size() == 1) { -// sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板") + "-" + EmployeeStatusEnum.STAY_ADD.getDefaultLabel(); -// } else if (param.getRunStatuses().contains(EmployeeStatusEnum.PAYING.getValue()) && param.getRunStatuses().contains(EmployeeStatusEnum.STAY_DEL.getValue()) && param.getRunStatuses().size() == 2) { -// sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板") + "-" + SalaryI18nUtil.getI18nLabel(user.getLanguage(),542504, "在缴员工"); -// } else if (param.getRunStatuses().contains(EmployeeStatusEnum.STAY_DEL.getValue()) && param.getRunStatuses().size() == 1) { -// sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板") + "-" + EmployeeStatusEnum.STAY_DEL.getDefaultLabel(); -// } else if (param.getRunStatuses().contains(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue()) && param.getRunStatuses().contains(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()) && param.getRunStatuses().size() == 2) { -// sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板") + "-" + SalaryI18nUtil.getI18nLabel(user.getLanguage(),542505, "停缴员工"); -// } else { -// sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板"); -// } -// } else { -// sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板"); -// } - if (param.getRunStatuses().size() > 0) { + if (param.isExtWelArchiveList()) { + sheetName = SalaryI18nUtil.getI18nLabel(542679, "非系统人员"); + } else if (param.getRunStatuses().size() > 0) { if (param.getRunStatuses().contains(EmployeeStatusEnum.STAY_ADD.getValue()) && param.getRunStatuses().size() == 1) { sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542711, "待增员"); } else if (param.getRunStatuses().contains(EmployeeStatusEnum.PAYING.getValue()) && param.getRunStatuses().contains(EmployeeStatusEnum.STAY_DEL.getValue()) && param.getRunStatuses().size() == 2) { @@ -108,6 +95,7 @@ public class SIImportServiceImpl extends Service implements SIImportService { sheetName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),538001, "社保福利档案"); } + List headers = buildHeader(); InsuranceArchivesListParam request = InsuranceArchivesListParam.builder().build(); if (param.getHireDate() != null && param.getHireDate().length == 2) { @@ -145,7 +133,11 @@ public class SIImportServiceImpl extends Service implements SIImportService { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); List page = new ArrayList<>(); - page = socialSchemeMapper.queryEmployeeList(param); + if (param.isExtWelArchiveList()) { + page = socialSchemeMapper.queryExtEmployeeList(param); + } else { + page = socialSchemeMapper.queryEmployeeList(param); + } PageInfo pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), page, InsuranceArchivesEmployeePO.class); int total = (int)pageInfo.getTotal(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 3b401e4b7..7bfc546fc 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -221,7 +221,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc resultValue = handleConsolidatedTax(resultValue, salaryItemPO, salaryAcctCalculateBO, otherSalaryAcctEmployeePOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()), otherSalaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId())); // 处理小数点 - resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO, salarySobBackItems, salarySobBackItemMap); + resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO, salarySobBackItems, salarySobBackItemMap, salaryItemIdKeySalarySobItemPOMap); //是否锁定 if (lockSalaryItemIds.contains(salaryItemId) && salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId) != null) { resultValue = salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId).getResultValue(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index dc725dd3d..b8634af1c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -154,8 +154,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryI18nUtil.getI18nLabel(user.getLanguage(),125238, "手机号"), SalaryI18nUtil.getI18nLabel(user.getLanguage(),1933,"工号"), SalaryI18nUtil.getI18nLabel(user.getLanguage(),15890, "员工状态"), - SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期"), - SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期") + SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期") +// SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期") }; List headerList = new ArrayList<>(Arrays.asList(header)); // 查询薪资核算人员 @@ -187,8 +187,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryI18nUtil.getI18nLabel(user.getLanguage(),125238, "手机号"), SalaryI18nUtil.getI18nLabel(user.getLanguage(),1933,"工号"), SalaryI18nUtil.getI18nLabel(user.getLanguage(),15890, "员工状态"), - SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期"), - SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期") + SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期") +// SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期") }; List headerList = new ArrayList<>(Arrays.asList(header)); // 查询薪资核算人员(环比上月减少) @@ -219,8 +219,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryI18nUtil.getI18nLabel(user.getLanguage(),125238, "手机号"), SalaryI18nUtil.getI18nLabel(user.getLanguage(),1933,"工号"), SalaryI18nUtil.getI18nLabel(user.getLanguage(),15890, "员工状态"), - SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期"), - SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期") + SalaryI18nUtil.getI18nLabel(user.getLanguage(),1516, "入职日期") +// SalaryI18nUtil.getI18nLabel(user.getLanguage(),15961, "离职日期") }; List headerList = new ArrayList<>(Arrays.asList(header)); // 查询薪资核算人员(环比上月增加) @@ -263,7 +263,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc row.add(dto.getJobNum()); row.add(dto.getStatus()); row.add(dto.getHireDate()); - row.add(dto.getDismissDate()); +// row.add(dto.getDismissDate()); rows.add(row); } return rows; diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index b39254560..870d9a274 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -330,6 +330,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } // 查询薪资核算所用薪资账套的薪资项目 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + Map salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ // 是回算,获取回算项 @@ -337,6 +338,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); } List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); + // 查询薪资核算结果 List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); @@ -351,7 +353,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .filter(NumberUtils::isCreatable) .map(BigDecimal::new) .reduce(BigDecimal.ZERO, BigDecimal::add); - map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap())); + map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); }); return map; } diff --git a/src/com/engine/salary/service/impl/SalaryBillItemNameServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillItemNameServiceImpl.java new file mode 100644 index 000000000..427f28ada --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryBillItemNameServiceImpl.java @@ -0,0 +1,182 @@ +package com.engine.salary.service.impl; + +import com.api.formmode.mybatis.util.SqlProxyHandle; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.salaryBill.param.SalaryBillItemNameSaveParam; +import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; +import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salarybill.SalaryBillItemNameMapper; +import com.engine.salary.service.SalaryBillItemNameService; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.SalaryTemplateService; +import com.engine.salary.util.SalaryEntityUtil; +import com.google.common.collect.Lists; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName SalaryBillItemNameServiceImpl + * @date 2023/07/18 16:17 + * @description + */ +public class SalaryBillItemNameServiceImpl extends Service implements SalaryBillItemNameService { + + private SalaryBillItemNameMapper getSalaryBillItemNameMapper() { + return SqlProxyHandle.getProxy(SalaryBillItemNameMapper.class); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private SalaryTemplateService getSalaryTemplateService(User user) { + return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); + } + @Override + public List listAll() { + return getSalaryBillItemNameMapper().listAll(); + } + + @Override + public SalaryBillItemNamePO getById(Long id) { + return getSalaryBillItemNameMapper().getById(id); + } + + @Override + public int insertIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO) { + return getSalaryBillItemNameMapper().insertIgnoreNull(salaryBillItemNamePO); + } + + @Override + public int update(SalaryBillItemNamePO salaryBillItemNamePO) { + return getSalaryBillItemNameMapper().update(salaryBillItemNamePO); + } + + @Override + public int updateIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO) { + return getSalaryBillItemNameMapper().updateIgnoreNull(salaryBillItemNamePO); + } + + @Override + public int delete(Long id) { + return getSalaryBillItemNameMapper().delete(id); + } + + @Override + public List ListByTemplateAndType(SalaryBillItemNamePO param) { + return getSalaryBillItemNameMapper().listSome(param); + } + + @Override + public void saveItemShowName(List saveList) { + saveList= saveList.stream().filter(param -> !Objects.isNull(param.getSalaryTemplateId()) && CollectionUtils.isNotEmpty(param.getItemShowNameSetting())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(saveList)) + return; + List templateIdList = saveList.stream().map(SalaryBillItemNameSaveParam::getSalaryTemplateId).distinct().collect(Collectors.toList()); + if(CollectionUtils.isEmpty(templateIdList) || templateIdList.size()>1){ + throw new SalaryRunTimeException("工资单模板id为空,或存在多个工资单模板id"); + } + Long salaryTemplateId = templateIdList.get(0); + SalaryTemplatePO salaryTemplatePO = getSalaryTemplateService(user).getById(salaryTemplateId); + if(Objects.isNull(salaryTemplatePO)){ + throw new SalaryRunTimeException("工资单模板不存在或已被删除"); + } + List needInsertList = new ArrayList<>(); + List needUpdateList = new ArrayList<>(); + Date now = new Date(); + // 根据模板类型分组 + Map> saveMap = SalaryEntityUtil.convert2Map(saveList, SalaryBillItemNameSaveParam::getSalaryBillType, SalaryBillItemNameSaveParam::getItemShowNameSetting); + + for(Map.Entry> entry : saveMap.entrySet()){ + // 获取已经设置的展示名 + List billItemNameList = ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(salaryTemplateId).salaryBillType(entry.getKey()).build()); + Map billItemNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId); + List needDeleteItemIdList = new ArrayList<>(); + + entry.getValue().stream().forEach(setting -> { + if(StringUtils.isBlank(setting.getSalaryItemShowName())){ + // 显示名为空则删除设置 + needDeleteItemIdList.add(setting.getSalaryItemId()); + }else{ + if(billItemNameMap.containsKey(setting.getSalaryItemId())){ + // 更新 + SalaryBillItemNamePO po = billItemNameMap.get(setting.getSalaryItemId()); + po.setSalaryItemShowName(setting.getSalaryItemShowName()); + po.setUpdateTime(now); + needUpdateList.add(po); + }else{ + // 新增 + needInsertList.add(SalaryBillItemNamePO.builder() + .id(IdGenerator.generate()) + .salaryItemId(setting.getSalaryItemId()) + .salaryItemShowName(setting.getSalaryItemShowName()) + .salaryTemplateId(salaryTemplateId) + .salaryBillType(entry.getKey()) + .createTime(now) + .updateTime(now) + .creator(Long.valueOf(user.getUID())) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + } + } + }); + // 删除 + batchDeleteByItemIdsAndTemplateId(needDeleteItemIdList, salaryTemplateId, entry.getKey()); + } + // 入库 + batchUpdate(needUpdateList); + batchInsert(needInsertList); + } + + @Override + public void batchUpdate(List needUpdateList) { + if(CollectionUtils.isEmpty(needUpdateList)){ + return; + } + List> partition = Lists.partition(needUpdateList, 500); + partition.forEach(getSalaryBillItemNameMapper()::batchUpdate); + } + + @Override + public void batchInsert(List needInsertList) { + if(CollectionUtils.isEmpty(needInsertList)){ + return; + } + List> partition = Lists.partition(needInsertList, 500); + partition.forEach(getSalaryBillItemNameMapper()::batchInsert); + } + + @Override + public void deleteByIds(List needDeleteIds) { + if(CollectionUtils.isEmpty(needDeleteIds)){ + return; + } + List> partition = Lists.partition(needDeleteIds, 1000); + partition.forEach(getSalaryBillItemNameMapper()::deleteByIds); + } + + public void batchDeleteByItemIdsAndTemplateId(List salaryItemIds, Long salaryTemplateId, Integer salaryBillType) { + if(CollectionUtils.isEmpty(salaryItemIds) || Objects.isNull(salaryTemplateId) || Objects.isNull(salaryBillType)) + return; + getSalaryBillItemNameMapper().deleteByItemIdsAndTemplateId(salaryItemIds, salaryTemplateId, salaryBillType); + } + + @Override + public void deleteByTemplateIds(Collection ids) { + if(CollectionUtils.isEmpty(ids)){ + return; + } + getSalaryBillItemNameMapper().deleteByTemplateIds(ids); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index d4cbdb8bf..fb2567f0c 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -72,13 +72,13 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee public List listAll(UseEmployeeTypeEnum empType) { List result = new ArrayList<>(); if (empType == UseEmployeeTypeEnum.ORG) { - result = employBiz.listEmployee(); + result = employBiz.listAll(); } if (empType == UseEmployeeTypeEnum.EXT) { result = getExtEmpService(user).listEmployee(); } if (empType == UseEmployeeTypeEnum.ALL) { - result.addAll(employBiz.listEmployee()); + result.addAll(employBiz.listAll()); result.addAll(getExtEmpService(user).listEmployee()); } return result; diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 3c390c7f8..1aab9b654 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -239,7 +239,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService newSalaryItemPO.setHideDefault(saveParam.getHideDefault()); newSalaryItemPO.setRoundingMode(saveParam.getRoundingMode()); newSalaryItemPO.setPattern(saveParam.getPattern()); -// newSalaryItemPO.setValueType(saveParam.getValueType()); + newSalaryItemPO.setValueType(saveParam.getValueType()); newSalaryItemPO.setDataType(saveParam.getDataType()); newSalaryItemPO.setFormulaId(Objects.equals(saveParam.getValueType(), SalaryValueTypeEnum.INPUT.getValue()) ? 0L : saveParam.getFormulaId()); newSalaryItemPO.setDescription(saveParam.getDescription()); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 582a41a19..21cd4059a 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1579,6 +1579,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } // 查询薪资核算所用薪资账套的薪资项目 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + Map salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getId); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)) { // 是回算,获取回算项 @@ -1605,7 +1606,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .filter(NumberUtils::isCreatable) .map(BigDecimal::new) .reduce(BigDecimal.ZERO, BigDecimal::add); - map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap())); + map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); }); return map; } diff --git a/src/com/engine/salary/service/impl/SalarySobItemHideServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemHideServiceImpl.java index 8a30b7ba5..f4e6895d2 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemHideServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemHideServiceImpl.java @@ -13,6 +13,16 @@ public class SalarySobItemHideServiceImpl extends Service implements SalarySobIt @Override public List listHideGroupBysalarySobId(SalarySobItemHidePO salarySobPO) { - return salarySobItemHideMapper.listSome(salarySobPO); + return salarySobItemHideMapper.listHideItemIds(salarySobPO); + } + + @Override + public List listSome(SalarySobItemHidePO po) { + return salarySobItemHideMapper.listSome(po); + } + + @Override + public void updateById(SalarySobItemHidePO salarySobItemHidePO) { + salarySobItemHideMapper.update(salarySobItemHidePO); } } diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 1b5beea90..ac04c626f 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -11,9 +11,11 @@ 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.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobDefaultItemMapper; import com.engine.salary.mapper.salarysob.SalarySobEmpFieldMapper; @@ -25,8 +27,10 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.valid.ValidUtil; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.BaseBean; import weaver.hrm.User; import java.util.*; @@ -201,10 +205,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe // 查询薪资账套的薪资项目分类 List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salarySobId); - if (isBackCalc) { - // 回算分类 - - } // 获取关闭显示的分类 List hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build()); // 过滤关闭显示的薪资项目分类 @@ -348,6 +348,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe List needUpdateGroup = itemGroups.stream().filter(f -> f.getId() != null && oldGroupIds.contains(f.getId())).collect(Collectors.toList()); List needDeleteGroupIds = oldGroupIds.stream().filter(f -> !newGroupIds.contains(f)).collect(Collectors.toList()); + // 获取所有薪资项目 + List allSalaryItemList = getSalaryItemService(user).listAll(); + Map salaryItemsMap = SalaryEntityUtil.convert2Map(allSalaryItemList, SalaryItemPO::getId); + // 需要保存的隐藏项目 List needInsertItemShow = new ArrayList<>(); @@ -390,6 +394,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe for (SalarySobItemSaveParam.SalarySobItemParam itemParam : itemGroupParam.getItems()) { + SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() .salarySobId(salarySobId) .salaryItemId(itemParam.getSalaryItemId()) @@ -403,6 +408,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)) + .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) + .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) + .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) .build(); salarySobItems.add(salarySobItemPO); @@ -465,6 +473,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe //新增 for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needAddItems) { + SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() .salarySobId(salarySobId) .salaryItemId(itemParam.getSalaryItemId()) @@ -478,6 +487,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .deleteType(NumberUtils.INTEGER_ZERO) + .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) + .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) + .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) .build(); salarySobItems.add(salarySobItemPO); @@ -499,6 +511,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe } //更新 for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { + SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() .id(itemParam.getId()) .salaryItemId(itemParam.getSalaryItemId()) @@ -508,6 +521,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)) .updateTime(now) .deleteType(NumberUtils.INTEGER_ZERO) + .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) + .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) + .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) .build(); getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO); // 保存薪资项目是否展示 @@ -547,7 +563,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe List needUpdateItems = items.stream().filter(f -> f.getId() != null && oldItemIds.contains(f.getId())).collect(Collectors.toList()); for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needAddItems) { - + SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() .salarySobId(salarySobId) .salaryItemId(itemParam.getSalaryItemId()) @@ -561,6 +577,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)) + .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) + .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) + .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) .build(); salarySobItems.add(salarySobItemPO); @@ -583,13 +602,16 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe } for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { - + SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap); SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder() .id(itemParam.getId()) .formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)) .sortedIndex(itemParam.getSortedIndex()) .updateTime(now) .canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)) + .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) + .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) + .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) .build(); getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO); @@ -622,6 +644,13 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe batchSaveShow(needInsertItemShow); } + private SalaryItemPO checkItemExists(Long salaryItemId, Map salaryItemsMap) { + SalaryItemPO salaryItemPO = salaryItemsMap.get(salaryItemId); + if (ObjectUtils.isEmpty(salaryItemPO)){ + throw new SalaryRunTimeException("保存失败!存在薪资项目不存在或已被删除"); + } + return salaryItemPO; + } private void handleEmpField(SalarySobItemSaveParam saveParam) { @@ -697,4 +726,66 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe public void deleteItemShowBySalarySobIds(Collection salarySobIds) { salarySobItemMapper.deleteItemShowBySalarySobId(salarySobIds); } + + @Override + public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) { + SalarySobItemFormDTO salarySobItemFormDTO = new SalarySobItemFormDTO(); + salarySobItemFormDTO.setCanEdit(1); + // 默认可以编辑 + if (ObjectUtils.isNotEmpty(param.getSalarySobId()) && ObjectUtils.isNotEmpty(param.getSalaryItemId())) { + // 查询薪资账套 + SalarySobPO salarySobPO = salarySobBiz.getById(param.getSalarySobId()); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); + } + // 查询薪资项目 + List salarySobItemPOS = getSalarySobItemMapper().listSome(SalarySobItemPO.builder().salarySobId(param.getSalarySobId()).salaryItemId(param.getSalaryItemId()).build()); + if (CollectionUtils.isEmpty(salarySobItemPOS)){ + throw new SalaryRunTimeException("账套中薪资项目不存在"); + } + SalarySobItemPO salarySobItemPO = salarySobItemPOS.get(0); + SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(salarySobItemPO.getSalaryItemId()); + if (ObjectUtils.isEmpty(salaryItemPO)){ + throw new SalaryRunTimeException("薪资项目不存在或已被删除"); + } + //获取系统值 + List salarySobDefaultItemPOS = getSalarySobDefaultItemMapper().listAll(); + salarySobDefaultItemPOS = salarySobDefaultItemPOS.stream().filter(po -> po.getSysSalaryItemId() != 0).collect(Collectors.toList()); + Map longIntegerMap = SalaryEntityUtil.convert2Map(salarySobDefaultItemPOS, SalarySobDefaultItemPO::getSysSalaryItemId, SalarySobDefaultItemPO::getCanDelete); + if (salaryItemPO.getSysSalaryItemId() != null){ + salarySobItemPO.setCanDelete(longIntegerMap.getOrDefault(salaryItemPO.getSysSalaryItemId(), 1)); + } + // 获取薪资项目公式 + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(salarySobItemPO.getFormulaId())); + // 强制开启账套的公式配置 + BaseBean baseBean = new BaseBean(); + final Boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); + // 获取核算时隐藏的薪资项目id + List hideItemIds = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder() + .salarySobId(param.getSalarySobId()) + .isGroup(new Integer(0)) + .salaryItemId(param.getSalaryItemId()) + .build()); + + String formulaContent = CollectionUtils.isEmpty(expressFormulas) ? "" : expressFormulas.get(0).getFormula(); + Integer valueType = ObjectUtils.isEmpty(salarySobItemPO.getValueType()) ? salaryItemPO.getValueType() : salarySobItemPO.getValueType(); + salarySobItemFormDTO + .setId(salarySobItemPO.getId()) + .setName(salaryItemPO.getName()) + .setItemHide(hideItemIds.contains(salaryItemPO.getId()) ? 1 : 0) + .setDataType(salaryItemPO.getDataType()) + .setRoundingMode(ObjectUtils.isEmpty(salarySobItemPO.getRoundingMode()) ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()) + .setPattern(ObjectUtils.isEmpty(salarySobItemPO.getPattern()) ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()) + .setValueType(valueType) + .setFormulaId(salarySobItemPO.getFormulaId()) + .setFormulaContent(CollectionUtils.isNotEmpty(expressFormulas) ? formulaContent : "") + .setOriginFormulaContent(valueType.equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : "") + .setOriginSqlContent(valueType.equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "") + .setUseInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) + .setDescription(salarySobItemPO.getDescription()) + .setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0); + } + return salarySobItemFormDTO; + } + } diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index cbbf93a7f..a20fa610c 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -7,11 +7,13 @@ import com.engine.salary.biz.SalarySobBiz; import com.engine.salary.biz.SalaryTemplateBiz; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; import com.engine.salary.entity.salaryBill.param.SalaryTemplateCopyParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateDefaultUseParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam; import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam; +import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; @@ -26,7 +28,9 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.mzlion.core.utils.BeanUtils; +import dm.jdbc.util.IdGenerator; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; @@ -60,6 +64,10 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); } + private SalaryBillItemNameService getSalaryBillItemNameService(User user) { + return ServiceUtil.getService(SalaryBillItemNameServiceImpl.class, user); + } + @Override public SalaryTemplatePO getById(Long id) { return mapper.getById(id); @@ -139,6 +147,10 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate salaryTemplate.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0); salaryTemplate.setAutoSendCycleType(saveParam.getAutoSendCycleType()); mapper.insert(salaryTemplate); + + // 存储工资单项目自定义名称信息 + saveParam.getSalaryBillItemNameSetting().stream().forEach(set -> set.setSalaryTemplateId(salaryTemplate.getId())); + getSalaryBillItemNameService(user).saveItemShowName(saveParam.getSalaryBillItemNameSetting()); // 记录日志 // SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate, // salaryTemplate.getId(), @@ -205,6 +217,24 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate salaryTemplateNew.setSalaryItemSetting(saveParam.getSalaryItemSetting() != null ? JSONUtil.toJsonStr(saveParam.getSalaryItemSetting()) : ""); salaryTemplateNew.setReplenishSalaryItemSetting(saveParam.getReplenishSalaryItemSetting() != null ? JSONUtil.toJsonStr(saveParam.getReplenishSalaryItemSetting()) : ""); mapper.updateById(salaryTemplateNew); + + // 保存自定义工资单项目名称信息 + getSalaryBillItemNameService(user).saveItemShowName(saveParam.getSalaryBillItemNameSetting()); + // 模板中没有的薪资项目需要同步删除显示名称表 + List billItemNameList = getSalaryBillItemNameService(user).ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(saveParam.getId()).build()); + Map> billItemNameMap = SalaryEntityUtil.group2Map(billItemNameList, SalaryBillItemNamePO::getSalaryBillType); + List saveItemList = saveParam.getSalaryItemSetting().stream().map(SalaryTemplateSalaryItemSetListDTO::getItems).flatMap(Collection::stream).collect(Collectors.toList()); + Set saveItemIdList = SalaryEntityUtil.properties(saveItemList, SalaryTemplateSalaryItemListDTO::getSalaryItemId); + // 正常工资单模板中删除的薪资项目 + List needDeleteIds = billItemNameMap.getOrDefault(NumberUtils.INTEGER_ZERO, Collections.emptyList()).stream().filter(salaryBillItemNamepo -> !saveItemIdList.contains(salaryBillItemNamepo.getSalaryItemId().toString())) + .map(SalaryBillItemNamePO::getId).collect(Collectors.toList()); + // 补发工资单模板中删除的薪资项目 + List replenishItemList = saveParam.getReplenishSalaryItemSetting().stream().map(SalaryTemplateSalaryItemSetListDTO::getItems).flatMap(Collection::stream).collect(Collectors.toList()); + Set saveReplenishItemIdList = SalaryEntityUtil.properties(replenishItemList, SalaryTemplateSalaryItemListDTO::getSalaryItemId); + needDeleteIds.addAll(billItemNameMap.getOrDefault(NumberUtils.INTEGER_ONE, Collections.emptyList()).stream().filter(salaryBillItemNamepo -> !saveReplenishItemIdList.contains(salaryBillItemNamepo.getSalaryItemId().toString())) + .map(SalaryBillItemNamePO::getId).collect(Collectors.toList())); + getSalaryBillItemNameService(user).deleteByIds(needDeleteIds); + // 记录日志 // SalaryLoggerUtil.recordUpdateSingleLog(salaryTemplateLoggerTemplate, // salaryTemplate.getId(), @@ -239,6 +269,21 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate salaryTemplateNew.setName(copyParam.getName()); salaryTemplateNew.setUseType(SalaryTemplateWhetherEnum.FALSE.getValue()); mapper.insert(salaryTemplateNew); + + // 复制工资单自定义名称信息 + List billItemNamePOList = getSalaryBillItemNameService(user).ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(copyParam.getId()).build()); + if(CollectionUtils.isNotEmpty(billItemNamePOList)){ + Date now = new Date(); + List needInsertList = billItemNamePOList.stream().map(po -> { + SalaryBillItemNamePO newSalaryBillItemNamePO = new SalaryBillItemNamePO(); + BeanUtils.copyProperties(po, newSalaryBillItemNamePO); + newSalaryBillItemNamePO.setId(IdGenerator.generate()); + newSalaryBillItemNamePO.setUpdateTime(now); + newSalaryBillItemNamePO.setSalaryTemplateId(salaryTemplateNew.getId()); + return newSalaryBillItemNamePO; + }).collect(Collectors.toList()); + getSalaryBillItemNameService(user).batchInsert(needInsertList); + } // 记录日志 // SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate, // salaryTemplateNew.getId(), @@ -261,6 +306,8 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate } // TODO 正在使用的记录不允许删除 mapper.deleteByIds(ids); + // 删除工资单重命名表 + getSalaryBillItemNameService(user).deleteByTemplateIds(ids); // 记录日志 // salaryTemplates.forEach(e -> SalaryLoggerUtil.recordDeleteSingleLog(salaryTemplateLoggerTemplate, // e.getId(), @@ -309,9 +356,31 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate } @Override - public List getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish) { + public List getSalaryItemSetContainHide(Long salarySobId, Long salaryTemplateId, boolean isReplenish) { SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId); - return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish, user); + // 获取工资单薪资项目展示名信息 + List billItemNameList = getSalaryBillItemNameService(user).ListByTemplateAndType( + SalaryBillItemNamePO.builder().salaryTemplateId(salaryTemplateId) + .salaryBillType(isReplenish ? 1 : 0) + .build()); + Map itemShowNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId, SalaryBillItemNamePO::getSalaryItemShowName); + + List salaryTemplateSalaryItemSetListDTOS = SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish, user); + salaryTemplateSalaryItemSetListDTOS.stream() + .filter(data -> !StringUtils.equals(data.getGroupId(), "111111111111111111")) + .forEach(data -> { + data.getItems().forEach(item -> { + Long salaryItemId = Long.valueOf(item.getSalaryItemId()); + if(itemShowNameMap.containsKey(salaryItemId)){ + item.setSalaryItemShowName(itemShowNameMap.get(salaryItemId)); + item.setName(itemShowNameMap.get(salaryItemId) + "(" + item.getOriginName() +")"); + }else{ + item.setSalaryItemShowName(item.getOriginName()); + item.setName(item.getOriginName()); + } + }); + }); + return salaryTemplateSalaryItemSetListDTOS; } @Override diff --git a/src/com/engine/salary/web/ExtEmpController.java b/src/com/engine/salary/web/ExtEmpController.java index 9be31acf7..4e6225435 100644 --- a/src/com/engine/salary/web/ExtEmpController.java +++ b/src/com/engine/salary/web/ExtEmpController.java @@ -1,13 +1,17 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.extemp.param.ExtEmpImportParam; import com.engine.salary.entity.extemp.param.ExtEmpQueryParam; import com.engine.salary.entity.extemp.param.ExtEmpSaveParam; import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.ExtEmpWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -16,7 +20,13 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDate; import java.util.Collection; +import java.util.Map; /** * 外部人员 @@ -26,6 +36,7 @@ import java.util.Collection; * @author qiantao * @version 1.0 **/ +@Slf4j public class ExtEmpController { private ExtEmpWrapper getExtEmpWrapper(User user) { @@ -72,6 +83,50 @@ public class ExtEmpController { return new ResponseResult(user).run(getExtEmpWrapper(user)::detail, id); } + // **********************************非系统人员导入 start*********************************/ + //导出导入模板 + @GET + @Path("/importtemplate/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportImportTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getExtEmpWrapper(user).exportImportTemplate(); + String time = LocalDate.now().toString(); + String fileName = SalaryI18nUtil.getI18nLabel(0, "非系统人员导入模板") + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8").replaceAll("\\+", "%20"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("非系统人员导入模板导出异常", e); + throw e; + } + } + //导入非系统人员 + @POST + @Path("/importExtEmp") + @Produces(MediaType.APPLICATION_JSON) + public String importExtEmp(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ExtEmpImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getExtEmpWrapper(user)::importExtEmp, param); + } + + @POST + @Path("/preview") + @Produces(MediaType.APPLICATION_JSON) + public String previewImportExtEmp(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ExtEmpImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getExtEmpWrapper(user)::previewImportExtEmp, param); + } + // **********************************非系统人员导入 end*********************************/ } diff --git a/src/com/engine/salary/web/SIArchivesController.java b/src/com/engine/salary/web/SIArchivesController.java index 4ba84fdbc..fc85c0d00 100644 --- a/src/com/engine/salary/web/SIArchivesController.java +++ b/src/com/engine/salary/web/SIArchivesController.java @@ -235,4 +235,20 @@ public class SIArchivesController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult, Map>(user).run(getService(user)::deleteArchive, ids); } + + /** + * 查询非系统人员福利档案列表 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/getExtTable") + @Produces(MediaType.APPLICATION_JSON) + public String getExtTable(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody InsuranceArchivesListParam param) { + User user = HrmUserVarify.getUser(request, response); + param.setExtWelArchiveList(true); + return new ResponseResult>(user).run(getService(user)::listPage, param); + } } diff --git a/src/com/engine/salary/web/SICategoryController.java b/src/com/engine/salary/web/SICategoryController.java index 18dece47a..330c73f19 100644 --- a/src/com/engine/salary/web/SICategoryController.java +++ b/src/com/engine/salary/web/SICategoryController.java @@ -112,7 +112,8 @@ public class SICategoryController { public String updateCustomCategoryName(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody ICategoryFormDTO iCategoryFormDTO) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); - return new ResponseResult< ICategoryFormDTO, Map>(user).run(getService(user)::updateCategoryName, iCategoryFormDTO); +// return new ResponseResult< ICategoryFormDTO, Map>(user).run(getService(user)::updateCategoryName, iCategoryFormDTO); + return new ResponseResult< ICategoryFormDTO, Map>(user).run(getService(user)::updateCategoryNameAndPayScope, iCategoryFormDTO); } @@ -128,20 +129,18 @@ public class SICategoryController { /** - * 该接口暂时没用,删除福利类型对档案和台账核算都有很大的影响,暂时还没考虑好怎么做 - * 删除福利类型 - * - * @param request - * @param response - * @return + * 删除自定义福利项 + * 必要条件: + * 1-福利项未启用, + * 2-福利核算数据中不能存在该福利项的核算数据 */ + @POST @Path("/deleteCustomCategory") @Produces(MediaType.APPLICATION_JSON) - public String deleteSoftById(@Context HttpServletRequest request, @Context HttpServletResponse response) { + public String deleteCustomCategory(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ICategoryFormDTO iCategoryFormDTO) { User user = HrmUserVarify.getUser(request, response); - return null; - //return ResponseResult.run(getService(user)::delete, map); + return new ResponseResult< ICategoryFormDTO, Map>(user).run(getService(user)::deleteCustomCategory, iCategoryFormDTO); } diff --git a/src/com/engine/salary/web/SISchemeController.java b/src/com/engine/salary/web/SISchemeController.java index 501f7e8be..b0ab6dd35 100644 --- a/src/com/engine/salary/web/SISchemeController.java +++ b/src/com/engine/salary/web/SISchemeController.java @@ -253,7 +253,7 @@ public class SISchemeController { param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList())); } param.setExportData(Boolean.valueOf(request.getParameter("exportData"))); - + param.setExtWelArchiveList(Boolean.valueOf(request.getParameter("extWelArchiveList"))); User user = HrmUserVarify.getUser(request, response); if (param.getInspectAll() != null && param.getInspectAll()) { List insuranceAccountInspectPOS = getSIAccountService(user).allInspects(param.getIds(), param.getBillMonth()); @@ -262,7 +262,9 @@ public class SISchemeController { XSSFWorkbook workbook = getService(user).exportTemplate(param); String fileName; //表头 - if (param.getRunStatuses().size() > 0) { + if (param.isExtWelArchiveList()) { + fileName = SalaryI18nUtil.getI18nLabel(0, "社保福利档案导入模板") + "-" + SalaryI18nUtil.getI18nLabel(542679, "非系统人员"); + } else if (param.getRunStatuses().size() > 0) { if (param.getRunStatuses().contains(EmployeeStatusEnum.STAY_ADD.getValue()) && param.getRunStatuses().size() == 1) { fileName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板") + "-" + EmployeeStatusEnum.STAY_ADD.getDefaultLabel(); } else if (param.getRunStatuses().contains(EmployeeStatusEnum.PAYING.getValue()) && param.getRunStatuses().contains(EmployeeStatusEnum.STAY_DEL.getValue()) && param.getRunStatuses().size() == 2) { @@ -278,6 +280,7 @@ public class SISchemeController { fileName = SalaryI18nUtil.getI18nLabel(user.getLanguage(),542503, "社保福利档案导入模板"); } + fileName = fileName + LocalDate.now(); try { fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8").replaceAll("\\+", "%20"); diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index cb3f291c5..31adb884d 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -102,6 +102,19 @@ public class SalaryBillController { return new ResponseResult(user).run(getSalaryTemplateWrapper(user)::getShowForm, id); } + /** + * 设置工资单模板薪资项显示名称 + * + * @return + */ + @POST + @Path("/template/saveItemShowName") + @Produces(MediaType.APPLICATION_JSON) + public String saveItemShowName(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody List param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryTemplateWrapper(user)::saveItemShowName, param); + } + /** * 获取薪资项目设置 * diff --git a/src/com/engine/salary/web/SalaryFormulaController.java b/src/com/engine/salary/web/SalaryFormulaController.java index 517abe591..35e11f395 100644 --- a/src/com/engine/salary/web/SalaryFormulaController.java +++ b/src/com/engine/salary/web/SalaryFormulaController.java @@ -3,6 +3,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.common.SalaryContext; import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaDetailQueryParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaMockParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; @@ -53,12 +54,12 @@ public class SalaryFormulaController { } //获取公式详情 - @GET + @POST @Path("/detail") @Produces(MediaType.APPLICATION_JSON) - public String detail(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "formulaId") Long formulaId) { + public String detail(@Context HttpServletRequest request, @Context HttpServletResponse response, SalaryFormulaDetailQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryFormulaWrapper(user)::detail, formulaId); + return new ResponseResult(user).run(getSalaryFormulaWrapper(user)::detail, queryParam); } @POST diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 01acac1dd..c0ff33e1f 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.param.*; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.ResponseResult; @@ -375,7 +376,16 @@ public class SalarySobController { return new ResponseResult>(user).run(getSalarySobItemWrapper(user)::save, saveParam); } - + /** + * 薪资账套-薪资项目的详情 + */ + @POST + @Path("/item/getSalaryItemForm") + @Produces(MediaType.APPLICATION_JSON) + public String getSalaryItemForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySobItemPO param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySobItemWrapper(user)::getSalaryItemForm, param); + } diff --git a/src/com/engine/salary/wrapper/ExtEmpWrapper.java b/src/com/engine/salary/wrapper/ExtEmpWrapper.java index f78f0e2ec..fd936d61d 100644 --- a/src/com/engine/salary/wrapper/ExtEmpWrapper.java +++ b/src/com/engine/salary/wrapper/ExtEmpWrapper.java @@ -2,15 +2,18 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.entity.extemp.param.ExtEmpImportParam; import com.engine.salary.entity.extemp.param.ExtEmpQueryParam; import com.engine.salary.entity.extemp.param.ExtEmpSaveParam; import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.service.ExtEmpService; import com.engine.salary.service.impl.ExtEmpServiceImpl; import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; import java.util.Collection; +import java.util.Map; /** * 累计专项 @@ -46,4 +49,17 @@ public class ExtEmpWrapper extends Service { public ExtEmpPO detail(Long id) { return getExtEmpService(user).getById(id); } + + public XSSFWorkbook exportImportTemplate() { + return getExtEmpService(user).exportImportTemplate(); + } + + public Map previewImportExtEmp(ExtEmpImportParam param) { + return getExtEmpService(user).previewImportExtEmp(param); + } + + public Map importExtEmp(ExtEmpImportParam param) { + return getExtEmpService(user).importExtEmp(param); + } + } diff --git a/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java b/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java index 84b32e5e8..60253e55c 100644 --- a/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java @@ -6,6 +6,7 @@ import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.bo.SalaryFormulaBO; import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaDetailQueryParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaMockParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; @@ -28,10 +29,7 @@ import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; import weaver.servicefiles.DataSourceXML; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -84,12 +82,14 @@ public class SalaryFormulaWrapper extends Service { return getRemoteExcelService(user).fieldGroupList(param); } - public ExpressFormulaDTO detail(Long formulaId) { - List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(formulaId)); + public ExpressFormulaDTO detail(SalaryFormulaDetailQueryParam queryParam) { + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(queryParam.getFormulaId())); if (CollectionUtils.isEmpty(expressFormulas)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542602, "获取公式详情失败")); } - return SalaryFormulaBO.convert2DTO(expressFormulas).get(0); + Map returnTypeMap = new HashMap<>(); + returnTypeMap.put(queryParam.getFormulaId(),queryParam.getReturnType()); + return SalaryFormulaBO.convert2DTO(expressFormulas, returnTypeMap).get(0); } public FormulaPO save(SalaryFormulaSaveParam salaryFormulaSaveParam) { diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index c43d99f3d..ff813534a 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -192,7 +192,10 @@ public class SalaryItemWrapper extends Service { salaryItemFormDTO = SalaryItemBO.convert2FormDTO(salaryItemPO, user); expressFormula = getSalaryFormulaService(user).getExpressFormula(salaryItemPO.getFormulaId()); } - salaryItemFormDTO.setFormulaContent(Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse("")); + String formulaContent = Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse(""); + salaryItemFormDTO.setFormulaContent(formulaContent); + salaryItemFormDTO.setOriginFormulaContent(salaryItemFormDTO.getValueType().equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : ""); + salaryItemFormDTO.setOriginSqlContent(salaryItemFormDTO.getValueType().equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : ""); } return salaryItemFormDTO; } diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index b46123508..9a5d972bc 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -11,8 +11,10 @@ import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; @@ -168,4 +170,11 @@ public class SalarySobItemWrapper extends Service { } return list; } + + /** + * 薪资项目的详情 + */ + public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) { + return getSalarySobItemService(user).getSalaryItemForm(param); + } } diff --git a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java index 0e3ffaf05..410e1f0b6 100644 --- a/src/com/engine/salary/wrapper/SalaryTemplateWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryTemplateWrapper.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.entity.salaryBill.bo.SalaryBillItemNameBO; import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; +import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; @@ -65,6 +67,10 @@ public class SalaryTemplateWrapper extends Service { return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user); } + private SalaryBillItemNameService getSalaryBillItemNameService(User user) { + return ServiceUtil.getService(SalaryBillItemNameServiceImpl.class, user); + } + /** * 工资单模板列表 * @@ -239,6 +245,11 @@ public class SalaryTemplateWrapper extends Service { if (StringUtils.isNotEmpty(po.getSalaryItemSetting())) { salaryTemplateShowSetData = JsonUtil.parseList(po.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); } + // 补发薪资项目设置,前端保存时需要使用 + List replenishSalaryTemplateSalaryItemSet = new ArrayList<>(); + if (StringUtils.isNotEmpty(po.getReplenishSalaryItemSetting())) { + replenishSalaryTemplateSalaryItemSet = JsonUtil.parseList(po.getReplenishSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); + } //同步项目名称 List itemPOS = getSalaryItemService(user).listAll(); @@ -247,12 +258,35 @@ public class SalaryTemplateWrapper extends Service { // List groupPOS = getSalarySobItemGroupService(user).listBySalarySobId(po.getSalarySobId()); // Map groupIdNameMap = SalaryEntityUtil.convert2Map(groupPOS, SalarySobItemGroupPO::getId, SalarySobItemGroupPO::getName); + // 获取工资单薪资项目展示名信息 + Map itemShowNameMap; + Map salaryBillItemNameDTOMap = Collections.emptyMap(); + if (id != null){ + List billItemNameList = getSalaryBillItemNameService(user).ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(id).salaryBillType(0).build()); + itemShowNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId, SalaryBillItemNamePO::getSalaryItemShowName); + // 获取薪资项目信息 + List salaryBillItemNameDTOS = SalaryBillItemNameBO.convert2ListDTO(billItemNameList); + salaryBillItemNameDTOMap = SalaryEntityUtil.convert2Map(salaryBillItemNameDTOS, SalaryBillItemNameDTO::getSalaryItemId); + } else { + itemShowNameMap = Collections.emptyMap(); + } + if (CollectionUtils.isNotEmpty(salaryTemplateShowSetData)) { salaryTemplateShowSetData.stream() //排除人员消息 .filter(data -> !StringUtils.equals(data.getGroupId(), "111111111111111111")) .forEach(data -> { - data.getItems().forEach(item -> item.setName(itemIdNameMap.getOrDefault(Long.valueOf(item.getSalaryItemId()), item.getName()))); + data.getItems().forEach(item -> { + Long salaryItemId = Long.valueOf(item.getSalaryItemId()); + item.setOriginName(itemIdNameMap.getOrDefault(salaryItemId, item.getName())); + if(itemShowNameMap.containsKey(salaryItemId)){ + item.setSalaryItemShowName(itemShowNameMap.get(salaryItemId)); + item.setName(itemShowNameMap.get(salaryItemId) + "(" + itemIdNameMap.getOrDefault(salaryItemId, item.getName()) +")"); + }else{ + item.setSalaryItemShowName(itemIdNameMap.getOrDefault(salaryItemId, item.getName())); + item.setName(itemIdNameMap.getOrDefault(salaryItemId, item.getName())); + } + }); }); } @@ -262,6 +296,8 @@ public class SalaryTemplateWrapper extends Service { .vars(Arrays.stream(SalaryTemplateVarEnum.values()).map(SalaryTemplateVarEnum::getValue).collect(Collectors.toList())) .salaryTemplateShowSet(salaryTemplateShowSet) .salaryTemplateSalaryItemSet(salaryTemplateShowSetData) + .replenishSalaryTemplateSalaryItemSet(replenishSalaryTemplateSalaryItemSet) + .salaryBillItemNameSet(salaryBillItemNameDTOMap) .build(); } @@ -388,6 +424,8 @@ public class SalaryTemplateWrapper extends Service { // 补发薪资项目设置 List replenishSalaryItemSetting; + // 补发薪资项目显示名称 + Map salaryBillItemNameDTOMap = new HashMap<>(); if (id != null) { SalaryTemplatePO po = getSalaryTemplateService(user).getById(id); if (po == null) { @@ -399,13 +437,30 @@ public class SalaryTemplateWrapper extends Service { // 同步补发薪资项目名称 List itemPOS = getSalaryItemService(user).listAll(); Map itemIdNameMap = SalaryEntityUtil.convert2Map(itemPOS, SalaryItemPO::getId, SalaryItemPO::getName); + // 获取工资单薪资项目展示名信息 + List billItemNameList = getSalaryBillItemNameService(user).ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(id).salaryBillType(1).build()); + Map itemShowNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId, SalaryBillItemNamePO::getSalaryItemShowName); + // 获取薪资项目信息 + List salaryBillItemNameDTOS = SalaryBillItemNameBO.convert2ListDTO(billItemNameList); + salaryBillItemNameDTOMap = SalaryEntityUtil.convert2Map(salaryBillItemNameDTOS, SalaryBillItemNameDTO::getSalaryItemId); + if (CollectionUtils.isNotEmpty(replenishSalaryItemSetting)) { replenishSalaryItemSetting.stream() //排除人员消息 - .filter(data -> !StringUtils.equals(data.getGroupId(), "111111111111111111")) - .forEach(data -> { - data.getItems().forEach(item -> item.setName(itemIdNameMap.getOrDefault(Long.valueOf(item.getSalaryItemId()), item.getName()))); - }); + .filter(data -> !StringUtils.equals(data.getGroupId(), "111111111111111111")) + .forEach(data -> { + data.getItems().forEach(item -> { + Long salaryItemId = Long.valueOf(item.getSalaryItemId()); + item.setOriginName(itemIdNameMap.getOrDefault(salaryItemId, item.getName())); + if(itemShowNameMap.containsKey(salaryItemId)){ + item.setSalaryItemShowName(itemShowNameMap.get(salaryItemId)); + item.setName(itemShowNameMap.get(salaryItemId) + "(" + itemIdNameMap.getOrDefault(salaryItemId, item.getName()) + ")"); + }else{ + item.setSalaryItemShowName(itemIdNameMap.getOrDefault(salaryItemId, item.getName())); + item.setName(itemIdNameMap.getOrDefault(salaryItemId, item.getName())); + } + }); + }); } } else { replenishSalaryItemSetting = getReplenishSalaryItemSet(replenishFormQueryParam.getSalarySobId()); @@ -417,6 +472,7 @@ public class SalaryTemplateWrapper extends Service { return SalaryTemplateReplenishFormDTO.builder() .id(id) .replenishSalaryTemplateSalaryItemSet(replenishSalaryItemSetting) + .salaryBillItemNameSet(salaryBillItemNameDTOMap) .build(); } @@ -430,7 +486,7 @@ public class SalaryTemplateWrapper extends Service { Boolean isReplenish = Optional.ofNullable(param.getIsReplenish()) .orElse(false); List salaryItemSet - = getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), isReplenish); + = getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), param.getSalaryTemplateId(), isReplenish); Long groupId = param.getGroupId(); return salaryItemSet.stream() .filter(s -> Objects.equals(s.getGroupId(), groupId + "")) @@ -452,11 +508,15 @@ public class SalaryTemplateWrapper extends Service { public List getSalaryGroupSet(SalaryBillSalaryGroupQueryParam param) { Boolean isReplenish = Optional.ofNullable(param.getIsReplenish()) .orElse(false); - return getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), isReplenish) + return getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), param.getSalaryTemplateId(), isReplenish) .stream() .filter(group -> !Optional.ofNullable(param.getExistSalaryGroupIds()).orElse(Collections.emptyList()) .contains(group.getGroupId()) ) .collect(Collectors.toList()); } + + public void saveItemShowName(List saveList) { + getSalaryBillItemNameService(user).saveItemShowName(saveList); + } }