weaver-hrm-salary/src/com/engine/salary/service/impl/SalaryBillItemNameServiceIm...

183 lines
8.1 KiB
Java
Raw Normal View History

2023-07-18 16:28:29 +08:00
package com.engine.salary.service.impl;
import com.api.formmode.mybatis.util.SqlProxyHandle;
2023-07-19 16:14:25 +08:00
import com.engine.common.util.ServiceUtil;
2023-07-18 16:28:29 +08:00
import com.engine.core.impl.Service;
2023-07-19 16:14:25 +08:00
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.salaryBill.param.SalaryBillItemNameSaveParam;
2023-07-18 16:28:29 +08:00
import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO;
2023-07-19 16:14:25 +08:00
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
import com.engine.salary.exception.SalaryRunTimeException;
2023-07-18 16:28:29 +08:00
import com.engine.salary.mapper.salarybill.SalaryBillItemNameMapper;
import com.engine.salary.service.SalaryBillItemNameService;
2023-07-19 16:14:25 +08:00
import com.engine.salary.service.SalaryItemService;
import com.engine.salary.service.SalaryTemplateService;
import com.engine.salary.util.SalaryEntityUtil;
import com.google.common.collect.Lists;
2024-01-25 11:38:38 +08:00
import com.engine.salary.util.db.IdGenerator;
2023-07-19 16:14:25 +08:00
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.StringUtils;
import weaver.hrm.User;
2023-07-18 16:28:29 +08:00
2023-07-19 16:14:25 +08:00
import java.util.*;
import java.util.stream.Collectors;
2023-07-18 16:28:29 +08:00
/**
* @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);
}
2023-07-19 16:14:25 +08:00
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
private SalaryTemplateService getSalaryTemplateService(User user) {
return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user);
}
2023-07-18 16:28:29 +08:00
@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);
}
2023-07-19 16:14:25 +08:00
@Override
public List<SalaryBillItemNamePO> ListByTemplateAndType(SalaryBillItemNamePO param) {
return getSalaryBillItemNameMapper().listSome(param);
}
@Override
public void saveItemShowName(List<SalaryBillItemNameSaveParam> saveList) {
2023-07-20 15:37:20 +08:00
saveList= saveList.stream().filter(param -> !Objects.isNull(param.getSalaryTemplateId()) && CollectionUtils.isNotEmpty(param.getItemShowNameSetting())).collect(Collectors.toList());
2023-07-19 16:14:25 +08:00
if(CollectionUtils.isEmpty(saveList))
return;
List<Long> templateIdList = saveList.stream().map(SalaryBillItemNameSaveParam::getSalaryTemplateId).distinct().collect(Collectors.toList());
2023-07-19 16:27:55 +08:00
if(CollectionUtils.isEmpty(templateIdList) || templateIdList.size()>1){
2023-07-19 16:14:25 +08:00
throw new SalaryRunTimeException("工资单模板id为空或存在多个工资单模板id");
2023-07-19 16:27:55 +08:00
}
2023-07-19 16:14:25 +08:00
Long salaryTemplateId = templateIdList.get(0);
SalaryTemplatePO salaryTemplatePO = getSalaryTemplateService(user).getById(salaryTemplateId);
2023-07-19 16:27:55 +08:00
if(Objects.isNull(salaryTemplatePO)){
2023-07-19 16:14:25 +08:00
throw new SalaryRunTimeException("工资单模板不存在或已被删除");
2023-07-19 16:27:55 +08:00
}
2023-07-19 16:14:25 +08:00
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) {
2023-07-20 10:42:16 +08:00
if(CollectionUtils.isEmpty(needUpdateList)){
2023-07-19 16:14:25 +08:00
return;
2023-07-20 10:42:16 +08:00
}
2023-07-19 16:14:25 +08:00
List<List<SalaryBillItemNamePO>> partition = Lists.partition(needUpdateList, 500);
partition.forEach(getSalaryBillItemNameMapper()::batchUpdate);
}
@Override
public void batchInsert(List<SalaryBillItemNamePO> needInsertList) {
2023-07-20 10:42:16 +08:00
if(CollectionUtils.isEmpty(needInsertList)){
2023-07-19 16:14:25 +08:00
return;
2023-07-20 10:42:16 +08:00
}
2023-07-19 16:14:25 +08:00
List<List<SalaryBillItemNamePO>> partition = Lists.partition(needInsertList, 500);
partition.forEach(getSalaryBillItemNameMapper()::batchInsert);
}
2023-07-20 10:42:16 +08:00
@Override
public void deleteByIds(List<Long> needDeleteIds) {
if(CollectionUtils.isEmpty(needDeleteIds)){
return;
}
List<List<Long>> partition = Lists.partition(needDeleteIds, 1000);
partition.forEach(getSalaryBillItemNameMapper()::deleteByIds);
}
2023-07-19 16:14:25 +08:00
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);
}
2023-07-18 16:28:29 +08:00
}