Merge remote-tracking branch 'remotes/origin/release/2.9.3.2308.01' into feature/salary_i18

# Conflicts:
#	src/com/engine/salary/biz/SIArchivesBiz.java
#	src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java
#	src/com/engine/salary/entity/salaryacct/dto/SalaryAccEmployeeListDTO.java
#	src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java
#	src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java
#	src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java
#	src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java
#	src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java
#	src/com/engine/salary/enums/SalaryValueTypeEnum.java
#	src/com/engine/salary/service/impl/SIAccountServiceImpl.java
#	src/com/engine/salary/service/impl/SIImportServiceImpl.java
#	src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java
#	src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java
This commit is contained in:
sy 2023-08-14 10:01:21 +08:00
commit baf1da3edd
106 changed files with 3482 additions and 353 deletions

View File

@ -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;
/

View File

@ -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)
);
/

View File

@ -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;
/

View File

@ -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;
/

View File

@ -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;
/

View File

@ -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)
);
/

View File

@ -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;
/

View File

@ -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;

View File

@ -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
) ;

View File

@ -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;

View File

@ -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
/

View File

@ -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)
)
/

View File

@ -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
/

View File

@ -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;

View File

@ -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
) ;

View File

@ -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;

View File

@ -0,0 +1,5 @@
ALTER TABLE hrsa_salary_sob_item
ADD rounding_mode int NULL,
pattern int NULL,
value_type int NULL
GO

View File

@ -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

View File

@ -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

View File

@ -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;
/

View File

@ -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<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
StringBuilder message = new StringBuilder("");
for (Map<String, String> 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;
}

View File

@ -672,11 +672,10 @@ public class SIArchivesBiz extends Service {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),542533, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
}
// List<InsuranceArchivesOtherSchemePO> oldOtherInfoList = otherSchemeMapper.getOtherByEmployeeId(Collections.singletonList(param.getEmployeeId()));
List<InsuranceArchivesOtherSchemePO> oldOtherInfoList = otherSchemeMapper.getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder()
.employeeId(param.getEmployeeId())
.paymentOrganization(param.getPaymentOrganization())
.build());
List<Long> otherIds = new ArrayList();
otherIds.add(param.getId());
List<InsuranceArchivesOtherSchemePO> 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<InsuranceArchivesOtherSchemePO> 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<InsuranceArchivesFundSchemePO> oldFundInfoList = fundSchemeMapper.getFundByEmployeeId(Collections.singletonList(param.getEmployeeId()));
List<InsuranceArchivesFundSchemePO> oldFundInfoList = fundSchemeMapper.getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder()
.employeeId(param.getEmployeeId())
.paymentOrganization(param.getPaymentOrganization())
.build());
List<Long> fundIds = new ArrayList();
fundIds.add(param.getId());
List<InsuranceArchivesFundSchemePO> 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<InsuranceArchivesFundSchemePO> 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<InsuranceArchivesSocialSchemePO> oldSocialInfoList = socialSchemeMapper.getSocialByEmployeeId(Collections.singletonList(param.getEmployeeId()));
List<InsuranceArchivesSocialSchemePO> oldSocialInfoList = socialSchemeMapper.getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder()
.employeeId(param.getEmployeeId())
.paymentOrganization(param.getPaymentOrganization())
.build());
List<Long> socialIds = new ArrayList();
socialIds.add(param.getId());
List<InsuranceArchivesSocialSchemePO> 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<InsuranceArchivesSocialSchemePO> 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<Long> 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)));

View File

@ -10,11 +10,11 @@ import java.util.List;
public class SalarySobItemHideBiz {
public List<Long> listSome(SalarySobItemHidePO salarySobPO) {
public List<Long> 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<SalarySobItemHidePO> listSome(SalarySobItemHidePO po) {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
SalarySobItemHideMapper mapper = sqlSession.getMapper(SalarySobItemHideMapper.class);
return mapper.listSome(po);
} finally {
sqlSession.close();
}
}
}

View File

@ -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;
}

View File

@ -25,4 +25,9 @@ public class DeptInfo {
* 名称
*/
private String name;
/**
* 所属分部id
*/
private Long subcompanyid1;
}

View File

@ -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<SalaryBillItemNameDTO> convert2ListDTO(List<SalaryBillItemNamePO> 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());
}
}

View File

@ -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());
});

View File

@ -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;
}

View File

@ -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<SalaryTemplateSalaryItemSetListDTO> replenishSalaryTemplateSalaryItemSet;
// 工资单项目名称设置
private Map<Long, SalaryBillItemNameDTO> salaryBillItemNameSet;
}

View File

@ -26,9 +26,15 @@ public class SalaryTemplateSalaryItemListDTO {
// 薪资项目值")
private String salaryItemValue;
// 薪资项目名称")
// 模板展示名称 salaryItemShowName+originName
private String name;
// 薪资项目修改后展示名称
private String salaryItemShowName;
// 薪资项目名称原始值
private String originName;
// 顺序")
private Integer sortedIndex;
}

View File

@ -29,4 +29,10 @@ public class SalaryTemplateShowFormDTO {
// 薪资项目设置")
private List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateSalaryItemSet;
// 补发工资薪资项目设置")
private List<SalaryTemplateSalaryItemSetListDTO> replenishSalaryTemplateSalaryItemSet;
// 工资单项目名称设置
private Map<Long, SalaryBillItemNameDTO> salaryBillItemNameSet;
}

View File

@ -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> itemShowNameSetting;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class itemShowNameSetting {
/**
* 薪资项目id
*/
private Long salaryItemId;
/**
* 工资单展示名称
*/
private String salaryItemShowName;
}
}

View File

@ -23,4 +23,9 @@ public class SalaryBillSalaryGroupQueryParam extends BaseQueryParam {
* 前端已有的分组id
*/
private List<String> existSalaryGroupIds;
/**
* 工资单模板id
*/
private Long salaryTemplateId;
}

View File

@ -19,4 +19,6 @@ public class SalaryBillSalaryItemQueryParam extends BaseQueryParam {
private Boolean isReplenish;
private List<String> existSalaryItemIds;
private Long salaryTemplateId;
}

View File

@ -105,6 +105,8 @@ public class SalaryTemplateSaveParam {
*/
private String feedbackUrl;
List<SalaryBillItemNameSaveParam> salaryBillItemNameSetting;
public static void checkParam(SalaryTemplateSaveParam saveParam, User user) {
if (saveParam.getSalarySobId() == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(user.getLanguage(),544117,"薪资账套表的主键id必传;"));

View File

@ -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<Long> ids;
}

View File

@ -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<SalarySobBackItemPO> salarySobBackItems, Map<Long, SalarySobBackItemPO> salarySobBackItemMap) {
public static String roundResultValue(String value, SalaryItemPO salaryItem,
List<SalarySobBackItemPO> salarySobBackItems,
Map<Long, SalarySobBackItemPO> salarySobBackItemMap,
Map<Long, SalarySobItemPO> 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();
}

View File

@ -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;
}

View File

@ -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 = "";

View File

@ -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<ExpressFormulaDTO> convert2DTO(List<ExpressFormula> expressFormulas) {
public static List<ExpressFormulaDTO> convert2DTO(List<ExpressFormula> expressFormulas, Map<Long, String> 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());
}
}

View File

@ -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;
}

View File

@ -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))

View File

@ -75,6 +75,11 @@ public class SalaryItemFormDTO {
//公式内容")
private String formulaContent;
// 用于前端展示 公式原始内容
private String originFormulaContent;
// 用于前端展示 原始sql
private String originSqlContent;
//备注")
private String description;

View File

@ -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)

View File

@ -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, "输入")))

View File

@ -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;
}

View File

