1
phpcjl
2024-12-16 c31c769b7c5864be9973d8dd7e11d9ff8e2ac3e9
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -2,6 +2,8 @@
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.UserPoint;
@@ -12,6 +14,7 @@
import com.ruoyi.account.service.UserPointService;
import com.ruoyi.account.service.VipSettingService;
import com.ruoyi.account.vo.UserPointDetailVO;
import com.ruoyi.account.vo.UserPointStatistics;
import com.ruoyi.account.vo.UserPointVO;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.PhoneNumberValidator;
@@ -22,6 +25,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -51,26 +55,26 @@
    private VipSettingService vipSettingService;
    @Resource
    private PointSettingService pointSettingService;
    @Resource
    private UserPointMapper userPointMapper;
    @Override
    public UserPointVO getUserPoint(Long userId) {
        AppUser appUser = appUserService.getById(userId);
        List<UserPoint> userPointList = this.baseMapper.findLatestUserPointByTypeForUser(userId);
        Map<Integer, Integer> userBalanceMap = userPointList.stream()
                .collect(Collectors.toMap(UserPoint::getType, UserPoint::getBalance));
        VipSetting vipSetting = vipSettingService.getVipSettingByUserId(userId);
        Integer lavePoint = appUser.getLavePoint();
        UserPointVO userPointVO = new UserPointVO();
        userPointVO.setTotalPoint(lavePoint);
//        userPointVO.setConsumePoint(lavePoint);
        userPointVO.setShopPoint(userBalanceMap.get(PointChangeType.CONSUME.getCode()));
        userPointVO.setSharePoint(userBalanceMap.get(PointChangeType.COMMISSION_RETURN.getCode()));
        userPointVO.setTotalPoint(appUser.getTotalPoint());
        userPointVO.setConsumePoint(appUser.getLavePoint());
        userPointVO.setShopPoint(appUser.getShopPoint());
        userPointVO.setSharePoint(appUser.getSharePoint());
        userPointVO.setPullNewPoint(userBalanceMap.get(PointChangeType.NEW_USER_REFERRAL.getCode()));
        userPointVO.setShopAchievementPoint(userBalanceMap.get(PointChangeType.STORE_PERFORMANCE.getCode()));
        userPointVO.setShopSharePoint(userBalanceMap.get(PointChangeType.STORE_COMMISSION_RETURN.getCode()));
        userPointVO.setGiftPoint(vipSetting.getVipGiftRole());
        userPointVO.setGiftPoint(vipSetting.getVipGiftRole() == 1 && vipSetting.getId() == 1 ? 1 : 0);
        return userPointVO;
    }
@@ -107,7 +111,7 @@
        if (vipSetting == null) {
            throw new ServiceException("VIP 设置未找到");
        }
        if (vipSetting.getVipGiftRole() == 0) {
        if (vipSetting.getId() == 0 && vipSetting.getVipGiftRole() == 0) {
            throw new ServiceException("转赠积分权限未开启");
        }
@@ -123,8 +127,9 @@
        }
        Integer buyPointOpen = pointSetting.getBuyPointOpen();
        List<UserPoint> userPointList = list(new LambdaQueryWrapper<UserPoint>()
                .eq(UserPoint::getAppUserId, userid));
        UserPoint userPoint = new UserPoint();
        userPoint.setAppUserId(userid);
        List<UserPoint> userPointList = userPointMapper.findLatestChangeByType(userPoint);
        Map<Integer, Integer> userBalanceMap = userPointList.stream()
                .collect(Collectors.toMap(UserPoint::getType, UserPoint::getBalance));
@@ -157,4 +162,43 @@
    private int getAdjustedPoint(Map<Integer, Integer> userBalanceMap, int pointTypeCode, boolean isOpen) {
        return isOpen ? 0 : Optional.ofNullable(userBalanceMap.get(pointTypeCode)).orElse(0);
    }
    @Override
    public UserPointStatistics getStatistics(UserPoint userPoint) {
        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
                .eq(AppUser::getPhone, userPoint.getPhone())
                .like(AppUser::getName, userPoint.getUserName()));
        List<Long> userIds = appUserList.stream().map(AppUser::getId).collect(Collectors.toList());
        list(new LambdaQueryWrapper<UserPoint>()
                .in(!CollectionUtils.isEmpty(userIds), UserPoint::getAppUserId, userIds)
                .eq(UserPoint::getType, userPoint.getType())
                .between(UserPoint::getCreateTime, userPoint.getStartTime(), userPoint.getEndTime()));
        return null;
    }
    @Override
    public IPage<UserPoint> getUserPointPage(Page<UserPoint> page, UserPoint userPoint) {
        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
                .eq(AppUser::getPhone, userPoint.getPhone())
                .like(AppUser::getName, userPoint.getUserName()));
        List<Long> userIds = appUserList.stream().map(AppUser::getId).collect(Collectors.toList());
        Page<UserPoint> userPointPage = page(page, new LambdaQueryWrapper<UserPoint>()
                .in(!CollectionUtils.isEmpty(userIds), UserPoint::getAppUserId, userIds)
                .eq(UserPoint::getType, userPoint.getType())
                .between(userPoint.getStartTime() !=null && userPoint.getEndTime() != null,
                        UserPoint::getCreateTime, userPoint.getStartTime(), userPoint.getEndTime())
                .orderByDesc(UserPoint::getCreateTime));
        userPointPage.getRecords().forEach(userPoint1 -> appUserList.stream()
                .filter(appUser -> appUser.getId().equals(userPoint1.getAppUserId()))
                .findFirst().ifPresent(appUser -> {
                    userPoint1.setUserName(appUser.getName());
                    userPoint1.setPhone(appUser.getPhone());
                }));
        return userPointPage;
    }
}