From 86f2368f146af23c9e16507f790752e79858a29f Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Thu, 22 Feb 2024 22:34:31 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 294 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 268 insertions(+), 26 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index 0722003..1940992 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -1,10 +1,7 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
-import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.*;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.properties.XcxProperties;
import cc.mrbird.febs.common.utils.*;
@@ -17,8 +14,12 @@
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
import cc.mrbird.febs.pay.service.IXcxPayService;
+import cc.mrbird.febs.vip.VipSettingUnAliveSettingBo;
+import cc.mrbird.febs.vip.entity.MallVipConfig;
+import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -29,6 +30,7 @@
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -43,6 +45,7 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
+import java.util.stream.Collectors;
/**
* @author wzy
@@ -74,6 +77,9 @@
private final CouponGoodsMapper couponGoodsMapper;
private final MallGoodsCouponMapper mallGoodsCouponMapper;
private final MallMemberCouponMapper mallMemberCouponMapper;
+ private final MallGoodsMapper mallGoodsMapper;
+
+ private final MallVipConfigMapper mallVipConfigMapper;
@Value("${spring.profiles.active}")
@@ -127,7 +133,6 @@
mallMember.setName(registerDto.getName());
mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
- mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
mallMember.setSex("男");
mallMember.setBindPhone(registerDto.getAccount());
@@ -231,6 +236,15 @@
@Override
public FebsResponse logout() {
Long id = LoginUserUtil.getLoginUser().getId();
+
+ String redisKey = AppContants.XCX_LOGIN_PREFIX + id;
+ String existToken = redisUtils.getString(redisKey);
+ if (StrUtil.isNotBlank(existToken)) {
+ Object o = redisUtils.get(existToken);
+ if (ObjectUtil.isNotEmpty(o)) {
+ redisUtils.del(existToken);
+ }
+ }
redisUtils.del(AppContants.XCX_LOGIN_PREFIX + id);
redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id);
return new FebsResponse().success().message("退出登录");
@@ -274,9 +288,13 @@
mallMemberVo.setChildCnt(CollUtil.isNotEmpty(mallMembers) ? mallMembers.size() : 0);
MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId());
+
+ MallVipConfig mallVipConfig = mallVipConfigMapper.selectVipConfigByCode(mallMember.getLevel());
+
+ mallMemberVo.setVipInfo(mallVipConfig);
mallMemberVo.setBalance(wallet.getBalance());
// mallMemberVo.setScore(wallet.getScore());
-// mallMemberVo.setPrizeScore(wallet.getPrizeScore());
+ mallMemberVo.setPrizeScore(wallet.getPrizeScore());
// mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id));
return new FebsResponse().success().data(mallMemberVo);
}
@@ -293,7 +311,7 @@
}
}
- List<MallShoppingCart> carts = mallShoppingCartMapper.selectCartGoodsList(id);
+ List<MallShoppingCart> carts = mallShoppingCartMapper.selectCartGoodsList(id, 1);
Map<String, Object> result = new HashMap<>();
result.put("order", orderCnt);
result.put("carts", carts.size());
@@ -366,6 +384,12 @@
Long id = LoginUserUtil.getLoginUser().getId();
moneyFlowDto.setMemberId(id);
IPage<MoneyFlowVo> pages = mallMoneyFlowMapper.selectApiMoneyFlowInPage(page, moneyFlowDto);
+
+ if (moneyFlowDto.getFlowType() == 3) {
+ pages.getRecords().forEach(item -> {
+ item.setDescription(ScoreFlowTypeEnum.getDescByValue(item.getType()));
+ });
+ }
return new FebsResponse().success().data(pages);
}
@@ -598,7 +622,6 @@
mallMember = new MallMember();
mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
- mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
mallMember.setOpenId(openId);
mallMember.setSessionKey(sessionKey);
@@ -692,7 +715,22 @@
if(StrUtil.isNotEmpty(avatarUrl)){
mallMember.setAvatar(avatarUrl);
}
-// mallMember.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
+
+ if (StrUtil.isNotBlank(apiXcxSaveInfoDto.getRealName())) {
+ mallMember.setRealName(apiXcxSaveInfoDto.getRealName());
+ }
+
+ if (apiXcxSaveInfoDto.getBirthday() != null) {
+ mallMember.setBirthday(apiXcxSaveInfoDto.getBirthday());
+ }
+
+ List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList();
+ if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(configs)) {
+ MallVipConfig mallVipConfig = configs.get(0);
+ mallMember.setLevel(mallVipConfig.getCode());
+ }
+
+ mallMember.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
this.baseMapper.updateById(mallMember);
return new FebsResponse().success();
}
@@ -712,7 +750,6 @@
mallMember.setPhone(phone);
mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
- mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
this.baseMapper.insert(mallMember);
String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId());
@@ -877,27 +914,78 @@
@Override
public FebsResponse getCoupon(GetCouponDto getCouponDto) {
Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ String couponUUID = IdUtil.simpleUUID();
+// String couponUUID = getCouponDto.getCouponUUID();
+// QueryWrapper<MallMemberCoupon> objectQueryWrapper = new QueryWrapper<>();
+// objectQueryWrapper.eq("coupon_uuid",couponUUID);
+// List<MallMemberCoupon> mallMemberCouponDone = mallMemberCouponMapper.selectList(objectQueryWrapper);
+// if(CollUtil.isNotEmpty(mallMemberCouponDone)){
+// return new FebsResponse().success();
+// }
//通过邀请人信息,获取能领取的优惠卷信息
MallMember mallMember = this.baseMapper.selectInfoByInviteId(getCouponDto.getInviteId());
- SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(mallMember.getId());
- if(ObjectUtil.isNotEmpty(salemanCoupon)){
- Long couponId = salemanCoupon.getCouponId();
- Long goodsId = getCouponDto.getGoodsId();
- //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
- List<CouponGoods> couponGoodsList = couponGoodsMapper.selectByGoodIdAndCouponId(goodsId,couponId);
- MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
- if(CollUtil.isNotEmpty(couponGoodsList)){
- MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
- mallMemberCoupon.setCouponId(couponId);
- mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
- mallMemberCoupon.setMemberId(memberId);
- mallMemberCoupon.setInviteId(mallMemberCoupon.getInviteId());
- mallMemberCoupon.setState(1);
- mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
- mallMemberCouponMapper.insert(mallMemberCoupon);
+ if(ObjectUtil.isNotEmpty(mallMember)){
+ SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(mallMember.getId());
+ if(ObjectUtil.isNotEmpty(salemanCoupon)){
+ Long couponId = salemanCoupon.getCouponId();
+ Long goodsId = getCouponDto.getGoodsId();
+ MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
+ //验证商品存不存在,且上没上架
+ if(ObjectUtil.isNotEmpty(mallGoods)
+ && MallGoods.ISSALE_STATUS_ENABLE == mallGoods.getIsSale()){
+// List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponId(memberId, goodsId, couponId,mallMember.getInviteId());
+// List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponIdWithOutInviteId(memberId, goodsId, couponId);
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponIdWithOutInviteId(memberId, goodsId);
+ if(CollUtil.isEmpty(mallMemberCoupons)){
+ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
+ List<CouponGoods> couponGoodsList = couponGoodsMapper.selectByGoodIdAndCouponId(goodsId,couponId);
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+ if(CollUtil.isNotEmpty(couponGoodsList)){
+ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+ mallMemberCoupon.setCouponId(couponId);
+ mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
+ mallMemberCoupon.setMemberId(memberId);
+ mallMemberCoupon.setGoodsId(goodsId);
+ mallMemberCoupon.setCouponUuid(couponUUID);
+ mallMemberCoupon.setInviteId(mallMember.getInviteId());
+ mallMemberCoupon.setState(1);
+ mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
+ mallMemberCouponMapper.insert(mallMemberCoupon);
+ }
+ }
+ }
}
}
+ return new FebsResponse().success();
+ }
+ @Override
+ public FebsResponse scanCoupon(GetCouponDto getCouponDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ String couponUUID = IdUtil.simpleUUID();
+ //通过邀请人信息,获取能领取的优惠卷信息
+ MallMember mallMember = this.baseMapper.selectInfoByInviteId(getCouponDto.getInviteId());
+ if(ObjectUtil.isNotEmpty(mallMember)){
+ SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(mallMember.getId());
+ if(ObjectUtil.isNotEmpty(salemanCoupon)){
+ Long couponId = salemanCoupon.getCouponId();
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(memberId, couponId);
+ if(CollUtil.isEmpty(mallMemberCoupons)){
+ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+ mallMemberCoupon.setCouponId(couponId);
+ mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
+ mallMemberCoupon.setMemberId(memberId);
+ mallMemberCoupon.setCouponUuid(couponUUID);
+ mallMemberCoupon.setInviteId(mallMember.getInviteId());
+ mallMemberCoupon.setState(1);
+ mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
+ mallMemberCouponMapper.insert(mallMemberCoupon);
+ }
+ }
+ }
return new FebsResponse().success();
}
@@ -906,12 +994,166 @@
Long memberId = LoginUserUtil.getLoginUser().getId();
IPage<MallMemberCouponVo> page = new Page<>(mallMemberCouponDto.getPageNum(), mallMemberCouponDto.getPageSize());
mallMemberCouponDto.setMemberId(memberId);
+ mallMemberCouponDto.setExpireTime(DateUtil.date());
IPage<MallMemberCouponVo> pages = mallMemberCouponMapper.selectListInPage(page, mallMemberCouponDto);
return new FebsResponse().success().data(pages);
+ }
+
+ @Override
+ public FebsResponse memberPayCoupon(MallMemberCouponDto mallMemberCouponDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ mallMemberCouponDto.setMemberId(memberId);
+ mallMemberCouponDto.setExpireTime(DateUtil.date());
+// List<Long> couponIds = couponGoodsMapper.selectByGoodId(mallMemberCouponDto.getGoodsId());
+ List<Long> goodsIdList = mallMemberCouponDto.getGoodsIdList();
+ List<Long> couponIds = couponGoodsMapper.selectByGoodIdList(goodsIdList);
+
+ List<MallMemberCouponVo> mallMemberCouponVos = new ArrayList<>();
+ if(CollUtil.isNotEmpty(couponIds)){
+ mallMemberCouponVos = mallMemberCouponMapper.selectListCreateInPage(mallMemberCouponDto,couponIds);
+ }
+ return new FebsResponse().success().data(mallMemberCouponVos);
+ }
+
+ @Override
+ public FebsResponse couponDetails(Long id) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(id);
+ MallMemberCouponVo mallMemberCouponVo = new MallMemberCouponVo();
+ mallMemberCouponVo.setCouponName(mallMemberCoupon.getCouponName());
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId());
+ mallMemberCouponVo.setCostAmount(mallGoodsCoupon.getCostAmount());
+ mallMemberCouponVo.setRealAmount(mallGoodsCoupon.getRealAmount());
+ mallMemberCouponVo.setType(mallGoodsCoupon.getType());
+ return new FebsResponse().success().data(mallMemberCouponVo);
+ }
+
+ @Override
+ public FebsResponse setInvite(ApiSetInviteDto apiSetInviteDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ MallMember mallMember = this.baseMapper.selectById(memberId);
+ if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
+ throw new FebsException("已绑定");
+ }
+ String inviteId = apiSetInviteDto.getInviteId();
+ if(inviteId.equals(mallMember.getInviteId())){
+ return new FebsResponse().success();
+ }
+ MallMember member = this.baseMapper.selectInfoByInviteId(inviteId);
+ if (member != null) {
+ if (StrUtil.isNotBlank(member.getReferrerIds()) && member.getReferrerIds().contains(mallMember.getInviteId())) {
+ log.info("下级不能邀请上级");
+ return new FebsResponse().success();
+ }
+ mallMember.setReferrerId(member.getInviteId());
+
+ //推荐人和推荐人链
+ boolean flag = false;
+ String parentId = mallMember.getReferrerId();
+ if (StrUtil.isBlank(parentId)) {
+ flag = true;
+ }
+ String ids = "";
+ while (!flag) {
+ if (StrUtil.isBlank(ids)) {
+ ids += parentId;
+ } else {
+ ids += ("," + parentId);
+ }
+ MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId);
+ if (parentMember == null) {
+ break;
+ }
+ parentId = parentMember.getReferrerId();
+ if (StrUtil.isBlank(parentMember.getReferrerId())) {
+ flag = true;
+ }
+ }
+ if (StrUtil.isNotBlank(ids)) {
+ mallMember.setReferrerIds(ids);
+ }
+ this.baseMapper.updateById(mallMember);
+ }
+ return new FebsResponse().success();
}
private String getXcxLoginUrl(String code) {
String wechatLoginUrl =xcxProperties.getWecharLoginUrl();
return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code);
}
+
+ @Override
+ public Map<String, Object> loginEvent() {
+ MallMember loginUser = LoginUserUtil.getLoginUser();
+
+ MallMember member = this.baseMapper.selectById(loginUser.getId());
+
+ MallMember mallMember = new MallMember();
+ mallMember.setId(member.getId());
+ mallMember.setLastLoginTime(new Date());
+ this.baseMapper.updateById(mallMember);
+
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.UNALIVE_COUPON.getType(), DataDictionaryEnum.UNALIVE_COUPON.getCode());
+ if (dic == null || StrUtil.isBlank(dic.getValue())) {
+ return new HashMap<>();
+ }
+
+ Date today = new Date();
+ Date lastLoginTime = member.getLastLoginTime();
+ if (lastLoginTime == null) {
+ lastLoginTime = new Date();
+ }
+
+ long days = DateUtil.between(DateUtil.endOfDay(lastLoginTime), DateUtil.endOfDay(today), DateUnit.DAY);
+
+ List<VipSettingUnAliveSettingBo> list = JSONObject.parseArray(dic.getValue(), VipSettingUnAliveSettingBo.class);
+ List<Long> couponIds = list.stream().filter(item -> {
+ return item.getDay() <= days && item.getCouponId() != null;
+ }).map(VipSettingUnAliveSettingBo::getCouponId).collect(Collectors.toList());
+ if (CollUtil.isEmpty(couponIds)) {
+ return new HashMap<>();
+ }
+
+ LambdaQueryWrapper<MallGoodsCoupon> query = new LambdaQueryWrapper<>();
+ query.in(MallGoodsCoupon::getId, couponIds)
+ .eq(MallGoodsCoupon::getState, 2);
+ List<MallGoodsCoupon> coupons = mallGoodsCouponMapper.selectList(query);
+
+ LambdaQueryWrapper<MallMemberCoupon> memberCouponQuery = new LambdaQueryWrapper<>();
+ memberCouponQuery.in(MallMemberCoupon::getCouponId, couponIds)
+ .eq(MallMemberCoupon::getMemberId, member.getId())
+ .eq(MallMemberCoupon::getFromType, 3)
+ .ge(MallMemberCoupon::getCreatedTime, DateUtil.beginOfDay(new Date()))
+ .le(MallMemberCoupon::getCreatedTime, DateUtil.endOfDay(new Date()));
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectList(memberCouponQuery);
+ if (CollUtil.isNotEmpty(mallMemberCoupons)) {
+ Map<Long, MallMemberCoupon> map = mallMemberCoupons.stream().collect(Collectors.toMap(MallMemberCoupon::getCouponId, MallMemberCoupon -> MallMemberCoupon));
+ coupons = coupons.stream().filter(item -> {
+ return map.get(item.getId()) == null;
+ }).collect(Collectors.toList());
+ }
+
+ if (CollUtil.isEmpty(coupons)) {
+ return new HashMap<>();
+ }
+
+ coupons.forEach(item -> {
+ MallMemberCoupon memberCoupon = new MallMemberCoupon();
+ memberCoupon.setCouponId(item.getId());
+ memberCoupon.setCouponName(item.getName());
+ memberCoupon.setInviteId(member.getInviteId());
+ memberCoupon.setCouponUuid(IdUtil.simpleUUID());
+ memberCoupon.setState(1);
+ memberCoupon.setFromType(3);
+ memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), item.getExpireDay()));
+ memberCoupon.setMemberId(member.getId());
+ mallMemberCouponMapper.insert(memberCoupon);
+ });
+
+ Map<String, Object> result = new HashMap<>();
+ result.put("coupon", coupons);
+ return result;
+ }
+
+
}
--
Gitblit v1.9.1