@ -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;
/**
* 薪资账套-薪资项目表单
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @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;
}

View File

@ -77,6 +77,22 @@ public class SalarySobItemSaveParam {
private Long itemHide;
private Boolean canDelete;
/**
* 进位规则
*/
private Integer roundingMode;
/**
* 保留小数位数
*/
private Integer pattern;
/**
* 取值方式
*/
private Integer valueType;
}
@Data

View File

@ -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;

View File

@ -141,7 +141,7 @@ public class InsuranceComparisonResultBO {
*/
public static List<Map<String, Object>> buildComparisonTableData(List<AccountExportPO> accountExportPOS, List<ExcelAccountExportPO> excelAccountExportPOS, Map<Long, String> schemeIdNameMap, User user) {
Map<String, List<ExcelAccountExportPO>> excelResultMap = SalaryEntityUtil.group2Map(excelAccountExportPOS, ExcelAccountExportPO::getWorkcode);
Map<Long, List<ExcelAccountExportPO>> excelResultMap = SalaryEntityUtil.group2Map(excelAccountExportPOS, ExcelAccountExportPO::getEmployeeId);
// Map<String, List<AccountExportPO>> acctResultMap = SalaryEntityUtil.group2Map(accountExportPOS, AccountExportPO::getWorkcode);
List<TaxAgentPO> paymentList = MapperProxyFactory.getProxy(TaxAgentMapper.class).listAll();
@ -186,7 +186,7 @@ public class InsuranceComparisonResultBO {
map.put("otherSchemeName", schemeIdNameMap.get(accountExportPO.getOtherSchemeId()));
//线下值
List<ExcelAccountExportPO> excelResultValueList = excelResultMap.get(accountExportPO.getWorkcode());
List<ExcelAccountExportPO> excelResultValueList = excelResultMap.get(accountExportPO.getEmployeeId());
ExcelAccountExportPO excelAccountExportPO = new ExcelAccountExportPO();
if (excelResultValueList != null && excelResultValueList.size() == 1) {
excelAccountExportPO = excelResultValueList.get(0);

View File

@ -81,6 +81,7 @@ public class InsuranceArchivesBaseInfoBO {
.creator(currentEmployeeId)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.employeeType(change.getEmployeeType())
.build());
}
// 如果是删除 说明如果有档案并且是在缴纳中才处理没档案不用管

View File

@ -115,4 +115,9 @@ public class InsuranceArchivesListParam extends BaseQueryParam {
* 人事状态
*/
private List<String> personnelStatuses;
/**
* 是否是外部系统档案
*/
private boolean extWelArchiveList;
}

View File

@ -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<Long> ids;
private Collection<Long> employeeIds;

View File

@ -56,16 +56,17 @@ public enum SalaryValueTypeEnum implements BaseEnum<Integer> {
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 "";
}
}

View File

@ -87,4 +87,19 @@ public interface EmployMapper {
List<HrmInfoDTO> listHrmInfoByIdAndName(@Param("param") HrmQueryParam param);
/**
* 根据部门名称查询部门
*/
List<DeptInfo> getDeptInfosByName(String name);
/**
* 根据分部名称查询分部
*/
List<SubCompanyInfo> getSubCompanyInfosByName(String name);
/**
* 根据部门id查询部门
*/
DeptInfo getDeptInfoById(Long id);
}

View File

@ -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)
</select>
@ -348,4 +350,26 @@
</if>
</select>
<select id="getDeptInfosByName" resultType="com.engine.salary.entity.hrm.DeptInfo">
select d.departmentname as name,
d.id as id,
d.subcompanyid1 as subcompanyid1
from hrmdepartment d
where d.departmentname = #{name}
</select>
<select id="getSubCompanyInfosByName" resultType="com.engine.salary.entity.hrm.SubCompanyInfo">
select d.subcompanyname as name,
d.id as id
from hrmsubcompany d
where d.subcompanyname = #{name}
</select>
<select id="getDeptInfoById" resultType="com.engine.salary.entity.hrm.DeptInfo">
select d.departmentname as name,
d.id as id,
d.subcompanyid1 as subcompanyid1
from hrmdepartment d
where d.id = #{id}
</select>
</mapper>

View File

@ -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<SalaryBillItemNamePO> listAll();
/**
* 条件查询
*
* @return 返回集合没有返回空List
*/
List<SalaryBillItemNamePO> 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> salaryBillItemNamePO);
/**
* 批量插入
* @param salaryBillItemNamePO
*/
void batchInsert(@Param("collection") List<SalaryBillItemNamePO> salaryBillItemNamePO);
/**
* 根据薪资项目模板id模板类型批量删除
* @param salaryItemIds
* @param salaryTemplateId
* @param salaryBillType
*/
void deleteByItemIdsAndTemplateId(@Param("salaryItemIds") List<Long> salaryItemIds, @Param("salaryTemplateId") Long salaryTemplateId, @Param("salaryBillType") Integer salaryBillType);
/**
* 根据idList删除
* @param ids
*/
void deleteByIds(@Param("collection") List<Long> ids);
/**
* 根据模板id删除
* @param ids
*/
void deleteByTemplateIds(@Param("collection") Collection<Long> ids);
}

View File

