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);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-07-31 14:13:07 +08:00
|
|
|
|
@Override
|
|
|
|
|
|
public void deleteByTemplateIds(Collection<Long> ids) {
|
|
|
|
|
|
if(CollectionUtils.isEmpty(ids)){
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
getSalaryBillItemNameMapper().deleteByTemplateIds(ids);
|
|
|
|
|
|
}
|
2023-07-18 16:28:29 +08:00
|
|
|
|
}
|