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 implements IExchangePointProductsService { // 渚濊禆娉ㄥ叆... /** * 鏍规嵁浼氬憳ID鏌ヨ鍙厬鎹㈠晢鍝侀�夐」 * @param memberId 浼氬憳ID锛堝彲涓虹┖锛� * @return 鍖呭惈鍟嗗搧ID鍜屽悕绉扮殑Map鍒楄〃 * 閫昏緫璇存槑锛� * - 褰搈emberId涓虹┖鏃讹紝杩斿洖鎵�鏈夐渶瑕佺Н鍒嗙殑鍟嗗搧 * - 褰搈emberId瀛樺湪鏃讹紝鍙繑鍥炰細鍛樺綋鍓嶇Н鍒嗗彲鍏戞崲鐨勫晢鍝� */ @Autowired private IMemberService memberService; @Autowired private IPointProductsService pointProductsService; @Autowired private RedisTemplateService redisTemplateService; @Autowired private IGoodsService goodsService; @Override public List> queryPointProductBymemberId(Long memberId) { /** * 閫氳繃鍟嗗搧ID鑾峰彇绉垎鍟嗗搧璇︽儏 * @param goodsId 鍟嗗搧ID * @return 绉垎鍟嗗搧瀹炰綋 */ Member member = memberService.getById(memberId); QueryWrapper pointProductsQueryWrapper = new QueryWrapper(); if (memberId == null) { pointProductsQueryWrapper.gt("integral", 0L); } else { pointProductsQueryWrapper.le("integral", member.getIntegral()); } List list = pointProductsService.list(pointProductsQueryWrapper); List> mapArrayList = new ArrayList<>(); for (PointProducts pointProducts : list) { Map 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. 璁剧疆鎿嶄綔浜轰俊鎭紙浠嶳edis鑾峰彇锛� * 3. 鏇存柊浼氬憳绉垎 * 4. 淇濆瓨鍏戞崲璁板綍 */ PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper().eq(goodsId != null, "goods_id", goodsId)); return pointProducts; } @Override public void saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, String token) { /** * 鏌ヨ鏈夊厬鎹㈣褰曠殑浼氬憳鎵嬫満鍙烽�夐」 * @return 鍖呭惈浼氬憳ID鍜屾墜鏈哄彿鐨凪ap鍒楄〃 * 娉ㄦ剰锛氫粎鏌ヨ鐘舵�佹甯哥殑鍏戞崲璁板綍 */ Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); exchangePointProducts.setCn(IdWorker.getIdStr()); exchangePointProducts.setUpdateby(employee.getNickName()); exchangePointProducts.setUpdateId(employee.getId()); exchangePointProducts.setUpdateTime(new Date()); exchangePointProducts.setState(ExchangePointProducts.STATE_NORMAL); Member member = memberService.getById(exchangePointProducts.getMemberId()); member.setIntegral(member.getIntegral() - exchangePointProducts.getIntegral()); memberService.updateById(member); super.save(exchangePointProducts); } @Override public List> queryOptionsMemberPhone() { /** * 閫昏緫鍒犻櫎鍏戞崲璁板綍锛堟爣璁板垹闄わ級 * @param cn 鍏戞崲鍗曞彿 */ QueryWrapper wrapper = new QueryWrapper() .select("member_id") .eq("state", ExchangePointProducts.STATE_NORMAL) .groupBy("member_id"); List list = super.list(wrapper); List memberIds = new ArrayList<>(); for (ExchangePointProducts exchangePointProducts : list) { memberIds.add(exchangePointProducts.getMemberId()); } if (memberIds==null || memberIds.size()<=0){ return null; } List members = memberService.listByIds(memberIds); List> vos = new ArrayList<>(); for (Member member : members) { Map 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 wrapper = new UpdateWrapper() .set("state", ExchangePointProducts.STATE_DEL) .eq("cn", cn); super.update(wrapper); } @Override public Page queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) { /** * 鏌ヨ鎵�鏈夊彲鍏戞崲鍟嗗搧閫夐」 * @return 鍖呭惈鍟嗗搧ID鍜屽悕绉扮殑Map鍒楄〃 */ Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); QueryWrapper queryWrapper = new QueryWrapper() .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> queryOptionsPointProducts() { /** * 鏌ヨ鎵�鏈夋甯哥姸鎬佷細鍛橀�夐」 * @return 鍖呭惈浼氬憳ID鍜屾墜鏈哄彿鐨凪ap鍒楄〃 */ QueryWrapper wrapper = new QueryWrapper() .eq("state", PointProducts.STATE_NORMAL); List list = pointProductsService.list(wrapper); List> vos = new ArrayList<>(); for (PointProducts pointProducts : list) { Map map = new HashMap<>(); map.put("id", pointProducts.getGoodsId()); map.put("name", pointProducts.getGoodsName()); vos.add(map); } return vos; } @Override public List> queryOptionsMember() { /** * 鏍规嵁鍟嗗搧ID鏌ヨ鏈夎冻澶熺Н鍒嗗厬鎹㈢殑浼氬憳 * @param goodsId 鍟嗗搧ID锛堝彲涓虹┖锛� * @return 鍖呭惈浼氬憳ID鍜屾墜鏈哄彿鐨凪ap鍒楄〃 * 閫昏緫璇存槑锛� * - 褰撳晢鍝両D瀛樺湪鏃讹紝鏌ヨ绉垎瓒冲鐨勪細鍛� * - 褰撳晢鍝両D涓虹┖鏃讹紝杩斿洖鎵�鏈夋湁绉垎鐨勪細鍛� */ List> vos = new ArrayList<>(); QueryWrapper wrapper = new QueryWrapper() .groupBy("id") .eq("state", Member.STATE_NORMAL); List list = memberService.list(wrapper); for (Member member : list) { Map map = new HashMap<>(); map.put("id", member.getId()); map.put("name", member.getPhone()); vos.add(map); } return vos; } @Override public List> queryMemberByGoodsId(Long goodsId) { List members = new ArrayList<>(); QueryWrapper memberQueryWrapper = new QueryWrapper(); memberQueryWrapper.eq("state", Member.STATE_NORMAL); if (goodsId != null) { PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper() .eq("goods_id", goodsId) .eq("state", PointProducts.STATE_NORMAL)); memberQueryWrapper.ge("integral", pointProducts.getIntegral()); } else { memberQueryWrapper.gt("integral", 0); } members = memberService.list(memberQueryWrapper); List> vos = new ArrayList<>(); for (Member member : members) { Map map = new HashMap<>(); map.put("id", member.getId()); map.put("name", member.getPhone()); vos.add(map); } return vos; } }