@ -0,0 +1,344 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.engine.salary.mapper.salarybill.SalaryBillItemNameMapper">
<resultMap id="BaseResultMap" type="com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO">
<result column="id" property="id" />
<result column="salary_item_id" property="salaryItemId" />
<result column="salary_item_show_name" property="salaryItemShowName" />
<result column="salary_template_id" property="salaryTemplateId" />
<result column="delete_type" property="deleteType" />
<result column="creator" property="creator" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="tenant_key" property="tenantKey" />
</resultMap>
<!-- 表字段 -->
<sql id="baseColumns">
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
</sql>
<!-- 查询全部 -->
<select id="listAll" resultMap="BaseResultMap">
SELECT
<include refid="baseColumns" />
FROM hrsa_salary_bill_item_name t
WHERE delete_type = 0
</select>
<!-- 根据主键获取单条记录 -->
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
SELECT
<include refid="baseColumns" />
FROM hrsa_salary_bill_item_name t
WHERE id = #{id} AND delete_type = 0
</select>
<!-- 条件查询 -->
<select id="listSome" resultMap="BaseResultMap" parameterType="com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO">
SELECT
<include refid="baseColumns" />
FROM hrsa_salary_bill_item_name t
WHERE delete_type = 0
<if test="id != null">
AND id = #{id}
</if>
<if test="salaryItemId != null">
AND salary_item_id = #{salaryItemId}
</if>
<if test="salaryItemShowName != null">
AND salary_item_show_name = #{salaryItemShowName}
</if>
<if test="salaryTemplateId != null">
AND salary_template_id = #{salaryTemplateId}
</if>
<if test="salaryBillType != null">
AND salary_bill_type = #{salaryBillType}
</if>
<if test="ids != null and ids.size()>0">
AND id IN
<foreach collection="ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</if>
ORDER BY id DESC
</select>
<!-- 插入不为NULL的字段 -->
<insert id="insertIgnoreNull" parameterType="com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO">
INSERT INTO hrsa_salary_bill_item_name
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="salaryItemId != null">
salary_item_id,
</if>
<if test="salaryItemShowName != null">
salary_item_show_name,
</if>
<if test="salaryTemplateId != null">
salary_template_id,
</if>
<if test="salaryBillType != null">
salary_bill_type,
</if>
<if test="creator != null">
creator,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="deleteType != null">
delete_type,
</if>
<if test="tenantKey != null">
tenant_key,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="id != null" >
#{id},
</if>
<if test="salaryItemId != null" >
#{salaryItemId},
</if>
<if test="salaryItemShowName != null" >
#{salaryItemShowName},
</if>
<if test="salaryTemplateId != null" >
#{salaryTemplateId},
</if>
<if test="salaryBillType != null" >
#{salaryBillType},
</if>
<if test="creator != null">
#{creator},
</if>
<if test="createTime != null">
#{createTime},
</if>
<if test="updateTime != null">
#{updateTime},
</if>
<if test="deleteType != null">
#{deleteType},
</if>
<if test="tenantKey != null">
#{tenantKey},
</if>
</trim>
</insert>
<insert id="batchInsert">
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
<foreach collection="collection" item="item" separator=",">
(
#{item.id},
#{item.salaryTemplateId},
#{item.salaryItemId},
#{item.salaryItemShowName},
#{item.salaryBillType},
#{item.creator},
#{item.createTime},
#{item.updateTime},
#{item.deleteType},
#{item.tenantKey}
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
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
)
<foreach collection="collection" item="item" separator="union all">
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
</foreach>
</insert>
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" item="item" separator=";">
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}
)
</foreach>
</insert>
<!-- 更新,更新全部字段 -->
<update id="update" parameterType="com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO">
UPDATE hrsa_salary_bill_item_name
<set>
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}
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<!-- 更新不为NULL的字段 -->
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO">
UPDATE hrsa_salary_bill_item_name
<set>
<if test="salaryItemId != null" >
salary_item_id=#{salaryItemId},
</if>
<if test="salaryItemShowName != null" >
salary_item_show_name=#{salaryItemShowName},
</if>
<if test="salaryTemplateId != null" >
salary_template_id=#{salaryTemplateId},
</if>
<if test="salaryBillType != null" >
salary_bill_type=#{salaryBillType},
</if>
<if test="creator != null" >
creator=#{creator},
</if>
<if test="create_time != null" >
create_time=#{createTime},
</if>
<if test="updateTime != null" >
update_time=#{updateTime},
</if>
<if test="tenantKey != null" >
tenant_key=#{tenantKey},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<update id="batchUpdate">
UPDATE hrsa_salary_bill_item_name
<trim prefix="set" suffixOverrides=",">
<trim prefix="salary_item_show_name = case" suffix="end,">
<foreach collection="collection" item="item" index="index">
WHEN id = #{item.id} THEN #{item.salaryItemShowName}
</foreach>
</trim>
<trim prefix="update_time = case" suffix="end,">
<foreach collection="collection" item="item" index="index">
WHEN id = #{item.id} THEN #{item.updateTime}
</foreach>
</trim>
</trim>
WHERE delete_type = 0
AND id IN
<foreach collection="collection" item="item" open="(" close=")" separator=",">
#{item.id}
</foreach>
</update>
<!-- 根据主键删除记录 -->
<delete id="delete" parameterType="com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO">
UPDATE hrsa_salary_bill_item_name
SET delete_type=1
WHERE id = #{id} AND delete_type = 0
</delete>
<delete id="deleteByItemIdsAndTemplateId">
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
<foreach collection="salaryItemIds" item="itemId" open="(" close=")" separator=",">
#{itemId}
</foreach>
</delete>
<delete id="deleteByIds">
UPDATE hrsa_salary_bill_item_name
SET delete_type=1
WHERE delete_type = 0
AND id IN
<foreach collection="collection" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
<delete id="deleteByTemplateIds">
UPDATE hrsa_salary_bill_item_name
SET delete_type=1
WHERE delete_type = 0
AND salary_template_id IN
<foreach collection="collection" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -13,7 +13,7 @@ public interface SalarySobItemHideMapper {
* @param salarySobPO
* @return
*/
List<Long> getById(SalarySobItemHidePO salarySobPO);
List<Long> listHideItemIds(SalarySobItemHidePO salarySobPO);
/***
* @description 删除薪资账套的薪资项目隐藏信息
@ -28,4 +28,5 @@ public interface SalarySobItemHideMapper {
void updateByItemId(SalarySobItemHidePO salarySobGroupItemHidePO);
List<SalarySobItemHidePO> listSome(@Param("param") SalarySobItemHidePO po);
}

View File

@ -12,7 +12,7 @@
<!-- 根据账套id获取关闭显示开关的itemID -->
<select id="getById" resultType="java.lang.Long">
<select id="listHideItemIds" resultType="java.lang.Long">
SELECT salary_item_id FROM hrsa_salary_item_hide
where delete_type=0
and salary_sob_id=#{salarySobId}
@ -20,6 +20,35 @@
<if test="isGroup!=null">
and is_group=#{isGroup}
</if>
<if test="salaryItemId!=null">
and salary_item_id=#{salaryItemId}
</if>
</select>
<select id="listSome" resultType="com.engine.salary.entity.salarysob.po.SalarySobItemHidePO">
SELECT
id
, salary_sob_id
, salary_item_id
, is_group
, item_hide
FROM hrsa_salary_item_hide
where delete_type=0
<if test="param.id!=null">
and id=#{param.id}
</if>
<if test="param.salarySobId!=null">
and salary_sob_id=#{param.salarySobId}
</if>
<if test="param.itemHide!=null">
and item_hide=#{param.itemHide}
</if>
<if test="param.isGroup!=null">
and is_group=#{param.isGroup}
</if>
<if test="param.salaryItemId!=null">
and salary_item_id=#{param.salaryItemId}
</if>
</select>

View File

@ -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
</sql>
<!-- 查询全部 -->
@ -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},
</set>
WHERE id = #{id} AND delete_type = 0
</update>
@ -318,6 +327,15 @@
<if test="canDelete != null">
can_delete=#{canDelete},
</if>
<if test="roundingMode != null">
rounding_mode=#{roundingMode},
</if>
<if test="pattern != null">
pattern=#{pattern},
</if>
<if test="valueType != null">
value_type=#{valueType},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>
@ -364,7 +382,7 @@
<insert id="batchInsert">
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
<foreach collection="collection" item="item" separator=",">
(
@ -379,13 +397,16 @@
#{item.creator},
#{item.deleteType},
#{item.tenantKey},
#{item.canDelete}
#{item.canDelete},
#{item.roundingMode},
#{item.pattern},
#{item.valueType}
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
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)
<foreach collection="collection" item="item" separator="union all">
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
</foreach>
</insert>
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" item="item" separator=";">
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}
)
</foreach>
</insert>

View File

@ -85,4 +85,10 @@ public interface FundSchemeMapper {
* @param fundArchiveDelIds
*/
void deleteByIds(@Param("ids")List<Long> fundArchiveDelIds);
/**
* 新增
* @param insuranceArchivesFundSchemePO
*/
void insert(InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO);
}

View File

@ -327,4 +327,45 @@
</foreach>
</if>
</update>
<insert id="insert" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO">
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}
)
</insert>
</mapper>

View File

@ -113,4 +113,11 @@ public interface InsuranceBaseInfoMapper {
* @param archiveDelIds
*/
void deleteByIds(@Param("ids")List<Long> archiveDelIds);
/**
* 根据id更新
*
* @param po
*/
void updateById(InsuranceArchivesBaseInfoPO po);
}

View File

@ -15,6 +15,7 @@
<result column="delete_type" property="deleteType"/>
<result column="tenant_key" property="tenantKey"/>
<result column="run_status" property="runStatus"/>
<result column="employee_type" property="employeeType"/>
</resultMap>
<!-- 表字段 -->
@ -31,6 +32,7 @@
, t.creator
, t.delete_type
, t.tenant_key
, t.employee_type
</sql>
<!-- 查询全部 -->
@ -100,7 +102,7 @@
<insert id="batchSave">
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
<foreach collection="infos" item="item" separator=",">
(
@ -115,13 +117,14 @@
#{item.deleteType},
#{item.createTime},
#{item.updateTime},
#{item.runStatus}
#{item.runStatus},
#{item.employeeType}
)
</foreach>
</insert>
<insert id="batchSave" databaseId="oracle">
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)
<foreach collection="infos" item="item" separator="union all">
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
</foreach>
</insert>
<insert id="batchSave" databaseId="sqlserver">
<foreach collection="infos" item="item" separator=";">
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}
)
</foreach>
</insert>
@ -318,4 +323,23 @@
</foreach>
</update>
<update id="updateById" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO">
UPDATE hrsa_insurance_base_info
<set>
<if test="null != employeeId and '' != employeeId">employee_id = #{employeeId},</if>
<if test="null != paymentOrganization and '' != paymentOrganization">payment_organization = #{paymentOrganization},</if>
<if test="null != socialArchivesId and '' != socialArchivesId">social_archives_id = #{socialArchivesId},</if>
<if test="null != fundArchivesId and '' != fundArchivesId">fund_archives_id = #{fundArchivesId},</if>
<if test="null != otherArchivesId and '' != otherArchivesId">other_archives_id = #{otherArchivesId},</if>
<if test="null != runStatus and '' != runStatus">run_status = #{runStatus},</if>
<if test="null != createTime">create_time = #{createTime},</if>
<if test="null != updateTime">update_time = #{updateTime},</if>
<if test="null != creator and '' != creator">creator = #{creator},</if>
<if test="null != deleteType and '' != deleteType">delete_type = #{deleteType},</if>
<if test="null != tenantKey and '' != tenantKey">tenant_key = #{tenantKey},</if>
</set>
WHERE id = #{id}
</update>
</mapper>

