package com.dsh.account.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.account.entity.TAppUser; import com.dsh.account.entity.UserIntegral; import com.dsh.account.entity.UserIntegralChanges; import com.dsh.account.feignclient.activity.MerChandiseClient; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.mapper.UserIntegralChangesMapper; import com.dsh.account.model.IntegralListQuery; import com.dsh.account.model.SaveUserIntegralChangesVo; import com.dsh.account.model.vo.userBenefitDetail.ExchangeDetailsResponse; import com.dsh.account.model.vo.userBenefitDetail.ExchangeDetailsVo; import com.dsh.account.model.vo.userBenefitDetail.IntegralsData; import com.dsh.account.model.vo.userBenefitDetail.PointDetailsVo; import com.dsh.account.service.UserIntegralChangesService; import com.dsh.account.util.DateTimeHelper; import com.dsh.account.util.ToolUtil; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 用户积分变动记录 服务实现类 *

* * @author jqs * @since 2023-07-10 */ @Service public class UserIntegralChangesServiceImpl extends ServiceImpl implements UserIntegralChangesService { @Resource private TAppUserMapper tauMapper; @Resource private MerChandiseClient mcClient; @Override public List queryUserPointsDetails(String yearMonth, Integer recordId, Integer userIdFormRedis) { List details = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm"); Date monthStart = null; Date monthEnd = null; if (StringUtils.hasText(yearMonth)) { monthStart = DateTimeHelper.getCurrentIdetMouthStart(yearMonth); monthEnd = DateTimeHelper.getCurrentIdeaMouthEnd(yearMonth); } else { monthStart = DateTimeHelper.getCurrentMouthStart(); monthEnd = DateTimeHelper.getCurrentMouthEnd(); } List userIntegralChanges = this.baseMapper.selectList(new QueryWrapper() .eq("appUserId", userIdFormRedis) .between("insertTime", monthStart, monthEnd) .orderByDesc("insertTime")); if (userIntegralChanges.size() > 0) { for (UserIntegralChanges userIntegralChange : userIntegralChanges) { IntegralsData detail = new IntegralsData(); switch (userIntegralChange.getType()) { case 1: detail.setConsumeAmount("+" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("赠送积分"); detail.setDetailsType(2); break; case 2: detail.setConsumeAmount("" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("兑换商品"); detail.setDetailsType(1); break; case 3: detail.setConsumeAmount("+" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("完成课后练习"); detail.setDetailsType(2); break; case 4: detail.setConsumeAmount("+" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeTime(simpleDateFormat.format(userIntegralChange.getInsertTime())); detail.setConsumeName("观看教学视频"); detail.setDetailsType(2); break; case 5: detail.setConsumeAmount("" + (userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("智慧球场开始游戏"); detail.setDetailsType(1); break; default: break; } detail.setConsumeTime(simpleDateFormat.format(userIntegralChange.getInsertTime())); details.add(detail); } if (null != recordId) { details = details.stream() .filter(obj -> obj instanceof IntegralsData) .filter(obj -> !Objects.equals(obj.getDetailsType(), recordId)) .collect(Collectors.toList()); } } return details; } /** * 保存用户积分变动 * * @param vo * @throws Exception */ @Override public void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) throws Exception { TAppUser appUser = tauMapper.selectById(vo.getAppUserId()); UserIntegralChanges userIntegralChanges = new UserIntegralChanges(); userIntegralChanges.setAppUserId(vo.getAppUserId()); userIntegralChanges.setOldIntegral(appUser.getIntegral()); userIntegralChanges.setType(vo.getType()); appUser.setIntegral(appUser.getIntegral() + vo.getIntegral()); tauMapper.updateById(appUser); userIntegralChanges.setNewIntegral(appUser.getIntegral()); userIntegralChanges.setInsertTime(new Date()); userIntegralChanges.setCategory(1); userIntegralChanges.setRemark(vo.getRemark()); this.save(userIntegralChanges); } @Override public List queryExchangeGoodsdetails(Integer userIdFormRedis, Integer useType, Integer goodType) { List detailsResponses = new ArrayList<>(); ExchangeDetailsVo integralExchangeDetails = mcClient.getIntegralExchangeDetails(userIdFormRedis); if (ToolUtil.isNotEmpty(integralExchangeDetails.getDetailsResponses())) { detailsResponses = integralExchangeDetails.getDetailsResponses(); if (ToolUtil.isNotEmpty(useType)) { detailsResponses = integralExchangeDetails.getDetailsResponses().stream() .filter(response -> Objects.equals(response.getUseStatus(), useType)) .collect(Collectors.toList()); } if (ToolUtil.isNotEmpty(goodType)) { detailsResponses = integralExchangeDetails.getDetailsResponses().stream() .filter(response -> Objects.equals(response.getGoodType(), goodType)) .collect(Collectors.toList()); } } return detailsResponses; } @Override public PointDetailsVo queryRedemptionDetails(Long detailsId) { PointDetailsVo specificsOfGoods = mcClient.getSpecificsOfGoods(detailsId); return specificsOfGoods; } @Override public Page listAll(Page userIntegralPage, IntegralListQuery integralListQuery) { String sTime = null; String eTime = null; if (ToolUtil.isNotEmpty(integralListQuery.getTime())) { sTime = integralListQuery.getTime().split(" - ")[0] + " 00:00:00"; eTime = integralListQuery.getTime().split(" - ")[1] + " 23:59:59"; } Page userIntegrals = this.baseMapper.listAll(userIntegralPage, integralListQuery, sTime, eTime); for (UserIntegral userIntegral : userIntegrals.getRecords()) { if (userIntegral.getCategory() == 1) { userIntegral.setIntegral(userIntegral.getNewIntegral() - userIntegral.getOldIntegral()); } else { userIntegral.setIntegral(userIntegral.getOldIntegral() - userIntegral.getNewIntegral()); } } return userIntegrals; } @Override public List queryExchangeGoodsdetails1(Integer userIdFormRedis, Integer useType, Integer goodType, Integer page, Integer size) { List detailsResponses = new ArrayList<>(); ExchangeDetailsVo integralExchangeDetails = mcClient.getIntegralExchangeDetails(userIdFormRedis); if (ToolUtil.isNotEmpty(integralExchangeDetails.getDetailsResponses())) { detailsResponses = integralExchangeDetails.getDetailsResponses(); if (ToolUtil.isNotEmpty(useType)) { detailsResponses = detailsResponses.stream() .filter(response -> Objects.equals(response.getUseStatus(), useType)) .collect(Collectors.toList()); } if (ToolUtil.isNotEmpty(goodType)) { detailsResponses = detailsResponses.stream() .filter(response -> Objects.equals(response.getGoodType(), goodType)) .collect(Collectors.toList()); } } int totalItems = detailsResponses.size(); int startIndex = (page - 1) * size; int endIndex = Math.min(startIndex + size, totalItems); if (startIndex <= endIndex) { detailsResponses = detailsResponses.subList(startIndex, endIndex); } else { detailsResponses.clear(); } return detailsResponses; } }