weaver-hrm-salary/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java

290 lines
13 KiB
Java
Raw Normal View History

2022-03-21 20:09:10 +08:00
package com.engine.salary.service.impl;
2022-03-23 20:54:08 +08:00
import com.engine.common.util.ServiceUtil;
2022-03-21 20:09:10 +08:00
import com.engine.core.impl.Service;
2022-03-23 18:41:38 +08:00
import com.engine.salary.biz.SalarySobBiz;
2022-03-21 20:09:10 +08:00
import com.engine.salary.biz.SalarySobItemBiz;
2022-03-25 10:31:31 +08:00
import com.engine.salary.biz.SalarySobItemGroupBiz;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
2022-04-14 20:46:17 +08:00
import com.engine.salary.entity.salaryformula.ExpressFormula;
2022-03-23 18:41:38 +08:00
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.param.SalarySobItemSaveParam;
import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO;
2022-03-21 20:09:10 +08:00
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
2022-03-23 18:41:38 +08:00
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.*;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
2022-04-18 14:45:12 +08:00
import com.engine.salary.util.valid.ValidUtil;
2022-03-21 20:09:10 +08:00
import org.apache.commons.collections4.CollectionUtils;
2022-03-25 10:31:31 +08:00
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
2022-03-23 20:54:08 +08:00
import weaver.hrm.User;
2022-03-21 20:09:10 +08:00
2022-03-23 18:41:38 +08:00
import java.util.*;
2022-03-21 20:09:10 +08:00
/**
* 薪资账套的薪资项目副本
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SalarySobItemServiceImpl extends Service implements SalarySobItemService {
private SalarySobItemBiz salarySobItemMapper = new SalarySobItemBiz();
2022-03-23 18:41:38 +08:00
private SalarySobBiz salarySobBiz = new SalarySobBiz();
2022-03-23 20:54:08 +08:00
2022-03-25 10:31:31 +08:00
private SalarySobItemGroupBiz salarySobItemGroupBiz = new SalarySobItemGroupBiz();
2022-03-23 20:54:08 +08:00
private SalarySobEmpFieldService getSalarySobEmpFieldService(User user) {
return (SalarySobEmpFieldService) ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user);
}
private SalarySobItemGroupService getSalarySobItemGroupService(User user) {
return (SalarySobItemGroupService) ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user);
}
2022-04-18 14:45:12 +08:00
private SalaryFormulaService getSalaryFormulaService(User user) {
return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
}
2022-03-28 11:38:33 +08:00
private SalaryItemService getSalaryItemService(User user) {
return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
2022-03-21 20:09:10 +08:00
// private LoggerTemplate salarySobLoggerTemplate;
@Override
public List<SalarySobItemPO> list() {
return salarySobItemMapper.listAll();
}
2022-03-23 18:41:38 +08:00
@Override
public List<SalarySobItemPO> listBySalarySobId(Long salarySobId) {
return salarySobItemMapper.listSome(SalarySobItemPO.builder().salarySobId(salarySobId).build());
}
@Override
public List<SalarySobItemPO> listBySalarySobIds(Collection<Long> salarySobIds) {
return salarySobItemMapper.listSome(SalarySobItemPO.builder().salarySobIds(salarySobIds).build());
}
@Override
public List<SalarySobItemPO> listBySalarySobIdAndSalaryItemIdNotIn(Long salarySobId, Collection<Long> salaryItemIds) {
2022-03-30 11:29:48 +08:00
return salarySobItemMapper.listSome(SalarySobItemPO.builder().salarySobId(salarySobId).notInSalaryItemIds(salaryItemIds).build());
2022-03-23 18:41:38 +08:00
}
2022-03-21 20:09:10 +08:00
@Override
public List<SalarySobItemPO> listBySalaryItemIds(Collection<Long> salaryItemIds) {
if (CollectionUtils.isEmpty(salaryItemIds)) {
return Collections.emptyList();
}
2022-03-23 18:41:38 +08:00
return salarySobItemMapper.listSome(SalarySobItemPO.builder().salaryItemIds(salaryItemIds).build());
}
@Override
public List<SalaryItemPO> listBySalarySobId4SalaryItem(Long salarySobId) {
// 查询薪资项目副本
List<SalarySobItemPO> salarySobItemPOS = listBySalarySobId(salarySobId);
if (CollectionUtils.isEmpty(salarySobItemPOS)) {
return Collections.emptyList();
}
// 查询薪资项目
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
2022-03-28 11:38:33 +08:00
return getSalaryItemService(user).listByIds(salaryItemIds);
2022-03-21 20:09:10 +08:00
}
2022-03-23 18:41:38 +08:00
@Override
public SalarySobItemAggregateDTO getAggregateBySalarySobId(Long salarySobId) {
// 查询薪资账套
SalarySobPO salarySobPO = salarySobBiz.getById(salarySobId);
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除"));
}
// 查询薪资账套的员工信息字段
2022-03-23 20:54:08 +08:00
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salarySobId);
2022-03-23 18:41:38 +08:00
// 查询薪资账套的薪资项目分类
2022-03-23 20:54:08 +08:00
List<SalarySobItemGroupPO> salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salarySobId);
2022-03-23 18:41:38 +08:00
// 查询薪资账套的薪资项目副本
List<SalarySobItemPO> salarySobItemPOS = listBySalarySobId(salarySobId);
// 薪资账套的薪资项目副本所用的公式id
Set<Long> formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId);
2022-04-18 14:45:12 +08:00
// 查询公式详情
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
2022-03-23 18:41:38 +08:00
// 查询薪资账套的薪资项目副本所关联的薪资项目
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
2022-03-28 11:38:33 +08:00
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
2022-03-23 18:41:38 +08:00
// 转换成聚合dto
SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySobPO, salarySobEmpFieldPOS,
salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS);
return salarySobItemAggregateBO.convert2AggregateDTO();
}
@Override
public void save(SalarySobItemSaveParam saveParam) {
2022-03-25 10:31:31 +08:00
Long salarySobId = saveParam.getSalarySobId();
2022-03-25 18:05:07 +08:00
// 校验
2022-04-18 14:45:12 +08:00
validSaveParam(saveParam);
2022-03-25 18:05:07 +08:00
2022-03-28 16:36:40 +08:00
//fixme 事务
2022-03-25 18:05:07 +08:00
//清除原数据
cleanOldData(salarySobId);
//保存
saveSobItem(saveParam);
//todo 记录日志
// LoggerContext<SalarySobPO> loggerContext = new LoggerContext<>();
// loggerContext.setTargetId("" + salarySobPO.getId());
// loggerContext.setTargetName(salarySobPO.getName());
// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目"));
// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98613, "编辑薪资账套薪资项目"));
// salarySobLoggerTemplate.write(loggerContext);
}
/**
* 校验
*/
2022-04-18 14:45:12 +08:00
private void validSaveParam(SalarySobItemSaveParam saveParam) {
ValidUtil.doValidator(saveParam);
2022-03-25 18:05:07 +08:00
//1、账套存在
2022-04-18 14:45:12 +08:00
Long salarySobId = saveParam.getSalarySobId();
2022-03-25 10:31:31 +08:00
SalarySobPO salarySobPO = salarySobBiz.getById(salarySobId);
2022-03-23 18:41:38 +08:00
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除"));
}
2022-03-25 18:05:07 +08:00
// todo 2、分类名称唯一
}
/**
* 清楚原相关数据
2022-04-27 18:48:41 +08:00
*
2022-03-25 18:05:07 +08:00
* @param salarySobId
*/
private void cleanOldData(Long salarySobId) {
2022-03-24 16:59:52 +08:00
// 删除薪资账套的员工信息字段
2022-03-25 10:31:31 +08:00
getSalarySobEmpFieldService(user).deleteBySalarySobIds(Collections.singleton(salarySobId));
2022-03-24 16:59:52 +08:00
// 删除薪资账套的薪资项目副本
2022-03-25 10:31:31 +08:00
deleteBySalarySobIds(Collections.singleton(salarySobId));
2022-03-24 16:59:52 +08:00
// 删除薪资账套的薪资项目分类
2022-03-25 10:31:31 +08:00
getSalarySobItemGroupService(user).deleteBySalarySobIds(Collections.singleton(salarySobId));
2022-03-25 18:05:07 +08:00
}
/**
* 保存项目信息
2022-04-27 18:48:41 +08:00
*
2022-03-25 18:05:07 +08:00
* @param saveParam
*/
private void saveSobItem(SalarySobItemSaveParam saveParam) {
long employeeId = (long) user.getUID();
Date now = new Date();
Long salarySobId = saveParam.getSalarySobId();
2022-03-23 18:41:38 +08:00
// 保存薪资账套的员工信息字段
2022-03-25 18:05:07 +08:00
Collection<SalarySobEmpFieldPO> needInsertSalarySobEmpFields = new ArrayList<>();
for (SalarySobItemSaveParam.SalarySobEmpFieldParam salarySobEmpFieldParam : saveParam.getEmpFields()) {
SalarySobEmpFieldPO salarySobEmpFieldPO = SalarySobEmpFieldPO.builder()
// .id(IdGenerator.generate())
.salarySobId(saveParam.getSalarySobId())
.fieldCode(salarySobEmpFieldParam.getFieldId())
.sortedIndex(salarySobEmpFieldParam.getSortedIndex())
2022-04-27 18:48:41 +08:00
.canDelete(salarySobEmpFieldParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)
2022-03-25 18:05:07 +08:00
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
needInsertSalarySobEmpFields.add(salarySobEmpFieldPO);
2022-03-24 16:59:52 +08:00
}
2022-03-25 18:05:07 +08:00
getSalarySobEmpFieldService(user).batchSave(needInsertSalarySobEmpFields);
2022-03-24 19:42:03 +08:00
2022-03-25 10:31:31 +08:00
2022-03-25 18:05:07 +08:00
//先保存项目分类获取分类id
Collection<SalarySobItemPO> salarySobItems = new ArrayList<>();
2022-03-25 10:31:31 +08:00
int sortedIndex = 0;
for (SalarySobItemSaveParam.SalarySobItemGroupParam itemGroupParam : saveParam.getItemGroups()) {
SalarySobItemGroupPO salarySobItemGroupPO = SalarySobItemGroupPO.builder()
.salarySobId(salarySobId)
.name(itemGroupParam.getName())
.sortedIndex(sortedIndex++)
.description(StringUtils.EMPTY)
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
2022-03-25 18:05:07 +08:00
//保存分类
2022-03-25 10:31:31 +08:00
salarySobItemGroupBiz.insert(salarySobItemGroupPO);
2022-03-25 18:05:07 +08:00
//获取分类id
2022-03-25 10:31:31 +08:00
List<SalarySobItemGroupPO> salarySobItemGroupPOS = salarySobItemGroupBiz.listSome(SalarySobItemGroupPO.builder().salarySobId(salarySobId).name(itemGroupParam.getName()).build());
Long salarySobItemGroupId = salarySobItemGroupPOS.get(0).getId();
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : itemGroupParam.getItems()) {
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder()
.salarySobId(salarySobId)
.salaryItemId(itemParam.getSalaryItemId())
.salarySobItemGroupId(salarySobItemGroupId)
.formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO))
.sortedIndex(itemParam.getSortedIndex())
.description(StringUtils.EMPTY)
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
salarySobItems.add(salarySobItemPO);
}
}
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : saveParam.getItems()) {
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder()
// .id(IdGenerator.generate())
.salarySobId(salarySobId)
.salaryItemId(itemParam.getSalaryItemId())
.salarySobItemGroupId(NumberUtils.LONG_ZERO)
.formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO))
.sortedIndex(itemParam.getSortedIndex())
.description(StringUtils.EMPTY)
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
salarySobItems.add(salarySobItemPO);
}
2022-03-24 19:42:03 +08:00
2022-03-23 18:41:38 +08:00
// 保存薪资账套的薪资项目副本
2022-03-25 18:05:07 +08:00
batchSave(salarySobItems);
2022-03-23 18:41:38 +08:00
}
@Override
public void batchSave(Collection<SalarySobItemPO> salarySobItemPOS) {
2022-04-27 18:48:41 +08:00
if (CollectionUtils.isEmpty(salarySobItemPOS)) {
2022-04-14 20:46:17 +08:00
return;
}
2022-03-23 18:41:38 +08:00
salarySobItemMapper.batchInsert(salarySobItemPOS);
}
@Override
public void deleteBySalarySobIds(Collection<Long> salarySobIds) {
salarySobItemMapper.deleteBySalarySobIds(salarySobIds);
}
2022-03-21 20:09:10 +08:00
}