176 lines
9.3 KiB
Java
176 lines
9.3 KiB
Java
|
|
package com.engine.salary.report.service.impl;
|
||
|
|
|
||
|
|
import com.alibaba.fastjson.JSON;
|
||
|
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||
|
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
||
|
|
import com.engine.core.impl.Service;
|
||
|
|
import com.engine.salary.report.entity.po.SalaryStatisticsItemPO;
|
||
|
|
import com.engine.salary.report.service.SalaryStatisticsItemService;
|
||
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
||
|
|
import com.google.common.base.Joiner;
|
||
|
|
import com.weaver.common.distribution.genid.IdGenerator;
|
||
|
|
import com.weaver.common.elog.dto.LoggerContext;
|
||
|
|
import com.weaver.salary.report.dao.SalaryStatisticsItemMapper;
|
||
|
|
import com.weaver.salary.report.entity.param.SalaryStatisticsItemSaveParam;
|
||
|
|
import com.weaver.salary.report.entity.po.SubTablePO;
|
||
|
|
import com.weaver.salary.report.enums.DeleteTypeEnum;
|
||
|
|
import com.weaver.salary.report.enums.OperateTypeEnum;
|
||
|
|
import com.weaver.salary.report.enums.UnitTypeEnum;
|
||
|
|
import com.weaver.salary.report.exception.SalaryRunTimeException;
|
||
|
|
import com.weaver.salary.report.util.SalaryAssert;
|
||
|
|
import org.apache.commons.collections4.CollectionUtils;
|
||
|
|
import org.apache.commons.lang.StringUtils;
|
||
|
|
|
||
|
|
import java.time.LocalDateTime;
|
||
|
|
import java.util.*;
|
||
|
|
import java.util.stream.Collectors;
|
||
|
|
|
||
|
|
import static com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar.tenantKey;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @Description: 薪酬报表自定义统计项目
|
||
|
|
* @Author: wangxiangzhong
|
||
|
|
* @Date: 2022/12/19 10:10
|
||
|
|
*/
|
||
|
|
public class SalaryStatisticsItemServiceImpl extends Service implements SalaryStatisticsItemService {
|
||
|
|
|
||
|
|
|
||
|
|
private SalaryStatisticsItemMapper salaryStatisticsItemMapper;
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public SalaryStatisticsItemPO getById(Long id) {
|
||
|
|
return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper)
|
||
|
|
.eq(SalaryStatisticsItemPO::getDeleteType, 0)
|
||
|
|
.eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey)
|
||
|
|
.eq(SalaryStatisticsItemPO::getId, id)
|
||
|
|
.eq(SalaryStatisticsItemPO::getCreator, currentEmployeeId)
|
||
|
|
.one();
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public List<SalaryStatisticsItemPO> listByStatisticsReportId(Long statisticsReportId) {
|
||
|
|
return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper)
|
||
|
|
.eq(SalaryStatisticsItemPO::getDeleteType, 0)
|
||
|
|
.eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey)
|
||
|
|
.eq(SalaryStatisticsItemPO::getStatReportId, statisticsReportId)
|
||
|
|
.orderByAsc(SalaryStatisticsItemPO::getIndexValue)
|
||
|
|
.list();
|
||
|
|
}
|
||
|
|
|
||
|
|
public List<SalaryStatisticsItemPO> listByIds(Collection<Long> ids, String currentTenantKey) {
|
||
|
|
return new LambdaQueryChainWrapper<>(salaryStatisticsItemMapper)
|
||
|
|
.eq(SalaryStatisticsItemPO::getDeleteType, 0)
|
||
|
|
.eq(SalaryStatisticsItemPO::getTenantKey, currentTenantKey)
|
||
|
|
.in(SalaryStatisticsItemPO::getId, ids)
|
||
|
|
.list();
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public String delete(Collection<Long> ids) {
|
||
|
|
SalaryAssert.notEmpty(ids, SalaryI18nUtil.getI18nLabel(152638, "id不可为空"));
|
||
|
|
List<SalaryStatisticsItemPO> list = this.listByIds(ids);
|
||
|
|
if (CollectionUtils.isNotEmpty(list)) {
|
||
|
|
new LambdaUpdateChainWrapper<>(salaryStatisticsItemMapper)
|
||
|
|
.eq(SalaryStatisticsItemPO::getDeleteType, 0)
|
||
|
|
.eq(SalaryStatisticsItemPO::getTenantKey)
|
||
|
|
.in(SalaryStatisticsItemPO::getId, ids)
|
||
|
|
.set(SalaryStatisticsItemPO::getDeleteType, 1)
|
||
|
|
.update();
|
||
|
|
list.forEach(po -> {
|
||
|
|
LoggerContext<SubTablePO> loggerContext = new LoggerContext<>();
|
||
|
|
loggerContext.setTargetId(String.valueOf(po.getId()));
|
||
|
|
loggerContext.setTargetName(po.getItemName());
|
||
|
|
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
|
||
|
|
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目"));
|
||
|
|
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152639, "删除统计项目"));
|
||
|
|
salaryStatReportLoggerTemplate.write(loggerContext);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return StringUtils.EMPTY;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public String save(SalaryStatisticsItemSaveParam saveParam) {
|
||
|
|
// 新建
|
||
|
|
if (Objects.isNull(saveParam.getId())) {
|
||
|
|
if (Objects.isNull(saveParam.getStatReportId())) {
|
||
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(163034, "统计报表id不能为空"));
|
||
|
|
}
|
||
|
|
if (CollectionUtils.isEmpty(saveParam.getItemValue())) {
|
||
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152640, "统计项目必填"));
|
||
|
|
}
|
||
|
|
if (StringUtils.isEmpty(saveParam.getItemName())) {
|
||
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152641, "统计项名称必填"));
|
||
|
|
}
|
||
|
|
|
||
|
|
List<SalaryStatisticsItemPO> itemPOList = listByStatisticsReportId(saveParam.getStatReportId(), employeeId);
|
||
|
|
boolean isRepeat = itemPOList.stream().anyMatch(po -> saveParam.getItemName().equals(po.getItemName()));
|
||
|
|
if (isRepeat) {
|
||
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(152642, "统计项目名称已经存在"));
|
||
|
|
}
|
||
|
|
|
||
|
|
List<Integer> indexValues = itemPOList.stream().map(SalaryStatisticsItemPO::getIndexValue).collect(Collectors.toList());
|
||
|
|
Integer max = CollectionUtils.isEmpty(indexValues) ? 1 : Collections.max(indexValues);
|
||
|
|
|
||
|
|
SalaryStatisticsItemPO subTableItemPO = SalaryStatisticsItemPO.builder()
|
||
|
|
.id(IdGenerator.generate())
|
||
|
|
.createTime(LocalDateTime.now())
|
||
|
|
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
|
||
|
|
.itemName(saveParam.getItemName())
|
||
|
|
.itemValue(Joiner.on(",").join(saveParam.getItemValue()))
|
||
|
|
.countRule(JSON.toJSONString(saveParam.getCountRule()))
|
||
|
|
.sumRule(JSON.toJSONString(saveParam.getSumRule()))
|
||
|
|
.avgRule(JSON.toJSONString(saveParam.getAvgRule()))
|
||
|
|
.maxRule(JSON.toJSONString(saveParam.getMaxRule()))
|
||
|
|
.minRule(JSON.toJSONString(saveParam.getMinRule()))
|
||
|
|
.medianRule(JSON.toJSONString(saveParam.getMedianRule()))
|
||
|
|
.indexValue(max + 1)
|
||
|
|
.statReportId(saveParam.getStatReportId())
|
||
|
|
.unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getItem() : saveParam.getUnitType())
|
||
|
|
.creator(employeeId)
|
||
|
|
.updateTime(LocalDateTime.now())
|
||
|
|
.tenantKey(tenantKey)
|
||
|
|
.build();
|
||
|
|
salaryStatisticsItemMapper.insert(subTableItemPO);
|
||
|
|
|
||
|
|
// 记录操作日志
|
||
|
|
LoggerContext<SubTablePO> loggerContext = new LoggerContext<>();
|
||
|
|
loggerContext.setTargetId(String.valueOf(subTableItemPO.getId()));
|
||
|
|
loggerContext.setTargetName(subTableItemPO.getItemName());
|
||
|
|
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
|
||
|
|
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目"));
|
||
|
|
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152643, "新增统计项目"));
|
||
|
|
salaryStatReportLoggerTemplate.write(loggerContext);
|
||
|
|
// 更新
|
||
|
|
} else {
|
||
|
|
SalaryStatisticsItemPO itemPO = this.getById(saveParam.getId(), employeeId);
|
||
|
|
SalaryAssert.notNull(itemPO, SalaryI18nUtil.getI18nLabel(152591, "统计项目不存在"));
|
||
|
|
Optional.ofNullable(saveParam.getItemName()).ifPresent(itemPO::setItemName);
|
||
|
|
|
||
|
|
if (Objects.nonNull(saveParam.getUnitType())) {
|
||
|
|
itemPO.setUnitType(saveParam.getUnitType());
|
||
|
|
} else {
|
||
|
|
itemPO.setItemValue(Joiner.on(",").join(saveParam.getItemValue()));
|
||
|
|
itemPO.setCountRule(Objects.nonNull(saveParam.getCountRule()) ? JSON.toJSONString(saveParam.getCountRule()) : "");
|
||
|
|
itemPO.setSumRule(Objects.nonNull(saveParam.getSumRule()) ? JSON.toJSONString(saveParam.getSumRule()) : "");
|
||
|
|
itemPO.setAvgRule(Objects.nonNull(saveParam.getAvgRule()) ? JSON.toJSONString(saveParam.getAvgRule()) : "");
|
||
|
|
itemPO.setMaxRule(Objects.nonNull(saveParam.getMaxRule()) ? JSON.toJSONString(saveParam.getMaxRule()) : "");
|
||
|
|
itemPO.setMinRule(Objects.nonNull(saveParam.getMinRule()) ? JSON.toJSONString(saveParam.getMinRule()) : "");
|
||
|
|
itemPO.setMedianRule(Objects.nonNull(saveParam.getMedianRule()) ? JSON.toJSONString(saveParam.getMedianRule()) : "");
|
||
|
|
}
|
||
|
|
|
||
|
|
salaryStatisticsItemMapper.updateById(itemPO);
|
||
|
|
|
||
|
|
// 记录操作日志
|
||
|
|
LoggerContext<SubTablePO> loggerContext = new LoggerContext<>();
|
||
|
|
loggerContext.setTargetId(String.valueOf(itemPO.getId()));
|
||
|
|
loggerContext.setTargetName(itemPO.getItemName());
|
||
|
|
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
|
||
|
|
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目"));
|
||
|
|
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(152669, "更新统计项目"));
|
||
|
|
salaryStatReportLoggerTemplate.write(loggerContext);
|
||
|
|
}
|
||
|
|
return StringUtils.EMPTY;
|
||
|
|
}
|
||
|
|
}
|