package com.ruoyi.system.service.impl; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Sets; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.dto.TIntegralSettlementDTO; import com.ruoyi.system.export.IntegralSettlementImport; import com.ruoyi.system.model.TAppUser; import com.ruoyi.system.model.TIntegralSettlement; import com.ruoyi.system.mapper.TIntegralSettlementMapper; import com.ruoyi.system.query.TIntegralSettlementDetailQuery; import com.ruoyi.system.query.TIntegralSettlementQuery; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.TAppUserService; import com.ruoyi.system.service.TIntegralSettlementService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.vo.TIntegralSettlementDetailVO; import com.ruoyi.system.vo.TIntegralSettlementVO; import lombok.Cleanup; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** *

* 积分结算记录 服务实现类 *

* * @author xiaochen * @since 2025-12-08 */ @Slf4j @Service @RequiredArgsConstructor(onConstructor_ = @Lazy) public class TIntegralSettlementServiceImpl extends ServiceImpl implements TIntegralSettlementService { private final TAppUserService appUserService; private final ISysUserService sysUserService; @Override public Page getSettlementPageList(TIntegralSettlementQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); page.setRecords(baseMapper.selectSettlementPageList(page, query)); return page; } @Override public void importData(MultipartFile file, TIntegralSettlementDTO dto) { try { ImportParams importParams = new ImportParams(); importParams.setTitleRows(0); importParams.setHeadRows(1); @Cleanup InputStream inputStream = file.getInputStream(); List list = ExcelImportUtil.importExcel(inputStream, IntegralSettlementImport.class, importParams); // 保存主表 Map allAppUserIdMap = getAllAppUserIdMap(list); List saveList = list.stream().map(item -> { TIntegralSettlement model = new TIntegralSettlement(); model.setAppUserId(allAppUserIdMap.get(item.getCode())); model.setTotalSettlementIntegral(item.getTotalSettlementIntegral()); model.setRemark(item.getRemark()); return model; }).collect(Collectors.toList()); saveBatch(saveList); } catch (Exception e) { log.error("导入积分结算异常", e); throw new ServiceException("导入积分结算异常"); } } private Map getAllAppUserIdMap(List list) { Set codeList = list.stream().map(IntegralSettlementImport::getCode).collect(Collectors.toSet()); if (CollUtil.isNotEmpty(codeList)) { List appUserList = appUserService.lambdaQuery().in(TAppUser::getCode, codeList) .ne(TAppUser::getStatus, 3).list(); Set existCodeList = appUserList.stream().map(TAppUser::getCode).collect(Collectors.toSet()); Sets.SetView difference = Sets.difference(codeList, existCodeList); if (CollUtil.isNotEmpty(difference)) { throw new ServiceException("推荐码不存在或已停用:" + String.join(",", difference)); } Map appUserIdMap = appUserList.stream().collect(Collectors.toMap(TAppUser::getCode, TAppUser::getId)); return appUserIdMap; } return Collections.emptyMap(); } @Override public TIntegralSettlementVO getDetail(Integer id) { TIntegralSettlement integralSettlement = this.getById(id); TIntegralSettlementVO tIntegralSettlementVO = BeanUtil.copyProperties(integralSettlement, TIntegralSettlementVO.class); if (Objects.nonNull(integralSettlement)) { List list = this.lambdaQuery().eq(TIntegralSettlement::getSettlementInterval, integralSettlement.getSettlementInterval()).list(); BigDecimal total = list.stream().map(TIntegralSettlement::getTotalSettlementIntegral).reduce(BigDecimal.ZERO, BigDecimal::add); tIntegralSettlementVO.setTotalSettlementIntegral(total); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(integralSettlement.getCreateUserId())); tIntegralSettlementVO.setCreateUserName(Objects.nonNull(sysUser) ? sysUser.getNickName() : ""); } return tIntegralSettlementVO; } @Override public Page getSettlementDetailPageList(TIntegralSettlementDetailQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); page.setRecords(baseMapper.getSettlementDetailPageList(page, query)); return page; } }