package com.engine.salary.service.impl; import cn.hutool.core.util.StrUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.biz.SysSalaryItemBiz; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.sicategory.SharedTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.SalarySobItemService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * 薪资项目 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ public class SalaryItemServiceImpl extends Service implements SalaryItemService { private SalaryItemBiz salaryItemBiz = new SalaryItemBiz(); private SalarySobItemService getSalarySobItemService(User user) { return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return (TaxAgentServiceImpl) ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); // @Autowired // private LoggerTemplate salaryItemLoggerTemplate; @Override public SalaryItemPO getById(Long id) { return salaryItemBiz.getById(id); } @Override public List listAll() { return salaryItemBiz.listAll(); } @Override public List listByIds(Collection ids) { if (CollectionUtils.isEmpty(ids)) { return Collections.emptyList(); } return salaryItemBiz.listSome(SalaryItemPO.builder().ids(ids).build()); } @Override public List listBySysSalaryItemIds(Collection sysSalaryItemIds) { if (CollectionUtils.isEmpty(sysSalaryItemIds)) { return Collections.emptyList(); } return salaryItemBiz.listSome(SalaryItemPO.builder().sysSalaryItemIds(sysSalaryItemIds).build()); } @Override public List listByName(String name) { return salaryItemBiz.listSome(SalaryItemPO.builder().name(name).build()); } @Override public List listBySystemType(SalarySystemTypeEnum systemType) { return salaryItemBiz.listSome(SalaryItemPO.builder().systemType(systemType.getValue()).build()); } @Override public List listBySystemTypeAndUseDefault(SalarySystemTypeEnum systemType, Integer useDefault) { return salaryItemBiz.listSome(SalaryItemPO.builder().systemType(systemType.getValue()).useDefault(useDefault).build()); } @Override public List listByParam(SalaryItemSearchParam searchParam) { return salaryItemBiz.listByParam(searchParam); } @Override public PageInfo listPageByParam(SalaryItemSearchParam searchParam) { Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); List salaryItemPOS = salaryItemBiz.listByParam(searchParam); if (needAuth) { Set userTaxAgentIds = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()) .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItemPOS = salaryItemPOS.stream() .filter(po -> filterInRange(userTaxAgentIds, po) ).collect(Collectors.toList()); } return SalaryPageUtil.buildPage(searchParam.getCurrent(), searchParam.getPageSize(), salaryItemPOS); } @Override public boolean filterInRange(Set userTaxAgentIds, SalaryItemPO po) { return null == po.getSharedType() || SharedTypeEnum.PUBLIC.getValue().equals(po.getSharedType().toString()) || (StrUtil.isNotBlank(po.getTaxAgentIds()) && Arrays.stream(po.getTaxAgentIds().split(",")) .map(Long::valueOf) .anyMatch(userTaxAgentIds::contains)); } // @Override // public Page listPageByParam(SalaryItemSearchParam searchParam, String tenantKey) { // // 分页参数 // Page page = SalaryPageUtil.buildPage(searchParam.getCurrent(), searchParam.getPageSize()); // // 构建查询参数 // Wrapper queryWrapper = SalaryItemBO.buildQueryWrapper(searchParam, tenantKey); // // 返回查询结果 // return SalaryItemBiz.selectPage(page, queryWrapper); // } @Override public void save(SalaryItemSaveParam saveParam) { // 名称不能和已有的自定义薪资项目重名 List salaryItemPOS = listByName(saveParam.getName()); if (CollectionUtils.isNotEmpty(salaryItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98326, "薪资项目名称已存在,请重新命名")); } // 名称不能和已有的系统薪资项目重名 List sysSalaryItemPOS = sysSalaryItemBiz.listSome(SysSalaryItemPO.builder().name(saveParam.getName()).build()); if (CollectionUtils.isNotEmpty(sysSalaryItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98328, "自定义薪资项目的名称不能和系统薪资项目的名称重名")); } // 保存薪资项目 SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID()); salaryItemBiz.insert(salaryItemPO); // todo 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); // loggerContext.setTargetName(salaryItemPO.getName()); // loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目")); // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98329, "新建薪资项目") + ": " + salaryItemPO.getName()); // loggerContext.setNewValues(salaryItemPO); // salaryItemLoggerTemplate.write(loggerContext); } @Override public void batchSave(Collection salaryItemPOS) { salaryItemBiz.batchSave(salaryItemPOS); } @Override public void update(SalaryItemSaveParam saveParam) { // 查询薪资项目,判断薪资项目是否存在 SalaryItemPO salaryItemPO = getById(saveParam.getId()); if (Objects.isNull(salaryItemPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除")); } // 名称不能和已有的自定义薪资项目重名 List salaryItemPOS = listByName(saveParam.getName()); boolean nameExist = salaryItemPOS.stream().anyMatch(e -> !Objects.equals(salaryItemPO.getId(), e.getId())); if (nameExist) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98326, "薪资项目名称已存在,请重新命名")); } // 名称不能和已有的系统薪资项目重名 List sysSalaryItemPOS = sysSalaryItemBiz.listSome(SysSalaryItemPO.builder().name(saveParam.getName()).build()); boolean sysNameExist = sysSalaryItemPOS.stream().anyMatch(e -> !Objects.equals(salaryItemPO.getSysSalaryItemId(), e.getId())); if (sysNameExist) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98328, "自定义薪资项目的名称不能和系统薪资项目的名称重名")); } // 更新薪资项目 SalaryItemPO newSalaryItemPO = new SalaryItemPO(); BeanUtils.copyProperties(salaryItemPO, newSalaryItemPO); newSalaryItemPO.setName(saveParam.getName()); newSalaryItemPO.setUseDefault(saveParam.getUseDefault()); newSalaryItemPO.setUseInEmployeeSalary(saveParam.getUseInEmployeeSalary()); newSalaryItemPO.setRoundingMode(saveParam.getRoundingMode()); newSalaryItemPO.setPattern(saveParam.getPattern()); // newSalaryItemPO.setValueType(saveParam.getValueType()); newSalaryItemPO.setDataType(saveParam.getDataType()); newSalaryItemPO.setFormulaId(Objects.equals(saveParam.getValueType(), SalaryValueTypeEnum.INPUT.getValue()) ? 0L : saveParam.getFormulaId()); newSalaryItemPO.setDescription(saveParam.getDescription()); newSalaryItemPO.setUpdateTime(new Date()); newSalaryItemPO.setSharedType(saveParam.getSharedType()); newSalaryItemPO.setTaxAgentIds(saveParam.getTaxAgentIds()); salaryItemBiz.updateById(newSalaryItemPO); // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId())); // loggerContext.setTargetName(newSalaryItemPO.getName()); // loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目")); // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93892, "编辑薪资项目") + ": " + newSalaryItemPO.getName()); // loggerContext.setOldValues(salaryItemPO); // loggerContext.setNewValues(newSalaryItemPO); // salaryItemLoggerTemplate.write(loggerContext); } @Override public void deleteByIds(Collection ids) { // 查询薪资项目 List salaryItemPOS = listByIds(ids); if (CollectionUtils.isEmpty(salaryItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除")); } List salarySobItemPOS = getSalarySobItemService(user).listBySalaryItemIds(ids); if (CollectionUtils.isNotEmpty(salarySobItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98322, "薪资账套正在使用该薪资项目,不允许删除")); } // 删除薪资项目 ids = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getId); salaryItemBiz.deleteByIds(ids); //todo 记录删除日志 // salaryItemPOS.forEach(salaryItemPO -> { // LoggerContext loggerContext = new LoggerContext<>(); // loggerContext.setTargetId(String.valueOf(salaryItemPO.getId())); // loggerContext.setTargetName(salaryItemPO.getName()); // loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目")); // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98323, "删除薪资项目") + ": " + salaryItemPO.getName()); // loggerContext.setOldValues(salaryItemPO); // salaryItemLoggerTemplate.write(loggerContext); // }); } }