You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
null/ExchangePointProductsServic...

251 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.rabbiter.market.service.sale_management.exchange_point_products.impl;
import com.rabbiter.market.common.redis.service.RedisTemplateService;
import com.rabbiter.market.domain.goods_management.goods.Goods;
import com.rabbiter.market.domain.goods_management.point_products.PointProducts;
import com.rabbiter.market.domain.member_management.member.Member;
import com.rabbiter.market.domain.personnel_management.employee.Employee;
import com.rabbiter.market.domain.sale_management.exchange_point_products.ExchangePointProducts;
import com.rabbiter.market.mapper.sale_management.exchange_point_products.ExchangePointProductsMapper;
import com.rabbiter.market.qo.exchange_point_products_records.QueryExchangePointProductsRecords;
import com.rabbiter.market.service.goods_management.goods.IGoodsService;
import com.rabbiter.market.service.goods_management.point_products.IPointProductsService;
import com.rabbiter.market.service.member_management.member.IMemberService;
import com.rabbiter.market.service.sale_management.exchange_point_products.IExchangePointProductsService;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.*;
@Service
public class ExchangePointProductsServiceImpl extends ServiceImpl<ExchangePointProductsMapper, ExchangePointProducts> implements IExchangePointProductsService {
// 依赖注入...
/**
* 根据会员ID查询可兑换商品选项
* @param memberId 会员ID可为空
* @return 包含商品ID和名称的Map列表
* 逻辑说明:
* - 当memberId为空时返回所有需要积分的商品
* - 当memberId存在时只返回会员当前积分可兑换的商品
*/
@Autowired
private IMemberService memberService;
@Autowired
private IPointProductsService pointProductsService;
@Autowired
private RedisTemplateService redisTemplateService;
@Autowired
private IGoodsService goodsService;
@Override
public List<Map<String, Object>> queryPointProductBymemberId(Long memberId) {
/**
* 通过商品ID获取积分商品详情
* @param goodsId 商品ID
* @return 积分商品实体
*/
Member member = memberService.getById(memberId);
QueryWrapper<PointProducts> pointProductsQueryWrapper = new QueryWrapper<PointProducts>();
if (memberId == null) {
pointProductsQueryWrapper.gt("integral", 0L);
} else {
pointProductsQueryWrapper.le("integral", member.getIntegral());
}
List<PointProducts> list = pointProductsService.list(pointProductsQueryWrapper);
List<Map<String, Object>> mapArrayList = new ArrayList<>();
for (PointProducts pointProducts : list) {
Map<String, Object> map = new HashMap<>();
map.put("id", pointProducts.getGoodsId());
map.put("name", pointProducts.getGoodsName());
mapArrayList.add(map);
}
return mapArrayList;
}
@Override
public PointProducts queryPointProductByGoodsId(Long goodsId) {
/**
* 保存积分兑换记录
* @param exchangePointProducts 兑换记录实体
* @param token 用户令牌
* 核心逻辑:
* 1. 生成唯一兑换单号
* 2. 设置操作人信息从Redis获取
* 3. 更新会员积分
* 4. 保存兑换记录
*/
PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper<PointProducts>().eq(goodsId != null, "goods_id", goodsId));
return pointProducts;
}
@Override
public void saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, String token) {
/**
* 查询有兑换记录的会员手机号选项
* @return 包含会员ID和手机号的Map列表
* 注意:仅查询状态正常的兑换记录
*/
Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class);
exchangePointProducts.setCn(IdWorker.getIdStr());//鐢熸垚璁㈠崟鍙<E5B49F>
exchangePointProducts.setUpdateby(employee.getNickName());
exchangePointProducts.setUpdateId(employee.getId());
exchangePointProducts.setUpdateTime(new Date());
exchangePointProducts.setState(ExchangePointProducts.STATE_NORMAL);
/*淇敼浼氬憳鐨勭Н<D09D>*/
Member member = memberService.getById(exchangePointProducts.getMemberId());
member.setIntegral(member.getIntegral() - exchangePointProducts.getIntegral());
memberService.updateById(member);
super.save(exchangePointProducts);
}
@Override
public List<Map<String, Object>> queryOptionsMemberPhone() {
/**
* 逻辑删除兑换记录(标记删除)
* @param cn 兑换单号
*/
QueryWrapper<ExchangePointProducts> wrapper = new QueryWrapper<ExchangePointProducts>()
.select("member_id")
.eq("state", ExchangePointProducts.STATE_NORMAL)
.groupBy("member_id");
List<ExchangePointProducts> list = super.list(wrapper);
List<Long> memberIds = new ArrayList<>();
for (ExchangePointProducts exchangePointProducts : list) {
memberIds.add(exchangePointProducts.getMemberId());
}
if (memberIds==null || memberIds.size()<=0){
return null;
}
List<Member> members = memberService.listByIds(memberIds);
List<Map<String, Object>> vos = new ArrayList<>();
for (Member member : members) {
Map<String, Object> map = new HashMap<>();
map.put("id", member.getId());
map.put("name", member.getPhone());
vos.add(map);
}
return vos;
}
@Override
public void delExchangePointProducts(String cn) {
/**
* 分页查询兑换记录
* @param qo 查询条件对象
* @return 分页结果(包含关联的会员手机号和商品信息)
* 功能特点:
* - 支持时间范围过滤
* - 支持会员ID过滤
* - 支持单号模糊查询
* - 自动补充商品封面和名称
*/
UpdateWrapper<ExchangePointProducts> wrapper = new UpdateWrapper<ExchangePointProducts>()
.set("state", ExchangePointProducts.STATE_DEL)
.eq("cn", cn);
super.update(wrapper);
}
@Override
public Page<ExchangePointProducts> queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) {
/**
* 查询所有可兑换商品选项
* @return 包含商品ID和名称的Map列表
*/
Page<ExchangePointProducts> page = new Page<>(qo.getCurrentPage(), qo.getPageSize());
QueryWrapper<ExchangePointProducts> queryWrapper = new QueryWrapper<ExchangePointProducts>()
.eq("state", ExchangePointProducts.STATE_NORMAL)
.eq(qo.getMemberId() != null, "member_id", qo.getMemberId())
.ge(StringUtils.hasText(qo.getStartTime()), "update_time", qo.getStartTime())
.le(StringUtils.hasText(qo.getEndTime()), "update_time", qo.getEndTime())
.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn());
super.page(page, queryWrapper);
for (ExchangePointProducts record : page.getRecords()) {
Member member = memberService.getById(record.getMemberId());
record.setMemberPhone(member.getPhone());
Goods goods = goodsService.getById(record.getGoodsId());
record.setGoodsCoverUrl(goods.getCoverUrl());
record.setGoodsName(goods.getName());
}
return page;
}
@Override
public List<Map<String, Object>> queryOptionsPointProducts() { /**
* 查询所有正常状态会员选项
* @return 包含会员ID和手机号的Map列表
*/
QueryWrapper<PointProducts> wrapper = new QueryWrapper<PointProducts>()
.eq("state", PointProducts.STATE_NORMAL);
List<PointProducts> list = pointProductsService.list(wrapper);
List<Map<String, Object>> vos = new ArrayList<>();
for (PointProducts pointProducts : list) {
Map<String, Object> map = new HashMap<>();
map.put("id", pointProducts.getGoodsId());
map.put("name", pointProducts.getGoodsName());
vos.add(map);
}
return vos;
}
@Override
public List<Map<String, Object>> queryOptionsMember() {
/**
* 根据商品ID查询有足够积分兑换的会员
* @param goodsId 商品ID可为空
* @return 包含会员ID和手机号的Map列表
* 逻辑说明:
* - 当商品ID存在时查询积分足够的会员
* - 当商品ID为空时返回所有有积分的会员
*/
List<Map<String, Object>> vos = new ArrayList<>();
QueryWrapper<Member> wrapper = new QueryWrapper<Member>()
.groupBy("id")
.eq("state", Member.STATE_NORMAL);
List<Member> list = memberService.list(wrapper);
for (Member member : list) {
Map<String, Object> map = new HashMap<>();
map.put("id", member.getId());
map.put("name", member.getPhone());
vos.add(map);
}
return vos;
}
@Override
public List<Map<String, Object>> queryMemberByGoodsId(Long goodsId) {
List<Member> members = new ArrayList<>();
QueryWrapper<Member> memberQueryWrapper = new QueryWrapper<Member>();
memberQueryWrapper.eq("state", Member.STATE_NORMAL);
if (goodsId != null) {
PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper<PointProducts>()
.eq("goods_id", goodsId)
.eq("state", PointProducts.STATE_NORMAL));
memberQueryWrapper.ge("integral", pointProducts.getIntegral());
} else {
memberQueryWrapper.gt("integral", 0);
}
members = memberService.list(memberQueryWrapper);
List<Map<String, Object>> vos = new ArrayList<>();
for (Member member : members) {
Map<String, Object> map = new HashMap<>();
map.put("id", member.getId());
map.put("name", member.getPhone());
vos.add(map);
}
return vos;
}
}