weaver-hrm-salary/src/com/engine/salary/report/service/impl/SalaryStatisticsItemService...

208 lines
10 KiB
Java
Raw Normal View History

2023-04-10 12:43:48 +08:00
package com.engine.salary.report.service.impl;
import com.engine.core.impl.Service;
2024-02-21 18:19:02 +08:00
import com.engine.salary.config.SalaryElogConfig;
2023-04-11 09:22:09 +08:00
import com.engine.salary.constant.SalaryDefaultTenantConstant;
2024-03-12 14:34:44 +08:00
import com.engine.hrmelog.entity.dto.LoggerContext;
2024-02-21 18:19:02 +08:00
import com.engine.salary.enums.OperateTypeEnum;
2023-04-11 09:22:09 +08:00
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.report.SalaryStatisticsItemMapper;
import com.engine.salary.report.entity.param.SalaryStatisticsItemSaveParam;
2023-04-10 12:43:48 +08:00
import com.engine.salary.report.entity.po.SalaryStatisticsItemPO;
2023-04-11 09:22:09 +08:00
import com.engine.salary.report.enums.UnitTypeEnum;
2023-04-10 12:43:48 +08:00
import com.engine.salary.report.service.SalaryStatisticsItemService;
2023-04-11 09:22:09 +08:00
import com.engine.salary.util.SalaryAssert;
2023-05-09 17:37:05 +08:00
import com.engine.salary.util.SalaryEntityUtil;
2023-04-10 12:43:48 +08:00
import com.engine.salary.util.SalaryI18nUtil;
2024-01-25 11:38:38 +08:00
import com.engine.salary.util.db.IdGenerator;
2024-02-21 18:19:02 +08:00
import com.engine.salary.util.db.MapperProxyFactory;
2023-04-10 12:43:48 +08:00
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
2024-02-21 18:19:02 +08:00
import org.springframework.beans.BeanUtils;
2023-04-10 12:43:48 +08:00
import java.util.*;
import java.util.stream.Collectors;
/**
2023-05-05 14:08:37 +08:00
* 薪酬报表自定义统计项目
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
2023-04-10 12:43:48 +08:00
public class SalaryStatisticsItemServiceImpl extends Service implements SalaryStatisticsItemService {
2023-04-11 09:22:09 +08:00
2023-04-14 15:18:18 +08:00
private SalaryStatisticsItemMapper getSalaryStatisticsItemMapper() {
return MapperProxyFactory.getProxy(SalaryStatisticsItemMapper.class);
}
2023-04-10 12:43:48 +08:00
@Override
public SalaryStatisticsItemPO getById(Long id) {
2023-04-11 09:22:09 +08:00
if (id == null) {
return null;
}
2023-04-14 15:18:18 +08:00
return getSalaryStatisticsItemMapper().getById(id);
2023-04-10 12:43:48 +08:00
}
@Override
public List<SalaryStatisticsItemPO> listByStatisticsReportId(Long statisticsReportId) {
2023-04-11 09:22:09 +08:00
if (statisticsReportId == null) {
2023-06-27 16:18:42 +08:00
return new ArrayList<>();
2023-04-11 09:22:09 +08:00
}
2023-04-14 15:18:18 +08:00
return getSalaryStatisticsItemMapper().listSome(SalaryStatisticsItemPO.builder().statReportId(statisticsReportId).build());
2023-04-10 12:43:48 +08:00
}
2023-04-11 09:22:09 +08:00
public List<SalaryStatisticsItemPO> listByIds(Collection<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return new ArrayList<>();
}
2023-04-14 15:18:18 +08:00
return getSalaryStatisticsItemMapper().listSome(SalaryStatisticsItemPO.builder().ids(ids).build());
2023-04-10 12:43:48 +08:00
}
@Override
public String delete(Collection<Long> ids) {
SalaryAssert.notEmpty(ids, SalaryI18nUtil.getI18nLabel(152638, "id不可为空"));
List<SalaryStatisticsItemPO> list = this.listByIds(ids);
if (CollectionUtils.isNotEmpty(list)) {
2023-04-14 15:18:18 +08:00
getSalaryStatisticsItemMapper().deleteByIds(ids);
2024-02-21 18:19:02 +08:00
list.forEach(po -> {
LoggerContext<SalaryStatisticsItemPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getItemName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除统计项目"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除统计项目"));
loggerContext.setOldValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
});
2023-04-10 12:43:48 +08:00
}
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, "统计项名称必填"));
}
2023-04-11 09:22:09 +08:00
List<SalaryStatisticsItemPO> itemPOList = listByStatisticsReportId(saveParam.getStatReportId());
2023-04-10 12:43:48 +08:00
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);
2023-04-11 09:22:09 +08:00
Date now = new Date();
2023-04-10 12:43:48 +08:00
SalaryStatisticsItemPO subTableItemPO = SalaryStatisticsItemPO.builder()
.id(IdGenerator.generate())
2023-04-11 09:22:09 +08:00
.createTime(now)
2023-04-10 12:43:48 +08:00
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
.itemName(saveParam.getItemName())
2023-04-11 09:22:09 +08:00
.itemValue(StringUtils.join(saveParam.getItemValue(), ","))
2023-05-09 17:37:05 +08:00
.countRule(SalaryEntityUtil.toJSONString(saveParam.getCountRule()))
.sumRule(SalaryEntityUtil.toJSONString(saveParam.getSumRule()))
.avgRule(SalaryEntityUtil.toJSONString(saveParam.getAvgRule()))
.maxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule()))
.minRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule()))
.medianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule()))
.lastRule(SalaryEntityUtil.toJSONString(saveParam.getLastRule()))
.oldRule(SalaryEntityUtil.toJSONString(saveParam.getOldRule()))
.frequentRule(SalaryEntityUtil.toJSONString(saveParam.getFrequentRule()))
.tileRule(SalaryEntityUtil.toJSONString(saveParam.getTileRule()))
2023-04-10 12:43:48 +08:00
.indexValue(max + 1)
.statReportId(saveParam.getStatReportId())
2023-04-23 10:14:32 +08:00
.unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : saveParam.getUnitType())
.creator((long) user.getUID())
2023-04-11 09:22:09 +08:00
.updateTime(now)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
2023-04-10 12:43:48 +08:00
.build();
2023-04-14 15:18:18 +08:00
getSalaryStatisticsItemMapper().insertIgnoreNull(subTableItemPO);
2023-04-10 12:43:48 +08:00
// 记录操作日志
2024-02-21 18:19:02 +08:00
LoggerContext<SalaryStatisticsItemPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(subTableItemPO.getId()));
loggerContext.setTargetName(subTableItemPO.getItemName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增统计项目"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增统计项目"));
loggerContext.setNewValues(subTableItemPO);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
2023-04-11 09:22:09 +08:00
// 更新
2023-04-10 12:43:48 +08:00
} else {
2023-04-11 09:22:09 +08:00
SalaryStatisticsItemPO itemPO = this.getById(saveParam.getId());
2023-04-10 12:43:48 +08:00
SalaryAssert.notNull(itemPO, SalaryI18nUtil.getI18nLabel(152591, "统计项目不存在"));
Optional.ofNullable(saveParam.getItemName()).ifPresent(itemPO::setItemName);
2024-02-21 18:19:02 +08:00
SalaryStatisticsItemPO oldPO = new SalaryStatisticsItemPO();
BeanUtils.copyProperties(itemPO, oldPO);
2023-04-10 12:43:48 +08:00
if (Objects.nonNull(saveParam.getUnitType())) {
itemPO.setUnitType(saveParam.getUnitType());
} else {
2023-04-23 10:14:32 +08:00
itemPO.setItemValue(StringUtils.join(saveParam.getItemValue(), ","));
2023-05-09 17:37:05 +08:00
itemPO.setCountRule(SalaryEntityUtil.toJSONString(saveParam.getCountRule()));
itemPO.setSumRule(SalaryEntityUtil.toJSONString(saveParam.getSumRule()));
itemPO.setAvgRule(SalaryEntityUtil.toJSONString(saveParam.getAvgRule()));
itemPO.setMaxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule()));
itemPO.setMinRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule()));
itemPO.setMedianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule()));
2023-11-06 18:46:49 +08:00
itemPO.setLastRule(SalaryEntityUtil.toJSONString(saveParam.getLastRule()));
itemPO.setOldRule(SalaryEntityUtil.toJSONString(saveParam.getOldRule()));
itemPO.setFrequentRule(SalaryEntityUtil.toJSONString(saveParam.getFrequentRule()));
itemPO.setTileRule(SalaryEntityUtil.toJSONString(saveParam.getTileRule()));
2023-04-10 12:43:48 +08:00
}
2023-04-14 15:18:18 +08:00
getSalaryStatisticsItemMapper().updateIgnoreNull(itemPO);
2023-04-10 12:43:48 +08:00
// 记录操作日志
2024-02-21 18:19:02 +08:00
LoggerContext<SalaryStatisticsItemPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(itemPO.getId().toString());
loggerContext.setTargetName(itemPO.getItemName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增统计项目"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增统计项目"));
loggerContext.setOldValues(oldPO);
loggerContext.setNewValues(itemPO);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
2023-04-10 12:43:48 +08:00
}
return StringUtils.EMPTY;
}
2023-04-23 10:14:32 +08:00
@Override
public void saveOrUpdateBatch(List<SalaryStatisticsItemPO> salaryStatisticsItemList) {
salaryStatisticsItemList.forEach(po -> {
Long id = po.getId();
SalaryStatisticsItemPO item = getSalaryStatisticsItemMapper().getById(id);
if (item == null) {
2023-05-09 17:37:05 +08:00
getSalaryStatisticsItemMapper().insertIgnoreNull(po);
2023-04-23 10:14:32 +08:00
} else {
2023-05-09 17:37:05 +08:00
getSalaryStatisticsItemMapper().update(po);
2023-04-23 10:14:32 +08:00
}
});
}
2023-05-09 17:37:05 +08:00
@Override
public void deleteByReportIds(List<Long> reportIds) {
getSalaryStatisticsItemMapper().deleteByReportIds(reportIds);
}
2023-04-10 12:43:48 +08:00
}