package com.engine.salary.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.SalarySobCheckRuleBiz;
import com.engine.salary.config.SalaryElogConfig;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.entity.salarysob.bo.SalarySobCheckRuleBO;
import com.engine.salary.entity.salarysob.param.SalarySobCheckRuleQueryParam;
import com.engine.salary.entity.salarysob.param.SalarySobCheckRuleSaveParam;
import com.engine.salary.entity.salarysob.param.UpdateCheckRuleFormulaParam;
import com.engine.salary.entity.salarysob.po.SalarySobCheckRulePO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.enums.OperateTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.SalarySobCheckRuleService;
import com.engine.salary.service.SalarySobService;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.valid.RuntimeTypeEnum;
import com.engine.salary.util.valid.ValidUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import weaver.hrm.User;
import java.util.*;
/**
* 薪资账套的校验规则
*
Copyright: Copyright (c) 2022
* Company: 泛微软件
*
* @author qiantao
* @version 1.0
**/
public class SalarySobCheckRuleServiceImpl extends Service implements SalarySobCheckRuleService {
private SalarySobCheckRuleBiz salarySobCheckRuleMapper = new SalarySobCheckRuleBiz();
private SalarySobService getSalarySobService(User user) {
return (SalarySobService) ServiceUtil.getService(SalarySobServiceImpl.class, user);
}
@Override
public SalarySobCheckRulePO getById(Long id) {
return salarySobCheckRuleMapper.getById(id);
}
@Override
public List listByIds(Collection ids) {
return salarySobCheckRuleMapper.listSome(SalarySobCheckRulePO.builder().ids(ids).build());
}
@Override
public List listBySalarySobId(Long salarySobId) {
return salarySobCheckRuleMapper.listSome(SalarySobCheckRulePO.builder().salarySobId(salarySobId).build());
}
@Override
public List listBySalarySobIdAndName(Long salarySobId, String name) {
return salarySobCheckRuleMapper.listSome(SalarySobCheckRulePO.builder().salarySobId(salarySobId).name(name).build());
}
@Override
public PageInfo listPageByParam(SalarySobCheckRuleQueryParam queryParam) {
return salarySobCheckRuleMapper.listPageByParam(queryParam);
}
@Override
public void save(SalarySobCheckRuleSaveParam saveParam) {
ValidUtil.doValidator(saveParam);
// 查询薪资账套的校验规则
List salarySobCheckRulePOS = listBySalarySobIdAndName(saveParam.getSalarySobId(), saveParam.getName());
if (CollectionUtils.isNotEmpty(salarySobCheckRulePOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98629, "名称已经存在"));
}
// 查询薪资账套
SalarySobPO salarySobPO = getSalarySobService(user).getById(saveParam.getSalarySobId());
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除"));
}
// 保存参数转换成薪资账套的校验规则po
SalarySobCheckRulePO salarySobCheckRulePO = SalarySobCheckRuleBO.convert2PO(saveParam, (long) user.getUID());
// 保存
salarySobCheckRuleMapper.insert(salarySobCheckRulePO);
//记录日志
LoggerContext loggerContext = new LoggerContext<>();
loggerContext.setTargetId("" + salarySobPO.getId());
loggerContext.setTargetName(salarySobPO.getName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93872, "添加校验规则"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93872, "添加校验规则") + ": " + salarySobCheckRulePO.getName());
loggerContext.setNewValues(salarySobCheckRulePO);
SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext);
}
@Override
public void batchSave(Collection salarySobCheckRulePOS) {
salarySobCheckRuleMapper.batchInsert(salarySobCheckRulePOS);
}
@Override
public void update(SalarySobCheckRuleSaveParam updateParam) {
ValidUtil.doValidator(updateParam, RuntimeTypeEnum.UPDATE);
// 名称不允许重复
List salarySobCheckRulePOS = listBySalarySobIdAndName(updateParam.getSalarySobId(), updateParam.getName());
boolean nameExist = salarySobCheckRulePOS.stream().anyMatch(salarySobCheckRulePO -> !Objects.equals(salarySobCheckRulePO.getId(), updateParam.getId()));
if (nameExist) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98629, "名称已经存在"));
}
// 查询薪资账套的校验规则
SalarySobCheckRulePO salarySobCheckRulePO = getById(updateParam.getId());
if (Objects.isNull(salarySobCheckRulePO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98636, "校验规则不存在或者已被删除"));
}
// 查询薪资账套
SalarySobPO salarySobPO = getSalarySobService(user).getById(updateParam.getSalarySobId());
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除"));
}
// 更新
SalarySobCheckRulePO newSalarySobCheckRulePO = new SalarySobCheckRulePO();
BeanUtils.copyProperties(salarySobCheckRulePO, newSalarySobCheckRulePO);
newSalarySobCheckRulePO.setName(updateParam.getName());
newSalarySobCheckRulePO.setFormulaId(updateParam.getFormulaId());
newSalarySobCheckRulePO.setUpdateTime(new Date());
salarySobCheckRuleMapper.updateById(newSalarySobCheckRulePO);
//todo 记录日志
LoggerContext loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId("" + salarySobPO.getId());
loggerContext.setTargetName(salarySobPO.getName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(93870, "编辑校验规则") + ": " + newSalarySobCheckRulePO.getName());
loggerContext.setOldValues(salarySobCheckRulePO);
loggerContext.setNewValues(newSalarySobCheckRulePO);
SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext);
}
@Override
public void updateFormulaId(UpdateCheckRuleFormulaParam updateParam) {
ValidUtil.doValidator(updateParam);
// 查询薪资账套的校验规则
SalarySobCheckRulePO salarySobCheckRulePO = getById(updateParam.getId());
if (Objects.isNull(salarySobCheckRulePO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98636, "校验规则不存在或者已被删除"));
}
// 更新
SalarySobCheckRuleSaveParam salarySobCheckRuleSaveParam = new SalarySobCheckRuleSaveParam()
.setId(updateParam.getId())
.setName(salarySobCheckRulePO.getName())
.setSalarySobId(salarySobCheckRulePO.getSalarySobId())
.setFormulaId(updateParam.getFormulaId())
.setDescription(salarySobCheckRulePO.getDescription());
update(salarySobCheckRuleSaveParam);
}
@Override
public void deleteByIds(Collection ids) {
// 查询薪资账套的校验规则
List salarySobCheckRulePOS = listByIds(ids);
if (CollectionUtils.isEmpty(salarySobCheckRulePOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98636, "校验规则不存在或者已被删除"));
}
// 删除薪资账套的考验规则
ids = SalaryEntityUtil.properties(salarySobCheckRulePOS, SalarySobCheckRulePO::getId);
salarySobCheckRuleMapper.deleteByIds(ids);
// 查询薪资账套
Set salarySobIds = SalaryEntityUtil.properties(salarySobCheckRulePOS, SalarySobCheckRulePO::getSalarySobId);
List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds);
// 将薪资账套list转换成map
Map salarySobPOMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getId);
//todo 记录日志
salarySobCheckRulePOS.forEach(salarySobCheckRulePO -> {
SalarySobPO salarySobPO = salarySobPOMap.get(salarySobCheckRulePO.getSalarySobId());
LoggerContext loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId("" + salarySobPO.getId());
loggerContext.setTargetName(salarySobPO.getName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98646, "删除校验规则") + ": " + salarySobCheckRulePO.getName());
loggerContext.setOldValues(salarySobCheckRulePO);
SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext);
});
}
@Override
public void deleteBySalarySobIds(Collection salarySobIds) {
salarySobCheckRuleMapper.deleteBySalarySobIds(salarySobIds);
}
}