View File

@ -77,4 +77,10 @@ public interface OtherSchemeMapper {
* @param otherArchiveDelIds
*/
void deleteByIds(@Param("ids") List<Long> otherArchiveDelIds);
/**
* 新增
* @param insuranceArchivesOtherSchemePO
*/
void insert(InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO);
}

View File

@ -305,4 +305,39 @@
</foreach>
</if>
</update>
<insert id="insert" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO">
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}
)
</insert>
</mapper>

View File

@ -77,6 +77,8 @@ public interface SocialSchemeMapper {
List<InsuranceArchivesEmployeePO> queryEmployeeList(@Param("param") InsuranceArchivesListParam param);
List<InsuranceArchivesEmployeePO> queryExtEmployeeList(@Param("param") InsuranceArchivesListParam param);
/**
* 根据社保缴纳组织id获取
* @param paymentOrganization
@ -113,4 +115,10 @@ public interface SocialSchemeMapper {
* @param socialArchiveDelIds
*/
void deleteByIds(@Param("ids")List<Long> socialArchiveDelIds);
/**
* 新增
* @param insuranceArchivesSocialSchemePO
*/
void insert(InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO);
}

View File

@ -369,12 +369,41 @@
WHERE
1=1
AND base.delete_type = 0
AND base.employee_type is null
<include refid="condition"></include>
<if test="param.orderRule != null">
ORDER BY ${param.orderRule.orderRule} ${param.orderRule.ascOrDesc}
</if>
</select>
<!--]]>-->
<select id="queryExtEmployeeList" resultType="com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO">
SELECT base.id AS baseInfoId, e.id AS employeeId, e.username AS userName, e.department_id AS departmentId, e.workcode AS jobNum, e.mobile AS telephone,
d.departmentname AS departmentName, e.jobtitle_id AS position, e.status AS userStatus,e.companystartdate AS hiredate,
social.siSchemeId,
base.payment_organization AS paymentOrganization,
fund.fundSchemeId,
other.otherSchemeId,
social.id AS socialId,
fund.id AS fundId,
other.id AS otherId,
e.companystartdate as companystartdate
FROM hrsa_insurance_base_info base
LEFT JOIN hrsa_external_employee e ON base.employee_id = e.id
LEFT JOIN hrmdepartment d ON e.department_id = d.ID
LEFT JOIN hrmsubcompany c ON c.id = e.subcompany_id
LEFT JOIN( SELECT social.id, social.employee_id, social.social_scheme_id AS siSchemeId, social.payment_organization FROM hrsa_social_archives social WHERE social.delete_type = 0 )social ON e.id = social.employee_id AND base.payment_organization = social.payment_organization
LEFT JOIN( SELECT fund.id, fund.employee_id, fund.fund_scheme_id AS fundSchemeId, fund.payment_organization FROM hrsa_fund_archives fund WHERE fund.delete_type = 0 )fund ON e.id = fund.employee_id AND base.payment_organization = fund.payment_organization
LEFT JOIN( SELECT other.id, other.employee_id, other.other_scheme_id AS otherSchemeId, other.payment_organization FROM hrsa_other_archives other WHERE other.delete_type = 0 )other ON e.id = other.employee_id AND base.payment_organization = other.payment_organization
WHERE
1=1
AND base.delete_type = 0
AND base.employee_type = 1
<include refid="extCondition"></include>
ORDER BY base.create_time desc
</select>
<sql id="condition">
@ -623,6 +652,235 @@
</if>
</sql>
<sql id="extCondition">
<if test="param.keyword != null and param.keyword != ''">
AND
(
e.username like CONCAT('%',#{param.keyword},'%')
)
</if>
<if test="param.userName != null and param.userName != ''">
AND e.username like CONCAT('%',#{param.userName},'%')
</if>
<if test="param.jobNum != null and param.jobNum != ''">
AND e.workcode like CONCAT('%',#{param.jobNum},'%')
</if>
<if test="param.departmentIds != null and param.departmentIds.size()>0">
AND e.department_id IN
<foreach collection="param.departmentIds" open="(" item="departmentId" separator="," close=")">
#{departmentId}
</foreach>
</if>
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
AND e.subcompany_id IN
<foreach collection="param.subcompanyIds" open="(" item="subcompanyId" separator="," close=")">
#{subcompanyId}
</foreach>
</if>
<if test="param.statuses != null and param.statuses.size()>0">
AND e.status IN
<foreach collection="param.statuses" open="(" item="userStatus" separator="," close=")">
#{userStatus}
</foreach>
</if>
<if test="param.positions != null and param.positions.size()>0">
AND e.jobtitle_id IN
<foreach collection="param.positions" open="(" item="position" separator="," close=")">
#{position}
</foreach>
</if>
<if test="param.hiredateStart != null">
AND e.companystartdate &gt; #{param.hiredateStart}
</if>
<if test="param.hiredateEnd != null">
AND e.companystartdate &lt; #{param.hiredateEnd}
</if>
<if test="param.siSchemeId != null and param.siSchemeId != 0">
AND siSchemeId = #{param.siSchemeId}
</if>
<if test="param.fundSchemeId != null and param.fundSchemeId != 0">
AND fundSchemeId = #{param.fundSchemeId}
</if>
<if test="param.otherSchemeId != null and param.otherSchemeId != 0">
AND otherSchemeId = #{param.otherSchemeId}
</if>
<if test="param.taxAgentId != null and param.taxAgentId != 0">
AND base.payment_organization = #{param.taxAgentId}
</if>
<if test="param.runStatuses != null and param.runStatuses.size()>0">
AND base.run_status IN
<foreach collection="param.runStatuses" open="(" item="runStatus" separator="," close=")">
#{runStatus}
</foreach>
</if>
<if test="param.employeeIds != null and param.employeeIds.size() > 0">
AND e.id IN
<foreach collection="param.employeeIds" open="(" separator="," item="item" close=")">
#{item}
</foreach>
</if>
<if test="param.ids != null and param.ids.size() > 0">
AND base.id IN
<foreach collection="param.ids" open="(" separator="," item="item" close=")">
#{item}
</foreach>
</if>
</sql>
<sql id="extCondition" databaseId="sqlserver">
<if test="param.keyword != null and param.keyword != ''">
AND
(
e.username like '%'+#{param.keyword}+'%'
)
</if>
<if test="param.userName != null and param.userName != ''">
AND e.username like '%'+#{param.userName}+'%'
</if>
<if test="param.jobNum != null and param.jobNum != ''">
AND e.workcode like '%'+#{param.jobNum}+'%'
</if>
<if test="param.departmentIds != null and param.departmentIds.size()>0">
AND e.department_id IN
<foreach collection="param.departmentIds" open="(" item="departmentId" separator="," close=")">
#{departmentId}
</foreach>
</if>
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
AND e.subcompany_id IN
<foreach collection="param.subcompanyIds" open="(" item="subcompanyId" separator="," close=")">
#{subcompanyId}
</foreach>
</if>
<if test="param.statuses != null and param.statuses.size()>0">
AND e.status IN
<foreach collection="param.statuses" open="(" item="userStatus" separator="," close=")">
#{userStatus}
</foreach>
</if>
<if test="param.positions != null and param.positions.size()>0">
AND e.jobtitle_id IN
<foreach collection="param.positions" open="(" item="position" separator="," close=")">
#{position}
</foreach>
</if>
<if test="param.hiredateStart != null">
AND e.companystartdate &gt; #{param.hiredateStart}
</if>
<if test="param.hiredateEnd != null">
AND e.companystartdate &lt; #{param.hiredateEnd}
</if>
<if test="param.siSchemeId != null and param.siSchemeId != 0">
AND siSchemeId = #{param.siSchemeId}
</if>
<if test="param.fundSchemeId != null and param.fundSchemeId != 0">
AND fundSchemeId = #{param.fundSchemeId}
</if>
<if test="param.otherSchemeId != null and param.otherSchemeId != 0">
AND otherSchemeId = #{param.otherSchemeId}
</if>
<if test="param.taxAgentId != null and param.taxAgentId != 0">
AND base.payment_organization = #{param.taxAgentId}
</if>
<if test="param.runStatuses != null and param.runStatuses.size()>0">
AND base.run_status IN
<foreach collection="param.runStatuses" open="(" item="runStatus" separator="," close=")">
#{runStatus}
</foreach>
</if>
<if test="param.employeeIds != null and param.employeeIds.size() > 0">
AND e.id IN
<foreach collection="param.employeeIds" open="(" separator="," item="item" close=")">
#{item}
</foreach>
</if>
<if test="param.ids != null and param.ids.size() > 0">
AND base.id IN
<foreach collection="param.ids" open="(" separator="," item="item" close=")">
#{item}
</foreach>
</if>
</sql>
<sql id="extCondition" databaseId="oracle">
<if test="param.keyword != null and param.keyword != ''">
AND
(
e.username like '%'||#{param.keyword}||'%'
)
</if>
<if test="param.userName != null and param.userName != ''">
AND e.username like '%'||#{param.userName}||'%'
</if>
<if test="param.jobNum != null and param.jobNum != ''">
AND e.workcode like '%'||#{param.jobNum}||'%'
</if>
<if test="param.departmentIds != null and param.departmentIds.size()>0">
AND e.department_id IN
<foreach collection="param.departmentIds" open="(" item="departmentId" separator="," close=")">
#{departmentId}
</foreach>
</if>
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
AND e.subcompany_id IN
<foreach collection="param.subcompanyIds" open="(" item="subcompanyId" separator="," close=")">
#{subcompanyId}
</foreach>
</if>
<if test="param.statuses != null and param.statuses.size()>0">
AND e.status IN
<foreach collection="param.statuses" open="(" item="userStatus" separator="," close=")">
#{userStatus}
</foreach>
</if>
<if test="param.positions != null and param.positions.size()>0">
AND e.jobtitle_id IN
<foreach collection="param.positions" open="(" item="position" separator="," close=")">
#{position}
</foreach>
</if>
<if test="param.hiredateStart != null">
AND e.companystartdate &gt; #{param.hiredateStart}
</if>
<if test="param.hiredateEnd != null">
AND e.companystartdate &lt; #{param.hiredateEnd}
</if>
<if test="param.siSchemeId != null and param.siSchemeId != 0">
AND siSchemeId = #{param.siSchemeId}
</if>
<if test="param.fundSchemeId != null and param.fundSchemeId != 0">
AND fundSchemeId = #{param.fundSchemeId}
</if>
<if test="param.otherSchemeId != null and param.otherSchemeId != 0">
AND otherSchemeId = #{param.otherSchemeId}
</if>
<if test="param.taxAgentId != null and param.taxAgentId != 0">
AND base.payment_organization = #{param.taxAgentId}
</if>
<if test="param.runStatuses != null and param.runStatuses.size()>0">
AND base.run_status IN
<foreach collection="param.runStatuses" open="(" item="runStatus" separator="," close=")">
#{runStatus}
</foreach>
</if>
<if test="param.employeeIds != null and param.employeeIds.size() > 0">
AND e.id IN
<foreach collection="param.employeeIds" open="(" separator="," item="item" close=")">
#{item}
</foreach>
</if>
<if test="param.ids != null and param.ids.size() > 0">
AND base.id IN
<foreach collection="param.ids" open="(" separator="," item="item" close=")">
#{item}
</foreach>
</if>
</sql>
<!-- 根据社保缴纳组织id获取记录 -->
<select id="getSocialByPaymentOrganization" resultMap="BaseResultMap" >
SELECT
@ -709,4 +967,42 @@
</foreach>
</if>
</update>
<insert id="insert" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO">
INSERT INTO hrsa_social_archives(
welfare_type,
delete_type,
social_payment_base_string,
social_scheme_id,
create_time,
social_end_time,
social_start_time,
creator,
non_payment,
tenant_key,
employee_id,
update_time,
under_take,
social_account,
payment_organization)
VALUES
(
#{welfareType},
#{deleteType},
#{socialPaymentBaseString},
#{socialSchemeId},
#{createTime},
#{socialEndTime},
#{socialStartTime},
#{creator},
#{nonPayment},
#{tenantKey},
#{employeeId},
#{updateTime},
#{underTake},
#{socialAccount},
#{paymentOrganization}
)
</insert>
</mapper>

View File

@ -70,6 +70,12 @@ public interface ICategoryMapper {
*/
void updateNameById(ICategoryPO iCategoryPO);
/**
* 根据id更新福利名称和缴费对象
* @param iCategoryPO
*/
void updateNameAndPayScopeById(ICategoryPO iCategoryPO);
/**
* 根据类型查询福利类型
*
@ -91,4 +97,10 @@ public interface ICategoryMapper {
* @return
*/
List<ICategoryListDTO> listCustomInsurance(@Param("welfareType") Integer welfareType);
/**
* 根据id删除自定义福利项
* @param iCategoryPO
*/
void deleteCustomCategoryById(ICategoryPO iCategoryPO);
}

View File

@ -180,6 +180,17 @@
WHERE id = #{id} AND data_type = 0
</update>
<!--更新自定义福利名称和缴费对象-->
<update id="updateNameAndPayScopeById">
UPDATE hrsa_insurance_category
<set>
update_time=#{updateTime},
insurance_name=#{insuranceName},
payment_scope=#{paymentScope},
</set>
WHERE id = #{id} AND data_type = 0
</update>
<!--更新自定义福利名称-->
<select id="listCustomInsurance" resultType="com.engine.salary.entity.sicategory.dto.ICategoryListDTO">
select
@ -201,5 +212,14 @@
</if>
</select>
<!--根据id删除自定义福利项-->
<update id="deleteCustomCategoryById" parameterType="com.engine.salary.entity.sicategory.po.ICategoryPO">
UPDATE hrsa_insurance_category
<set>
update_time=#{updateTime},
delete_type = 1
</set>
WHERE id = #{id} AND delete_type = 0 AND data_type = 0
</update>
</mapper>

View File

@ -80,7 +80,12 @@
AND update_time = #{updateTime}
</if>
<if test="employeeType != null">
AND employee_type = #{employeeType}
<if test="employeeType == 0">
AND (employee_type = #{employeeType} or employee_type is null)
</if>
<if test="employeeType != 0">
AND employee_type = #{employeeType}
</if>
</if>
<if test="taxAgentIds != null and taxAgentIds.size()>0">
AND tax_agent_id IN

View File

@ -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<DataCollectionEmployee> listAllForReport();
ExtEmpPO getById(Long id);
XSSFWorkbook exportImportTemplate();
Map<String, Object> previewImportExtEmp(ExtEmpImportParam param);
Map<String, Object> importExtEmp(ExtEmpImportParam param);
}

View File

@ -58,4 +58,11 @@ public interface SICategoryService {
* @date 2022/10/14 14:50
*/
Map<String, Object> updateCategoryName(ICategoryFormDTO iCategoryFormDTO);
/***
* @description 修改自定义福利 名称缴费对象
*/
Map<String, Object> updateCategoryNameAndPayScope(ICategoryFormDTO iCategoryFormDTO);
Map<String, Object> deleteCustomCategory(ICategoryFormDTO iCategoryFormDTO);
}

View File

@ -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<SalaryBillItemNamePO> 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<SalaryBillItemNamePO> ListByTemplateAndType(SalaryBillItemNamePO build);
/**
* 设置工资单薪资项目显示名
* @param saveList
*/
void saveItemShowName(List<SalaryBillItemNameSaveParam> saveList);
/**
* 批量更新
* @param needUpdateList
*/
void batchUpdate(List<SalaryBillItemNamePO> needUpdateList);
/**
* 批量插入
* @param needInsertList
*/
void batchInsert(List<SalaryBillItemNamePO> needInsertList);
/**
* 根据id批量删除
* @param needDeleteIds
*/
void deleteByIds(List<Long> needDeleteIds);
/**
* 根据工资单模板id删除
* @param ids
*/
void deleteByTemplateIds(Collection<Long> ids);
}

View File

@ -13,4 +13,14 @@ public interface SalarySobItemHideService {
* @return
*/
List<Long> listHideGroupBysalarySobId(SalarySobItemHidePO salarySobId);
/**
* 根据薪资账套id查询哪些字段关闭显示
*
* @param po
* @return
*/
List<SalarySobItemHidePO> listSome(SalarySobItemHidePO po);
void updateById(SalarySobItemHidePO salarySobItemHidePO);
}

View File

@ -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<Long> salarySobIds);
/**
* 薪资项目的详情
*/
SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param);
}

