liujie
2026-01-04 00c70fe8a833450fa8bc2bea7357e4e23d84f2f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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.common.utils.SecurityUtils;
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;
 
/**
 * <p>
 * 积分结算记录 服务实现类
 * </p>
 *
 * @author xiaochen
 * @since 2025-12-08
 */
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class TIntegralSettlementServiceImpl extends ServiceImpl<TIntegralSettlementMapper, TIntegralSettlement> implements TIntegralSettlementService {
    private final TAppUserService appUserService;
    private final ISysUserService sysUserService;
 
    @Override
    public Page<TIntegralSettlementVO> getSettlementPageList(TIntegralSettlementQuery query) {
        Page<TIntegralSettlementVO> 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<IntegralSettlementImport> list = ExcelImportUtil.importExcel(inputStream, IntegralSettlementImport.class, importParams);
            // 保存主表
            Map<String, Integer> allAppUserIdMap = getAllAppUserIdMap(list);
            List<TIntegralSettlement> saveList = list.stream().map(item -> {
                TIntegralSettlement model = new TIntegralSettlement();
                model.setSettlementInterval(dto.getSettlementInterval());
                model.setSettlementStartTime(dto.getSettlementStartTime());
                model.setSettlementEndTime(dto.getSettlementEndTime());
                model.setAppUserId(allAppUserIdMap.get(item.getCode()));
                model.setTotalSettlementIntegral(item.getTotalSettlementIntegral());
                model.setCreateUserId(SecurityUtils.getUserId().intValue());
                model.setRemark(item.getRemark());
                return model;
            }).collect(Collectors.toList());
            saveBatch(saveList);
        } catch (Exception e) {
            log.error("导入积分结算异常", e);
            throw new ServiceException("导入积分结算异常");
        }
    }
 
    private Map<String, Integer> getAllAppUserIdMap(List<IntegralSettlementImport> list) {
        Set<String> codeList = list.stream().map(IntegralSettlementImport::getCode).collect(Collectors.toSet());
        if (CollUtil.isNotEmpty(codeList)) {
            List<TAppUser> appUserList = appUserService.lambdaQuery().in(TAppUser::getCode, codeList)
                    .ne(TAppUser::getStatus, 3).list();
            Set<String> existCodeList = appUserList.stream().map(TAppUser::getCode).collect(Collectors.toSet());
            Sets.SetView<String> difference = Sets.difference(codeList, existCodeList);
            if (CollUtil.isNotEmpty(difference)) {
                throw new ServiceException("推荐码不存在或已停用:" + String.join(",", difference));
            }
            Map<String, Integer> 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<TIntegralSettlement> list = this.lambdaQuery().eq(TIntegralSettlement::getSettlementInterval, integralSettlement.getSettlementInterval()).list();
            Integer total = list.stream().mapToInt(TIntegralSettlement::getTotalSettlementIntegral).sum();
            tIntegralSettlementVO.setTotalSettlementIntegral(total);
            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(integralSettlement.getCreateUserId()));
            tIntegralSettlementVO.setCreateUserName(Objects.nonNull(sysUser) ? sysUser.getNickName() : "");
        }
        return tIntegralSettlementVO;
    }
 
    @Override
    public Page<TIntegralSettlementDetailVO> getSettlementDetailPageList(TIntegralSettlementDetailQuery query) {
        TIntegralSettlement integralSettlement = getById(query.getId());
        if (Objects.isNull(integralSettlement)) {
            throw new ServiceException("积分结算记录不存在");
        }
        query.setSettlementInterval(integralSettlement.getSettlementInterval());
        Page<TIntegralSettlementDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
        page.setRecords(baseMapper.getSettlementDetailPageList(page, query));
        return page;
    }
}