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 com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * @author Harryxzy * @ClassName SalaryBillItemNameServiceImpl * @date 2023/07/18 16:17 * @description */ public class SalaryBillItemNameServiceImpl extends Service implements SalaryBillItemNameService { private SalaryBillItemNameMapper getSalaryBillItemNameMapper() { return SqlProxyHandle.getProxy(SalaryBillItemNameMapper.class); } private SalaryItemService getSalaryItemService(User user) { return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } private SalaryTemplateService getSalaryTemplateService(User user) { return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user); } @Override public List listAll() { return getSalaryBillItemNameMapper().listAll(); } @Override public SalaryBillItemNamePO getById(Long id) { return getSalaryBillItemNameMapper().getById(id); } @Override public int insertIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO) { return getSalaryBillItemNameMapper().insertIgnoreNull(salaryBillItemNamePO); } @Override public int update(SalaryBillItemNamePO salaryBillItemNamePO) { return getSalaryBillItemNameMapper().update(salaryBillItemNamePO); } @Override public int updateIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO) { return getSalaryBillItemNameMapper().updateIgnoreNull(salaryBillItemNamePO); } @Override public int delete(Long id) { return getSalaryBillItemNameMapper().delete(id); } @Override public List ListByTemplateAndType(SalaryBillItemNamePO param) { return getSalaryBillItemNameMapper().listSome(param); } @Override public void saveItemShowName(List saveList) { saveList= saveList.stream().filter(param -> !Objects.isNull(param.getSalaryTemplateId()) && CollectionUtils.isNotEmpty(param.getItemShowNameSetting())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(saveList)) return; List templateIdList = saveList.stream().map(SalaryBillItemNameSaveParam::getSalaryTemplateId).distinct().collect(Collectors.toList()); if(CollectionUtils.isEmpty(templateIdList) || templateIdList.size()>1){ throw new SalaryRunTimeException("工资单模板id为空,或存在多个工资单模板id"); } Long salaryTemplateId = templateIdList.get(0); SalaryTemplatePO salaryTemplatePO = getSalaryTemplateService(user).getById(salaryTemplateId); if(Objects.isNull(salaryTemplatePO)){ throw new SalaryRunTimeException("工资单模板不存在或已被删除"); } List needInsertList = new ArrayList<>(); List needUpdateList = new ArrayList<>(); Date now = new Date(); // 根据模板类型分组 Map> saveMap = SalaryEntityUtil.convert2Map(saveList, SalaryBillItemNameSaveParam::getSalaryBillType, SalaryBillItemNameSaveParam::getItemShowNameSetting); for(Map.Entry> entry : saveMap.entrySet()){ // 获取已经设置的展示名 List billItemNameList = ListByTemplateAndType(SalaryBillItemNamePO.builder().salaryTemplateId(salaryTemplateId).salaryBillType(entry.getKey()).build()); Map billItemNameMap = SalaryEntityUtil.convert2Map(billItemNameList, SalaryBillItemNamePO::getSalaryItemId); List needDeleteItemIdList = new ArrayList<>(); entry.getValue().stream().forEach(setting -> { if(StringUtils.isBlank(setting.getSalaryItemShowName())){ // 显示名为空则删除设置 needDeleteItemIdList.add(setting.getSalaryItemId()); }else{ if(billItemNameMap.containsKey(setting.getSalaryItemId())){ // 更新 SalaryBillItemNamePO po = billItemNameMap.get(setting.getSalaryItemId()); po.setSalaryItemShowName(setting.getSalaryItemShowName()); po.setUpdateTime(now); needUpdateList.add(po); }else{ // 新增 needInsertList.add(SalaryBillItemNamePO.builder() .id(IdGenerator.generate()) .salaryItemId(setting.getSalaryItemId()) .salaryItemShowName(setting.getSalaryItemShowName()) .salaryTemplateId(salaryTemplateId) .salaryBillType(entry.getKey()) .createTime(now) .updateTime(now) .creator(Long.valueOf(user.getUID())) .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build()); } } }); // 删除 batchDeleteByItemIdsAndTemplateId(needDeleteItemIdList, salaryTemplateId, entry.getKey()); } // 入库 batchUpdate(needUpdateList); batchInsert(needInsertList); } @Override public void batchUpdate(List needUpdateList) { if(CollectionUtils.isEmpty(needUpdateList)){ return; } List> partition = Lists.partition(needUpdateList, 500); partition.forEach(getSalaryBillItemNameMapper()::batchUpdate); } @Override public void batchInsert(List needInsertList) { if(CollectionUtils.isEmpty(needInsertList)){ return; } List> partition = Lists.partition(needInsertList, 500); partition.forEach(getSalaryBillItemNameMapper()::batchInsert); } @Override public void deleteByIds(List needDeleteIds) { if(CollectionUtils.isEmpty(needDeleteIds)){ return; } List> partition = Lists.partition(needDeleteIds, 1000); partition.forEach(getSalaryBillItemNameMapper()::deleteByIds); } public void batchDeleteByItemIdsAndTemplateId(List salaryItemIds, Long salaryTemplateId, Integer salaryBillType) { if(CollectionUtils.isEmpty(salaryItemIds) || Objects.isNull(salaryTemplateId) || Objects.isNull(salaryBillType)) return; getSalaryBillItemNameMapper().deleteByItemIdsAndTemplateId(salaryItemIds, salaryTemplateId, salaryBillType); } @Override public void deleteByTemplateIds(Collection ids) { if(CollectionUtils.isEmpty(ids)){ return; } getSalaryBillItemNameMapper().deleteByTemplateIds(ids); } }