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 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 listByIds(Collection 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 ids) { SalaryAssert.notEmpty(ids, SalaryI18nUtil.getI18nLabel(152638, "id不可为空")); List 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 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 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 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 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 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; } }