View File

@ -97,7 +97,7 @@ public interface SalaryTemplateService {
* @param salarySobId
* @return
*/
List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish);
List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, Long salaryTemplateId, boolean isReplenish);
/**
* 获取默认工资单模板

View File

@ -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;
/**
* 累计专项
* <p>Copyright: Copyright (c) 2022</p>
@ -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<ExtEmpPO> list(ExtEmpQueryParam param) {
@ -203,4 +225,318 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService {
return employee;
}).collect(Collectors.toList());
}
@Override
public XSSFWorkbook exportImportTemplate() {
// 模板表头
List<Object> 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<String> dataIndexList = Lists.newArrayList("username", "departmentName", "subcompanyName", "companystartdate", "mobile", "workcode", "idNo", "bankCardNum", "bankName");
// excel导出的数据
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
// 注释
List<ExcelComment> 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<String, Object> previewImportExtEmp(ExtEmpImportParam param) {
//参数校验
ValidUtil.doValidator(param);
Map<String, Object> 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<String, Object> importExtEmp(ExtEmpImportParam param){
Map<String, Object> apidatas = new HashMap<String, Object>();
//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<ExtEmpPO> allExtEmpInfo= getExternalEmployeeMapper().listAll();
// 错误提示信息
List<Map> excelComments = Lists.newArrayList();
// 存在错误的那行数据
List<Map<String, Object>> errorDatas = Lists.newArrayList();
// 表头
List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
// 处理数值
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
if (CollectionUtils.isEmpty(headers)) {
throw new SalaryRunTimeException("表头为空");
}
if (CollectionUtils.isEmpty(data)) {
throw new SalaryRunTimeException("无数据");
}
//存储待新增和待更新的ExtEmpPO数据
List<ExtEmpPO> updateExtEmpPOList = new ArrayList<>();
List<ExtEmpPO> insertExtEmpPOList = new ArrayList<>();
//遍历excel表具体数据
for (int i = 0; i < data.size(); i++) {
String row = "" + (i + 1) + "";
boolean isError = false;
Map<String, Object> 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<String, String> 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<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "本次excel文件中已存在该姓名相关数据本行数据无法录入"));
excelComments.add(errorMessageMap);
}
//校验部门分部
List<SubCompanyInfo> subCompanyInfos = new ArrayList<>();
List<DeptInfo> deptInfos = new ArrayList<>();
if (StringUtils.isNotBlank(subcompanyName)) {
subCompanyInfos = getEmployMapper().getSubCompanyInfosByName(subcompanyName);
if (subCompanyInfos.size() == 0) {
isError = true;
Map<String, String> 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<String, String> 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<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "入职日期格式错误正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
}
if (!isError){
//校验当前数据是否有相关数据姓名相同存在数据库中有则更新无则新建
List<ExtEmpPO> targetExtEmpInfoList = allExtEmpInfo.stream().filter(f -> f.getUsername().equals(username)).collect(Collectors.toList());
//校验部门和分部关系
List<DeptInfo> targetDeptInfos = new ArrayList<>();
List<SubCompanyInfo> 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<String, String> 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<String, String> 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<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "部门与分部无法匹配"));
excelComments.add(errorMessageMap);
} else if (targetDeptInfos.size() > 1) {
isError = true;
Map<String, String> 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<String, String> 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<String, Object> 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;
}
}

View File

@ -66,7 +66,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ
if (CollectionUtils.isEmpty(list)) {
return result;
}
List<Long> employeeIds = list.stream().map(item -> item.getEmployeeId()).collect(Collectors.toList());
List<Long> employeeIds = list.stream().map(item -> item.getEmployeeId()).distinct().collect(Collectors.toList());
List<DataCollectionEmployee> employeeByIds = new ArrayList<>();
List<List<Long>> partition = Lists.partition(employeeIds, 1000);
for (List<Long> longs : partition) {

View File

@ -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<String, String> welfareColumns() {
List<ICategoryPO> listAll = getICategoryMapper().listAll();
List<ICategoryPO> listAll = getICategoryMapper().listAll().stream().filter(f -> f.getIsUse().equals(IsUseEnum.START.getValue())).collect(Collectors.toList());
List<ICategoryPO> 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<String, String> 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<String, String> 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<List<ExcelInsuranceDetailPO>> partition = Lists.partition((List<ExcelInsuranceDetailPO>) 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<String, String> 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());

View File

@ -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<TaxAgentEmpChangePO> taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.INSURANCE_ARCHIVE);
log.info("待处理的福利档案增量数据数量 {}", taxAgentEmpChangeList.size());
if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) {
Util_DataCache.setObjVal("welfareChangeSign", "0");
return;
}
// 当前可以管辖的人员
Collection<TaxAgentPO> taxAgentList = new ArrayList<>();
if (currentEmployeeId != 1L) {
taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId);
Collection<TaxAgentPO> 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<TaxAgentEmpChangePO> taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.INSURANCE_ARCHIVE);
log.info("待处理的福利档案增量数据数量 {}", taxAgentEmpChangeList.size());
if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) {
Util_DataCache.setObjVal("welfareChangeSign", "0");
return;
}
}
// 当前可以管辖的人员
Collection<TaxAgentPO> taxAgentList = new ArrayList<>();
if (currentEmployeeId != 1L) {
taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId);
Collection<TaxAgentPO> 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<TaxAgentPO> 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<InsuranceArchivesBaseInfoPO> 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<InsuranceArchivesBaseInfoPO> toStayDelList = changeData.getBaseInfoUpdateTodoList().stream()
.filter(f -> f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))
.collect(Collectors.toList());
if (toStayDelList.size() > 0) {
List<List<InsuranceArchivesBaseInfoPO>> partitionUpdateEndTime = Lists.partition(toStayDelList, 100);
partitionUpdateEndTime.forEach(part->{
List<Long> socialIds = part.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList());
List<Long> fundIds = part.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList());
List<Long> 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<InsuranceArchivesBaseInfoPO> 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<InsuranceArchivesBaseInfoPO> 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<InsuranceArchivesBaseInfoPO> 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<List<InsuranceArchivesBaseInfoPO>> partitionUpdateEndTime = Lists.partition(toStayDelList, 100);
partitionUpdateEndTime.forEach(part->{
List<Long> socialIds = part.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList());
List<Long> fundIds = part.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList());
List<Long> 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<InsuranceArchivesBaseInfoPO> 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<List<InsuranceArchivesBaseInfoPO>> 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<List<InsuranceArchivesBaseInfoPO>> 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<InsuranceArchivesBaseInfoPO> addNewInsuranceBaseInfo(List<InsuranceArchivesBaseInfoPO> baseInfoPOList, Long currentEmployeeId) {
List<InsuranceArchivesSocialSchemePO> socialList = new ArrayList<>();
List<InsuranceArchivesFundSchemePO> fundList = new ArrayList<>();
List<InsuranceArchivesOtherSchemePO> 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<InsuranceArchivesSocialSchemePO> socialList = new ArrayList<>();
List<InsuranceArchivesFundSchemePO> fundList = new ArrayList<>();
List<InsuranceArchivesOtherSchemePO> 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<List<InsuranceArchivesSocialSchemePO>> partition = Lists.partition(socialList, 100);
partition.forEach(getSocialSchemeMapper()::batchSave);
}
//导入公积金档案
if (CollectionUtils.isNotEmpty(fundList)) {
//根据人员id和个税扣缴义务人id删除对应档案
fundList.forEach(getFundSchemeMapper()::deleteByEmployeeIdAndPayOrg);
List<List<InsuranceArchivesFundSchemePO>> partition = Lists.partition(fundList, 100);
partition.forEach(getFundSchemeMapper()::batchSave);
}
//导入其他福利档案
if (CollectionUtils.isNotEmpty(otherList)) {
//根据人员id和个税扣缴义务人id删除对应档案
otherList.forEach(getOtherSchemeMapper()::deleteByEmployeeIdAndPayOrg);
List<List<InsuranceArchivesOtherSchemePO>> partition = Lists.partition(otherList, 100);
partition.forEach(getOtherSchemeMapper()::batchSave);
}
//导入福利档案基础信息
if (CollectionUtils.isNotEmpty(baseInfoPOList)) {
//根据人员id和个税扣缴义务人id删除对应档案
baseInfoPOList.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg);
// //分批批量删除
List<Long> baseInfoEmployeeIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getEmployeeId).collect(Collectors.toList());
//查询目标人员的剩余的福利档案基础信息社保公积金其他福利档案id
List<InsuranceArchivesBaseInfoPO> moreBaseInfoPOS = new ArrayList<>();
List<List<Long>> partitionInfo = Lists.partition((List<Long>) baseInfoEmployeeIds, 1000);
partitionInfo.forEach(part -> moreBaseInfoPOS.addAll(
getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part)));
List<InsuranceArchivesBaseInfoPO> 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<List<InsuranceArchivesBaseInfoPO>> 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<List<InsuranceArchivesSocialSchemePO>> 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<List<InsuranceArchivesFundSchemePO>> 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<List<InsuranceArchivesOtherSchemePO>> partition = Lists.partition(otherList, 100);
partition.forEach(getOtherSchemeMapper()::batchSave);
log.info("新增其他福利档案成功");
}
//导入福利档案基础信息
if (CollectionUtils.isNotEmpty(baseInfoPOList)) {
//根据人员id和个税扣缴义务人id删除对应档案
baseInfoPOList.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg);
log.info("删除历史福利档案基础信息");
// //分批批量删除
List<Long> baseInfoEmployeeIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getEmployeeId).collect(Collectors.toList());
return baseInfoPOList;
//查询目标人员的剩余的福利档案基础信息社保公积金其他福利档案id
List<InsuranceArchivesBaseInfoPO> moreBaseInfoPOS = new ArrayList<>();
log.info("查询目标人员的剩余的福利档案基础信息社保、公积金、其他福利档案id");
List<List<Long>> partitionInfo = Lists.partition((List<Long>) baseInfoEmployeeIds, 1000);
partitionInfo.forEach(part -> moreBaseInfoPOS.addAll(
getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part)));
List<InsuranceArchivesBaseInfoPO> 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<List<InsuranceArchivesBaseInfoPO>> 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

View File

@ -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<String, Object> getForm(Map<String, Object> params) {
@ -152,6 +167,78 @@ public class SICategoryServiceImpl extends Service implements SICategoryService
return null;
}
@Override
public Map<String, Object> 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<ICategoryPO> 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<String, Object> 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<InsuranceAccountDetailPO> insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().listAll();
encryptUtil.decryptList(insuranceAccountDetailPOS, InsuranceAccountDetailPO.class);
//数据组装
List<Map<String, Object>> 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())

View File

@ -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<String> 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<InsuranceArchivesEmployeePO> page = new ArrayList<>();
page = socialSchemeMapper.queryEmployeeList(param);
if (param.isExtWelArchiveList()) {
page = socialSchemeMapper.queryExtEmployeeList(param);
} else {
page = socialSchemeMapper.queryEmployeeList(param);
}
PageInfo<InsuranceArchivesEmployeePO> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(),
page, InsuranceArchivesEmployeePO.class);
int total = (int)pageInfo.getTotal();

View File

@ -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();

View File

@ -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<Object> 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<Object> 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<Object> 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;

View File

@ -330,6 +330,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
// 查询薪资核算所用薪资账套的薪资项目
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
Map<Long, SalarySobItemPO> salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
Set<Long> 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<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
// 查询薪资核算结果
List<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList());
List<SalaryAcctResultPO> 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;
}

View File

@ -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<SalaryBillItemNamePO> 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<SalaryBillItemNamePO> ListByTemplateAndType(SalaryBillItemNamePO param) {
return getSalaryBillItemNameMapper().listSome(param);
}
@Override
public void saveItemShowName(List<SalaryBillItemNameSaveParam> saveList) {
saveList= saveList.stream().filter(param -> !Objects.isNull(param.getSalaryTemplateId()) && CollectionUtils.isNotEmpty(param.getItemShowNameSetting())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(saveList))
return;
List<Long> 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<SalaryBillItemNamePO> needInsertList = new ArrayList<>();
List<SalaryBillItemNamePO> needUpdateList = new ArrayList<>();
Date now = new Date();
// 根据模板类型分组
Map<Integer, List<SalaryBillItemNameSaveParam.itemShowNameSetting>> saveMap = SalaryEntityUtil.convert2Map(saveList, SalaryBillItemNameSaveParam::getSalaryBillType, SalaryBillItemNameSaveParam::getItemShowNameSetting);
for(Map.Entry<Integer, List<SalaryBillItemNameSaveParam.itemShowNameSetting>> entry : saveMap.entrySet()){
// 获取已经设置的展示名
List<SalaryBillItemNamePO> billItemNameList = ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(salaryTemplateId).salaryBillType(entry.getKey()).build());
Map<Long, SalaryBillItemNamePO> billItemNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId);
List<Long> 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<SalaryBillItemNamePO> needUpdateList) {
if(CollectionUtils.isEmpty(needUpdateList)){
return;
}
List<List<SalaryBillItemNamePO>> partition = Lists.partition(needUpdateList, 500);
partition.forEach(getSalaryBillItemNameMapper()::batchUpdate);
}
@Override
public void batchInsert(List<SalaryBillItemNamePO> needInsertList) {
if(CollectionUtils.isEmpty(needInsertList)){
return;
}
List<List<SalaryBillItemNamePO>> partition = Lists.partition(needInsertList, 500);
partition.forEach(getSalaryBillItemNameMapper()::batchInsert);
}
@Override
public void deleteByIds(List<Long> needDeleteIds) {
if(CollectionUtils.isEmpty(needDeleteIds)){
return;
}
List<List<Long>> partition = Lists.partition(needDeleteIds, 1000);
partition.forEach(getSalaryBillItemNameMapper()::deleteByIds);
}
public void batchDeleteByItemIdsAndTemplateId(List<Long> 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<Long> ids) {
if(CollectionUtils.isEmpty(ids)){
return;
}
getSalaryBillItemNameMapper().deleteByTemplateIds(ids);
}
}

View File

@ -72,13 +72,13 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee
public List<DataCollectionEmployee> listAll(UseEmployeeTypeEnum empType) {
List<DataCollectionEmployee> 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;

View File

@ -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());

View File

@ -1579,6 +1579,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
}
// 查询薪资核算所用薪资账套的薪资项目
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
Map<Long, SalarySobItemPO> salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getId);
Set<Long> 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;
}

View File

@ -13,6 +13,16 @@ public class SalarySobItemHideServiceImpl extends Service implements SalarySobIt
@Override
public List<Long> listHideGroupBysalarySobId(SalarySobItemHidePO salarySobPO) {
return salarySobItemHideMapper.listSome(salarySobPO);
return salarySobItemHideMapper.listHideItemIds(salarySobPO);
}
@Override
public List<SalarySobItemHidePO> listSome(SalarySobItemHidePO po) {
return salarySobItemHideMapper.listSome(po);
}
@Override
public void updateById(SalarySobItemHidePO salarySobItemHidePO) {
salarySobItemHideMapper.update(salarySobItemHidePO);
}
}

View File

@ -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<SalarySobItemGroupPO> salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salarySobId);
if (isBackCalc) {
// 回算分类
}
// 获取关闭显示的分类
List<Long> hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build());
// 过滤关闭显示的薪资项目分类
@ -348,6 +348,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
List<SalarySobItemSaveParam.SalarySobItemGroupParam> needUpdateGroup = itemGroups.stream().filter(f -> f.getId() != null && oldGroupIds.contains(f.getId())).collect(Collectors.toList());
List<Long> needDeleteGroupIds = oldGroupIds.stream().filter(f -> !newGroupIds.contains(f)).collect(Collectors.toList());
// 获取所有薪资项目
List<SalaryItemPO> allSalaryItemList = getSalaryItemService(user).listAll();
Map<Long, SalaryItemPO> salaryItemsMap = SalaryEntityUtil.convert2Map(allSalaryItemList, SalaryItemPO::getId);
// 需要保存的隐藏项目
List<SalarySobItemHidePO> 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<SalarySobItemSaveParam.SalarySobItemParam> 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<Long, SalaryItemPO> 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<Long> 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<SalarySobItemPO> 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<SalarySobDefaultItemPO> salarySobDefaultItemPOS = getSalarySobDefaultItemMapper().listAll();
salarySobDefaultItemPOS = salarySobDefaultItemPOS.stream().filter(po -> po.getSysSalaryItemId() != 0).collect(Collectors.toList());
Map<Long, Integer> longIntegerMap = SalaryEntityUtil.convert2Map(salarySobDefaultItemPOS, SalarySobDefaultItemPO::getSysSalaryItemId, SalarySobDefaultItemPO::getCanDelete);
if (salaryItemPO.getSysSalaryItemId() != null){
salarySobItemPO.setCanDelete(longIntegerMap.getOrDefault(salaryItemPO.getSysSalaryItemId(), 1));
}
// 获取薪资项目公式
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(salarySobItemPO.getFormulaId()));
// 强制开启账套的公式配置
BaseBean baseBean = new BaseBean();
final Boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing"));
// 获取核算时隐藏的薪资项目id
List<Long> 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;
}
}

View File

@ -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<SalaryBillItemNamePO> billItemNameList = getSalaryBillItemNameService(user).ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(saveParam.getId()).build());
Map<Integer, List<SalaryBillItemNamePO>> billItemNameMap = SalaryEntityUtil.group2Map(billItemNameList, SalaryBillItemNamePO::getSalaryBillType);
List<SalaryTemplateSalaryItemListDTO> saveItemList = saveParam.getSalaryItemSetting().stream().map(SalaryTemplateSalaryItemSetListDTO::getItems).flatMap(Collection::stream).collect(Collectors.toList());
Set<String> saveItemIdList = SalaryEntityUtil.properties(saveItemList, SalaryTemplateSalaryItemListDTO::getSalaryItemId);
// 正常工资单模板中删除的薪资项目
List<Long> needDeleteIds = billItemNameMap.getOrDefault(NumberUtils.INTEGER_ZERO, Collections.emptyList()).stream().filter(salaryBillItemNamepo -> !saveItemIdList.contains(salaryBillItemNamepo.getSalaryItemId().toString()))
.map(SalaryBillItemNamePO::getId).collect(Collectors.toList());
// 补发工资单模板中删除的薪资项目
List<SalaryTemplateSalaryItemListDTO> replenishItemList = saveParam.getReplenishSalaryItemSetting().stream().map(SalaryTemplateSalaryItemSetListDTO::getItems).flatMap(Collection::stream).collect(Collectors.toList());
Set<String> 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<SalaryBillItemNamePO> billItemNamePOList = getSalaryBillItemNameService(user).ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(copyParam.getId()).build());
if(CollectionUtils.isNotEmpty(billItemNamePOList)){
Date now = new Date();
List<SalaryBillItemNamePO> 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<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish) {
public List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, Long salaryTemplateId, boolean isReplenish) {
SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId);
return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish, user);
// 获取工资单薪资项目展示名信息
List<SalaryBillItemNamePO> billItemNameList = getSalaryBillItemNameService(user).ListByTemplateAndType(
SalaryBillItemNamePO.builder().salaryTemplateId(salaryTemplateId)
.salaryBillType(isReplenish ? 1 : 0)
.build());
Map<Long, String> itemShowNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId, SalaryBillItemNamePO::getSalaryItemShowName);
List<SalaryTemplateSalaryItemSetListDTO> 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

View File

@ -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<Long, ExtEmpPO>(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<ExtEmpImportParam, Map<String, Object>>(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<ExtEmpImportParam, Map<String, Object>>(user).run(getExtEmpWrapper(user)::previewImportExtEmp, param);
}
// **********************************非系统人员导入 end*********************************/
}

View File

@ -235,4 +235,20 @@ public class SIArchivesController {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Collection<Long>, Map<String, Object>>(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<InsuranceArchivesListParam,Map<String,Object>>(user).run(getService(user)::listPage, param);
}
}

View File

@ -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<String, Object> map = ParamUtil.request2Map(request);
return new ResponseResult< ICategoryFormDTO, Map<String, Object>>(user).run(getService(user)::updateCategoryName, iCategoryFormDTO);
// return new ResponseResult< ICategoryFormDTO, Map<String, Object>>(user).run(getService(user)::updateCategoryName, iCategoryFormDTO);
return new ResponseResult< ICategoryFormDTO, Map<String, Object>>(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<String, Object>>(user).run(getService(user)::deleteCustomCategory, iCategoryFormDTO);
}

View File

@ -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<InsuranceAccountInspectPO> 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");

View File

@ -102,6 +102,19 @@ public class SalaryBillController {
return new ResponseResult<Long, SalaryTemplateShowFormDTO>(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<SalaryBillItemNameSaveParam> param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<List<SalaryBillItemNameSaveParam>, String>(user).run(getSalaryTemplateWrapper(user)::saveItemShowName, param);
}
/**
* 获取薪资项目设置
*

View File

@ -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<Long, ExpressFormulaDTO>(user).run(getSalaryFormulaWrapper(user)::detail, formulaId);
return new ResponseResult<SalaryFormulaDetailQueryParam, ExpressFormulaDTO>(user).run(getSalaryFormulaWrapper(user)::detail, queryParam);
}
@POST

Some files were not shown because too many files have changed in this diff Show More