From ccbd86bc5f747b748b5bde257a789d748b8cefbb Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 11 Sep 2025 17:41:35 +0800
Subject: [PATCH] ``` refactor(service): 在设置活动类别名称前增加非空检查在AdminHappyActivityServiceImpl.java中,对happyActivity的categoryId进行了非空检查,并且确认categoryMap中包含该categoryId后,再设置其categoryName。这样可以避免因为空值或不存在的键导致的潜在异常。 ```
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 1454 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 1,423 insertions(+), 31 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 053e033..f6951ea 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,48 +1,62 @@
package cc.mrbird.febs.mall.service.impl;
+import cc.mrbird.febs.common.configure.FebsConfigure;
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.*;
import cc.mrbird.febs.mall.conversion.MallMemberConversion;
import cc.mrbird.febs.mall.conversion.MallShopApplyConversion;
+import cc.mrbird.febs.mall.conversion.MallStoreConversion;
import cc.mrbird.febs.mall.dto.*;
+import cc.mrbird.febs.mall.dto.memberLevel.*;
+import cc.mrbird.febs.mall.dto.signActivity.ApiNewGiftSettingDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
-import cc.mrbird.febs.mall.service.IApiMallMemberService;
-import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
-import cc.mrbird.febs.mall.service.ICommonService;
+import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.mall.vo.*;
+import cc.mrbird.febs.mall.vo.memberLevel.*;
+import cc.mrbird.febs.mall.vo.sale.ApiSaleRecordInfoVo;
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
import cc.mrbird.febs.pay.service.IXcxPayService;
+import cc.mrbird.febs.pay.util.MD5;
+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.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
+import cn.hutool.json.JSONArray;
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.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
/**
* @author wzy
@@ -67,6 +81,25 @@
private final MallTeamLeaderMapper mallTeamLeaderMapper;
private final SpringContextHolder springContextHolder;
private final MallAgentRecordMapper mallAgentRecordMapper;
+ private final IMallMoneyFlowService mallMoneyFlowService;
+ private final IMallMemberCollectionService mallMemberCollectionService;
+ private final IMallMemberFootprintService mallMemberFootprintService;
+ private final SalemanCouponMapper salemanCouponMapper;
+ private final CouponGoodsMapper couponGoodsMapper;
+ private final MallGoodsCouponMapper mallGoodsCouponMapper;
+ private final MallMemberCouponMapper mallMemberCouponMapper;
+ private final MallGoodsMapper mallGoodsMapper;
+
+ private final MallVipConfigMapper mallVipConfigMapper;
+ private final MallStoreMapper mallStoreMapper;
+ private final MallStoreItemMapper mallStoreItemMapper;
+ private final MallStoreMemberMapper mallStoreMemberMapper;
+ private final MallDoctorMapper mallDoctorMapper;
+ private final HappyMemberLevelMapper happyMemberLevelMapper;
+ private final IApiMallMemberWalletService mallMemberWalletService;
+ private final HappyMemberLabelRecordMapper happyMemberLabelRecordMapper;
+ private final HappyMemberLabelMapper happyMemberLabelMapper;
+ private final FebsConfigure febsConfigure;
@Value("${spring.profiles.active}")
@@ -120,7 +153,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());
@@ -197,7 +229,9 @@
public String generateAsaToken(String token) {
RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
- return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
+// return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
+ //去掉时间戳
+ return rsa.encryptBase64(token, KeyType.PublicKey);
}
@Override
@@ -222,6 +256,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("退出登录");
@@ -232,12 +275,29 @@
Long id = LoginUserUtil.getLoginUser().getId();
MallMember mallMember = this.baseMapper.selectById(id);
+
+
MallMemberVo mallMemberVo = MallMemberConversion.INSTANCE.entityToVo(mallMember);
+
+ HappyMemberLevel happyMemberLevel = happyMemberLevelMapper.selectOne(
+ new LambdaQueryWrapper<HappyMemberLevel>()
+ .select(HappyMemberLevel::getName, HappyMemberLevel::getIconPng)
+ .eq(HappyMemberLevel::getCode, mallMember.getDirector())
+ );
+ if(happyMemberLevel != null){
+ mallMemberVo.setLevelName(happyMemberLevel.getName());
+ mallMemberVo.setLevelNamePng(happyMemberLevel.getIconPng());
+ }
if(StrUtil.isNotEmpty(mallMember.getReferrerId())){
MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId());
if (referMember != null) {
mallMemberVo.setReferrerName(referMember.getName());
}
+ }
+ if(mallMember.getStoreMaster() == 0){
+ mallMemberVo.setIsTeamLeader(2);
+ }else{
+ mallMemberVo.setIsTeamLeader(1);
}
if (StrUtil.isNotBlank(mallMember.getTradePassword())) {
@@ -249,24 +309,55 @@
mallMemberVo.setHasPayment(1);
}
+ MemberCollectionListDto memberCollectionListDto = new MemberCollectionListDto();
+ memberCollectionListDto.setPageNow(1);
+ memberCollectionListDto.setPageSize(10);
+ List<CollectionListVo> collectionList = mallMemberCollectionService.findMemberCollectionList(memberCollectionListDto);
+ mallMemberVo.setCollectionCnt(CollUtil.isNotEmpty(collectionList) ? collectionList.size() : 0);
+
+ MemberFootprintListDto memberFootprintListDto = new MemberFootprintListDto();
+ memberFootprintListDto.setPageNow(1);
+ memberFootprintListDto.setPageSize(10);
+ List<FootprintListVo> footprintList = mallMemberFootprintService.findMemberFootprintList(memberFootprintListDto);
+ mallMemberVo.setFootprintCnt(CollUtil.isNotEmpty(footprintList) ? footprintList.size() : 0);
+
+ List<MallMember> mallMembers = this.baseMapper.selectByRefererId(mallMember.getInviteId());
+ 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.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id));
+// mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id));
- //代理状态
- MallAgentRecord mallAgentRecordIng = mallAgentRecordMapper.selectByMemberIdAndState(id, MallAgentRecord.APPLY_ING);
- MallAgentRecord mallAgentRecordAgree = mallAgentRecordMapper.selectByMemberIdAndState(id, MallAgentRecord.APPLY_AGREE);
- MallAgentRecord mallAgentRecordDisagree = mallAgentRecordMapper.selectByMemberIdAndState(id, MallAgentRecord.APPLY_DISAGREE);
- if(ObjectUtil.isNotEmpty(mallAgentRecordIng)){
- mallMemberVo.setIsAgent(1);
- }else if(ObjectUtil.isNotEmpty(mallAgentRecordAgree)){
- mallMemberVo.setIsAgent(2);
- }else if(ObjectUtil.isNotEmpty(mallAgentRecordDisagree)){
- mallMemberVo.setIsAgent(3);
+ List<HappyMemberLabelRecord> happyMemberLabelRecords = happyMemberLabelRecordMapper.selectList(
+ new LambdaQueryWrapper<HappyMemberLabelRecord>()
+ .eq(HappyMemberLabelRecord::getMemberId, id)
+ .orderByDesc(HappyMemberLabelRecord::getId)
+ .last("limit 5")
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabelRecords)){
+ Set<Long> collect = happyMemberLabelRecords.stream().map(HappyMemberLabelRecord::getLabelId).collect(Collectors.toSet());
+ List<HappyMemberLabel> happyMemberLabels = happyMemberLabelMapper.selectList(
+ new LambdaQueryWrapper<HappyMemberLabel>()
+ .select(HappyMemberLabel::getIconPng, HappyMemberLabel::getName)
+ .in(HappyMemberLabel::getId, collect)
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabels)){
+ ArrayList<ApiLabelInfoVo> apiMemberLabelVos = new ArrayList<>();
+ for (HappyMemberLabel happyMemberLabel : happyMemberLabels) {
+ ApiLabelInfoVo apiLabelInfoVo = new ApiLabelInfoVo();
+ apiLabelInfoVo.setIconPng(happyMemberLabel.getIconPng());
+ apiLabelInfoVo.setName(happyMemberLabel.getName());
+ apiMemberLabelVos.add(apiLabelInfoVo);
+ }
+ mallMemberVo.setLabelList(apiMemberLabelVos);
+ }
}
-
return new FebsResponse().success().data(mallMemberVo);
}
@@ -282,7 +373,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());
@@ -305,6 +396,11 @@
mallMember.setTradePassword(SecureUtil.md5(forgetPwdDto.getPassword()));
this.baseMapper.updateById(mallMember);
return new FebsResponse().success().message("设置成功");
+ }
+
+ public static void main(String[] args) {
+ String pwd = SecureUtil.md5("123456");
+ System.out.println(pwd);
}
@Override
@@ -338,8 +434,8 @@
MyTeamVo myTeamVo = new MyTeamVo();
myTeamVo.setTeam(list);
- myTeamVo.setMyAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 1));
- myTeamVo.setMyTeamAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 2));
+ myTeamVo.setMyAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 1));
+ myTeamVo.setMyTeamAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 2));
myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size());
return new FebsResponse().success().data(myTeamVo);
}
@@ -355,6 +451,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);
}
@@ -434,7 +536,7 @@
Long id = LoginUserUtil.getLoginUser().getId();
MallMember member = this.baseMapper.selectById(id);
- member.setBindPhone(accountAndCodeDto.getAccount());
+ member.setPhone(accountAndCodeDto.getAccount());
this.baseMapper.updateById(member);
}
@@ -560,6 +662,7 @@
@Override
public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException {
+ log.info("登录请求参数:{}", JSONObject.toJSONString(apiXcxLoginDto));
FebsResponse febsResponse = new FebsResponse();
String code = apiXcxLoginDto.getCode();
log.info("code:" + code);
@@ -584,11 +687,46 @@
if (ObjectUtil.isEmpty(mallMember)) {
// 新增用户
mallMember = new MallMember();
+ mallMember.setName("用户" + openId);
mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
- mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
mallMember.setOpenId(openId);
mallMember.setSessionKey(sessionKey);
+ mallMember.setTradePassword(SecureUtil.md5("123456"));
+
+ if (StrUtil.isNotBlank(apiXcxLoginDto.getInviteId())) {
+ MallMember member = this.baseMapper.selectInfoByInviteId(apiXcxLoginDto.getInviteId());
+ if (member != null) {
+ 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.insert(mallMember);
mallMember = this.baseMapper.selectMemberByOpenId(openId);
@@ -599,7 +737,37 @@
wallet.setBalance(BigDecimal.ZERO);
wallet.setMemberId(mallMember.getId());
mallMemberWalletMapper.insert(wallet);
+
+ //分销员的邀请码赠送优惠卷
+ if (StrUtil.isNotBlank(apiXcxLoginDto.getInviteId())) {
+ String couponUUID = IdUtil.simpleUUID();
+ //通过邀请人信息,获取能领取的优惠卷信息
+ MallMember refMember = this.baseMapper.selectInfoByInviteId(apiXcxLoginDto.getInviteId());
+ if(ObjectUtil.isNotEmpty(refMember)){
+ SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(refMember.getId());
+ if(ObjectUtil.isNotEmpty(salemanCoupon)){
+ Long couponId = salemanCoupon.getCouponId();
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(mallMember.getId(), couponId);
+ if(CollUtil.isEmpty(mallMemberCoupons)){
+ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+ mallMemberCoupon.setCouponId(couponId);
+ mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
+ mallMemberCoupon.setMemberId(mallMember.getId());
+ mallMemberCoupon.setCouponUuid(couponUUID);
+ mallMemberCoupon.setInviteId(refMember.getInviteId());
+ mallMemberCoupon.setState(1);
+ mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
+ mallMemberCouponMapper.insert(mallMemberCoupon);
+ }
+ }
+ }
+ }
} else {
+ if (MallMember.ACCOUNT_STATUS_DISABLED.equals(mallMember.getAccountStatus())) {
+ throw new FebsException("账号已停用");
+ }
mallMember.setSessionKey(sessionKey);
this.baseMapper.updateById(mallMember);
}
@@ -614,8 +782,8 @@
}
}
String token = IdUtil.simpleUUID();
- redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000);
- redisUtils.set(redisKey, token, 360000);
+ redisUtils.set(token, JSONObject.toJSONString(mallMember), -1);
+ redisUtils.set(redisKey, token, -1);
Map<String, Object> authInfo = new HashMap<>();
authInfo.put("token", token);
authInfo.put("appid", xcxProperties.getXcxAppid());
@@ -640,14 +808,82 @@
}
String phone = apiXcxSaveInfoDto.getPhone();
if(StrUtil.isNotEmpty(phone)){
+
+ MallMember entity = this.baseMapper.selectOne(
+ Wrappers.lambdaQuery(MallMember.class)
+ .eq(MallMember::getPhone, phone)
+ .last("LIMIT 1")
+ );
+ if(ObjectUtil.isNotNull( entity) && !entity.getId().equals(memberId)){
+ throw new FebsException("手机号码已使用");
+ }
mallMember.setPhone(phone);
}
String avatarUrl = apiXcxSaveInfoDto.getAvatarUrl();
if(StrUtil.isNotEmpty(avatarUrl)){
mallMember.setAvatar(avatarUrl);
}
- mallMember.setSex(apiXcxSaveInfoDto.getGender() == 1 ? "女" : "男");
+
+ 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);
+
+// //完善信息赠送新人礼
+// if (StrUtil.isNotBlank(mallMember.getPhone()) && mallMember.getNewGift() == 0) {
+// DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+// CommonDictionaryEnum.NEW_GIFT_SETTING.getType(),
+// CommonDictionaryEnum.NEW_GIFT_SETTING.getCode()
+// );
+// mallMember.setNewGift(1);
+// this.baseMapper.updateById(mallMember);
+//
+// ApiNewGiftSettingDto apiNewGiftSettingDto = JSONObject.parseObject(dic.getValue(), ApiNewGiftSettingDto.class);
+// if (apiNewGiftSettingDto.getState() == 1) {
+// String prizeScore = apiNewGiftSettingDto.getPrizeScore();
+// BigDecimal bigDecimal = new BigDecimal(prizeScore).setScale(0, RoundingMode.HALF_DOWN);
+// if (bigDecimal.compareTo(BigDecimal.ZERO) > 0) {
+// walletService.add(bigDecimal, mallMember.getId(), "prizeScore");
+// mallMoneyFlowService.addMoneyFlow(
+// mallMember.getId(),
+// bigDecimal,
+// ScoreFlowTypeEnum.MEMBER_INFO_GIFT.getValue(),
+// MallUtils.getOrderNum(),
+// FlowTypeEnum.PRIZE_SCORE.getValue(),
+// StrUtil.format(ScoreFlowTypeEnum.MEMBER_INFO_GIFT.getDesc(),bigDecimal),
+// 2
+// );
+// }
+// if (apiNewGiftSettingDto.getCouponId() != null) {
+// MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(apiNewGiftSettingDto.getCouponId());
+// if(ObjectUtil.isNotEmpty(mallGoodsCoupon)){
+// MallMemberCoupon memberCoupon = new MallMemberCoupon();
+// memberCoupon.setCouponId(mallGoodsCoupon.getId());
+// memberCoupon.setCouponName(mallGoodsCoupon.getName());
+// memberCoupon.setInviteId(mallMember.getInviteId());
+// memberCoupon.setCouponUuid(IdUtil.simpleUUID());
+// memberCoupon.setState(1);
+// memberCoupon.setFromType(3);
+// memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), mallGoodsCoupon.getExpireDay()));
+// memberCoupon.setMemberId(mallMember.getId());
+// mallMemberCouponMapper.insert(memberCoupon);
+// }
+// }
+//
+// }
+// }
return new FebsResponse().success();
}
@@ -666,7 +902,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());
@@ -741,6 +976,21 @@
if(BigDecimal.ZERO.compareTo(amount)>0){
return new FebsResponse().fail().message("请输入正确的充值金额");
}
+ Integer type = apiRechargeWalletDto.getType();
+ if(2 == type){
+ //成为合伙人的充值金额
+ MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(apiRechargeWalletDto.getAgentApplyId());
+ BigDecimal agentPrice = mallAgentRecord.getAmount();
+// DataDictionaryCustom agentPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.PRICE_AMOUNT.getType(),
+// DataDictionaryEnum.PRICE_AMOUNT.getCode());
+// String agentPrice = agentPriceDic.getValue();
+// BigDecimal price = new BigDecimal(agentPrice);
+ if(agentPrice.compareTo(amount) != 0){
+ return new FebsResponse().fail().message("成为合伙人的金额为"+agentPrice);
+ }
+ }
+ String rechargeNo = "CZ_"+MallUtils.getOrderNum();
+ apiRechargeWalletDto.setRechargeNo(rechargeNo);
apiRechargeWalletDto.setMemberId(memberId);
BrandWCPayRequestData brandWCPayRequestData = null;
try {
@@ -748,6 +998,16 @@
} catch (Exception e) {
throw new FebsException("支付失败");
}
+ mallMoneyFlowService.addMoneyFlow(
+ memberId,
+ amount,
+ ScoreFlowTypeEnum.RECHARGE_ING.getValue(),
+ rechargeNo,
+ FlowTypeEnum.BALANCE.getValue(),
+ StrUtil.format(ScoreFlowTypeEnum.RECHARGE_ING.getDesc(),amount),
+ 1
+ );
+
String wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
String payResultStr = brandWCPayRequestData.getPrepay_id();
Map<String, Object> map = new HashMap<>();
@@ -756,8 +1016,1140 @@
return new FebsResponse().success().data(map).message("充值即将到账");
}
+ @Override
+ public void updateMemberAgent(Long memberId,String levelCode) {
+ mallAgentRecordMapper.updateStateByMemberId(memberId);
+ MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(memberId);
+ //更新用户表中的LEVEL
+ MallMember mallMember = this.baseMapper.selectById(mallAgentRecord.getMemberId());
+ mallMember.setLevel(levelCode);
+ this.baseMapper.updateById(mallMember);
+ }
+
+ @Override
+ public FebsResponse agentDetail() {
+ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.AGENT_DETAILS.getType(), DataDictionaryEnum.AGENT_DETAILS.getCode());
+ Map<String, Object> map = new HashMap<>();
+ if(ObjectUtil.isNotEmpty(dataDictionaryCustom)){
+ map.put("agentDetail", dataDictionaryCustom.getValue());
+ }
+ return new FebsResponse().success().data(map);
+ }
+
+ @Override
+ public FebsResponse activityInfo() {
+ DataDictionaryCustom activityBulletinDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.ACTIVITY_BULLETIN.getType(), DataDictionaryEnum.ACTIVITY_BULLETIN.getCode());
+ DataDictionaryCustom giveAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.GIVE_AMOUNT.getType(), DataDictionaryEnum.GIVE_AMOUNT.getCode());
+ DataDictionaryCustom giveStateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.GIVE_STATE.getType(), DataDictionaryEnum.GIVE_STATE.getCode());
+ Map<String, Object> map = new HashMap<>();
+ if(ObjectUtil.isNotEmpty(activityBulletinDic)){
+ map.put("activityBulletin",
+ ObjectUtil.isEmpty(activityBulletinDic.getValue()) ? "暂无活动" : activityBulletinDic.getValue());
+ }
+ if(ObjectUtil.isNotEmpty(giveAmountDic)){
+ map.put("giveAmount",
+ ObjectUtil.isEmpty(giveAmountDic.getValue()) ? 0 : giveAmountDic.getValue());
+ }
+ map.put("giveState",giveStateDic.getValue());
+ return new FebsResponse().success().data(map);
+ }
+
+ @Override
+ public FebsResponse agentApplyInfo() {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ ApiMallAgentRecordVo apiMallAgentRecordVo = mallAgentRecordMapper.selectApiMallAgentRecordVoByMemberIdAndState(memberId,MallAgentRecord.APPLY_ING);
+ return new FebsResponse().success().data(apiMallAgentRecordVo);
+ }
+
+ @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());
+ 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();
+ }
+
+ @Override
+ public FebsResponse memberCoupon(MallMemberCouponDto mallMemberCouponDto) {
+ 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);
+
+ this.baseMapper.updateLastLoginTime(member.getId(),new Date());
+
+ 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;
+ }
+
+ @Override
+ public FebsResponse storeList(MallStoreDto mallStoreDto) {
+ QueryWrapper<MallStore> mallStoreQueryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(mallStoreDto.getName())){
+ mallStoreQueryWrapper.like("name",mallStoreDto.getName());
+ }
+ List<MallStore> mallStores = mallStoreMapper.selectList(mallStoreQueryWrapper);
+ List<MallStoreVo> mallStoreVos = MallStoreConversion.INSTANCE.entitysToVos(mallStores);
+ return new FebsResponse().success().data(mallStoreVos);
+ }
+
+ @Override
+ public FebsResponse storeItemList(MallStoreItemDto mallStoreItemDto) {
+// QueryWrapper<MallStoreItem> mallStoreQueryWrapper = new QueryWrapper<>();
+// mallStoreQueryWrapper.like("store_id",mallStoreItemDto.getStoreId());
+// List<MallStoreItem> mallStores = mallStoreItemMapper.selectList(mallStoreQueryWrapper);
+
+ List<MallStoreItem> mallStores = mallStoreItemMapper.selectList(
+ new LambdaQueryWrapper<MallStoreItem>()
+ .eq(MallStoreItem::getStoreId, mallStoreItemDto.getStoreId())
+ );
+ return new FebsResponse().success().data(mallStores);
+ }
+
+ @Override
+ public FebsResponse bindStoreMember(BindStoreMemberDto bindStoreMemberDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ Long storeItemId = bindStoreMemberDto.getStoreItemId();
+
+// QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>();
+// objectQueryWrapper.eq("member_id",memberId);
+// List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper);
+
+ List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(
+ new LambdaQueryWrapper<MallStoreMember>()
+ .eq(MallStoreMember::getMemberId, memberId)
+ .eq(MallStoreMember::getStoreItemId, bindStoreMemberDto.getStoreItemId())
+ );
+ if(CollUtil.isNotEmpty(mallStoreMembers)){
+ return new FebsResponse().fail().message("您已经绑定过了");
+ }
+
+ MallMember mallMember = this.baseMapper.selectById(memberId);
+ Integer sex = "女".equals(mallMember.getSex()) ? 3 : 2;
+
+ MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId);
+ HashMap<String, String> objectObjectHashMap = new HashMap<>();
+ String shopAccount = mallStoreItem.getAccount();
+ String shopPwd = mallStoreItem.getPassword();
+ String name = bindStoreMemberDto.getName();
+ String address = bindStoreMemberDto.getAddress();
+ Integer age = bindStoreMemberDto.getAge();
+ String phoneNumber = bindStoreMemberDto.getPhone();
+
+ objectObjectHashMap.put("shopAccount",shopAccount);
+ objectObjectHashMap.put("shopPwd",shopPwd);
+ objectObjectHashMap.put("name",name);
+ objectObjectHashMap.put("address",address);
+ objectObjectHashMap.put("age",age.toString());
+ objectObjectHashMap.put("phoneNumber",phoneNumber);
+ objectObjectHashMap.put("sex",sex.toString());
+
+ //sign= MD5(address+age+name+phoneNumber+shopAccount+shopPwd)
+ StringBuffer stringBuffer = new StringBuffer();
+ stringBuffer.append(address);
+ stringBuffer.append(age);
+ stringBuffer.append(name);
+ stringBuffer.append(phoneNumber);
+ stringBuffer.append(sex);
+ stringBuffer.append(shopAccount);
+ stringBuffer.append(shopPwd);
+ String sign = MD5.MD5Encode(stringBuffer.toString());
+ objectObjectHashMap.put("sign",sign);
+ String url = "https://data.muchun.co/api/bindCustomer";
+
+ log.info("请求参数"+objectObjectHashMap);
+ String result = HttpCurlUtil.sendPost(url, objectObjectHashMap);
+ log.info("绑定用户"+result);
+ Integer retCode = JSONUtil.parseObj(result).getInt("retCode");
+ String message = JSONUtil.parseObj(result).getStr("message");
+ if(0 != retCode || !"绑定成功".equals(message)){
+ return new FebsResponse().fail().message(message);
+ }
+
+ Long bindId = JSONUtil.parseObj(result).getJSONObject("data").getLong("userId");
+ List<MallStoreMember> mallStoreMembers1 = mallStoreMemberMapper.selectList(
+ new LambdaQueryWrapper<MallStoreMember>()
+ .eq(MallStoreMember::getMemberId, memberId)
+ .eq(MallStoreMember::getStoreItemId, mallStoreItem.getId())
+ .eq(MallStoreMember::getBindId, bindId)
+ );
+ if(CollUtil.isEmpty(mallStoreMembers1)){
+ MallStoreMember mallStoreMember = new MallStoreMember();
+ mallStoreMember.setMemberId(memberId);
+ mallStoreMember.setBindId(bindId);
+ mallStoreMember.setStoreId(mallStoreItem.getStoreId());
+ mallStoreMember.setStoreItemId(mallStoreItem.getId());
+
+ mallStoreMember.setAccount(shopAccount);
+ mallStoreMember.setPassword(shopPwd);
+
+ mallStoreMember.setName(name);
+ mallStoreMember.setAddress(address);
+ mallStoreMember.setAge(age);
+ mallStoreMember.setPhone(phoneNumber);
+ mallStoreMemberMapper.insert(mallStoreMember);
+ }
+ return new FebsResponse().success().message("绑定成功");
+ }
+
+ @Override
+ public FebsResponse bindList() {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>();
+ objectQueryWrapper.eq("member_id",memberId);
+ List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper);
+
+ ArrayList<MallStoreMemberVo> mallStoreMemberVos = new ArrayList<>();
+ for(MallStoreMember mallStoreMember : mallStoreMembers){
+ MallStoreMemberVo mallStoreMemberVo = new MallStoreMemberVo();
+ Long storeId = mallStoreMember.getStoreId();
+ Long storeItemId = mallStoreMember.getStoreItemId();
+ MallStore mallStore = mallStoreMapper.selectById(storeId);
+ MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId);
+ mallStoreMemberVo.setId(mallStoreMember.getId());
+ mallStoreMemberVo.setBindInfo(mallStore.getName()+"-"+mallStoreItem.getCode());
+ mallStoreMemberVos.add(mallStoreMemberVo);
+ }
+ return new FebsResponse().success().data(mallStoreMemberVos);
+ }
+
+ @Override
+ public FebsResponse bindResult(BindResultDto bindResultDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ MallStoreMember mallStoreMember = mallStoreMemberMapper.selectById(bindResultDto.getBindId());
+ Long userld = mallStoreMember.getBindId();
+ String shopAccount = mallStoreMember.getAccount();
+ String shopPwd = mallStoreMember.getPassword();
+
+ HashMap<String, String> objectObjectHashMap = new HashMap<>();
+
+ objectObjectHashMap.put("shopAccount",shopAccount);
+ objectObjectHashMap.put("shopPwd",shopPwd);
+ objectObjectHashMap.put("userId",userld.toString());
+
+ //sign= MD5(shopAccount+shopPwd+userId)
+ StringBuffer stringBuffer = new StringBuffer();
+ stringBuffer.append(shopAccount);
+ stringBuffer.append(shopPwd);
+ stringBuffer.append(userld);
+ String sign = MD5.MD5Encode(stringBuffer.toString());
+ objectObjectHashMap.put("sign",sign);
+
+ String url = "https://data.muchun.co/api/getCustomerCheckRecords";
+ String result = HttpCurlUtil.sendPost(url, objectObjectHashMap);
+ Integer retCode = JSONUtil.parseObj(result).getInt("retCode");
+ String message = JSONUtil.parseObj(result).getStr("message");
+ if(0 != retCode){
+ return new FebsResponse().fail().message(message);
+ }
+ JSONArray data = JSONUtil.parseObj(result).getJSONArray("data");
+ return new FebsResponse().success().data(data);
+ }
+
+ /**
+ * 绑定医生接口的实现方法
+ *
+ * @param dto 包含绑定医生所需信息的数据传输对象
+ * @return 返回操作结果的响应对象
+ * @throws FebsException 如果绑定操作失败,抛出此异常
+ */
+ @Override
+ public FebsResponse bindDoctor(ApiDoctorBindDto dto) {
+
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ log.info("开始绑定医生{}",memberId);
+ // 从DTO中提取邀请ID和门店会员ID
+ String inviteId = dto.getInviteId();
+ Long storeMemberId = dto.getStoreMemberId();
+
+ // 根据门店会员ID查询门店会员信息
+ MallStoreMember mallStoreMember = mallStoreMemberMapper.selectOne(
+ new LambdaQueryWrapper<MallStoreMember>()
+ .eq(MallStoreMember::getId,storeMemberId)
+ .eq(MallStoreMember::getMemberId,memberId)
+ );
+ // 如果门店会员信息为空,抛出异常
+ if(null == mallStoreMember){
+ throw new FebsException("当前检测记录无法绑定!");
+ }
+
+ // 根据邀请ID查询会员信息
+ MallMember mallMember = this.baseMapper.selectInfoByInviteId(inviteId);
+ // 如果会员的医生状态不是1,抛出异常
+ if(1 != mallMember.getDoctorState()){
+ throw new FebsException("无法绑定!");
+ }
+
+ // 查询与当前门店会员ID关联的医生列表
+ List<MallDoctor> mallDoctors = mallDoctorMapper.selectList(
+ new LambdaQueryWrapper<MallDoctor>()
+ .eq(MallDoctor::getStoreMemberId, mallStoreMember.getId())
+ .eq(MallDoctor::getMemberId, mallMember.getId())
+ );
+ // 如果医生列表为空,创建新的医生对象并设置相关信息,然后插入数据库
+ if(CollUtil.isEmpty(mallDoctors)){
+ MallDoctor mallDoctor = new MallDoctor();
+ mallDoctor.setMemberId(mallMember.getId());
+ mallDoctor.setStoreMemberId(mallStoreMember.getId());
+ mallDoctor.setBindMemberId(mallStoreMember.getMemberId());
+ mallDoctor.setBindPhone(mallStoreMember.getPhone());
+ mallDoctor.setBindName(mallStoreMember.getName());
+ mallDoctor.setBindAge(mallStoreMember.getAge());
+
+ Long storeId = mallStoreMember.getStoreId();
+ Long storeItemId = mallStoreMember.getStoreItemId();
+ MallStore mallStore = mallStoreMapper.selectById(storeId);
+ MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId);
+ mallDoctor.setBindInfo(mallStore.getName()+"-"+mallStoreItem.getCode());
+ mallDoctorMapper.insert(mallDoctor);
+ }
+
+ // 返回操作成功的响应
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ /**
+ * 获取医生列表接口的实现
+ * 根据登录用户信息和查询条件,返回相应的医生列表
+ *
+ * @param dto 包含查询条件的数据传输对象
+ * @return 返回包含医生列表的响应对象
+ */
+ @Override
+ public FebsResponse doctorList(ApiDoctorListDto dto) {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ // 初始化用于存储医生信息的集合
+ ArrayList<ApiDoctorListVo> apiDoctorListVos = new ArrayList<>();
+
+ // 创建查询条件包装器
+ LambdaQueryWrapper<MallDoctor> objectQueryWrapper = new LambdaQueryWrapper<>();
+ // 根据传入的手机号进行模糊查询
+ if(StrUtil.isNotEmpty(dto.getPhone())){
+ objectQueryWrapper.like(MallDoctor::getBindPhone,dto.getPhone());
+ }
+ // 根据会员ID进行精确查询
+ objectQueryWrapper.eq(MallDoctor::getMemberId,memberId);
+ // 按创建时间降序排序
+ objectQueryWrapper.orderByDesc(MallDoctor::getCreatedTime);
+
+ // 执行查询,获取医生列表
+ List<MallDoctor> mallDoctors = mallDoctorMapper.selectList(objectQueryWrapper);
+ // 如果查询结果不为空,则遍历查询结果,封装医生信息
+ if(CollUtil.isNotEmpty(mallDoctors)){
+ for(MallDoctor mallDoctor : mallDoctors){
+ ApiDoctorListVo apiDoctorListVo = new ApiDoctorListVo();
+ apiDoctorListVo.setId(mallDoctor.getId());
+ apiDoctorListVo.setStoreMemberId(mallDoctor.getStoreMemberId());
+ apiDoctorListVo.setName(mallDoctor.getBindName());
+ apiDoctorListVo.setPhone(mallDoctor.getBindPhone());
+ apiDoctorListVo.setBindAge(mallDoctor.getBindAge());
+ apiDoctorListVo.setBindInfo(mallDoctor.getBindInfo());
+ apiDoctorListVo.setCreatedTime(mallDoctor.getCreatedTime());
+ // 将封装好的医生信息添加到集合中
+ apiDoctorListVos.add(apiDoctorListVo);
+ }
+ }
+ // 返回包含医生列表的响应对象
+ return new FebsResponse().success().data(apiDoctorListVos);
+ }
+
+ @Override
+ public FebsResponse authList() {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ // 初始化用于存储医生信息的集合
+ ArrayList<ApiDoctorListVo> apiDoctorListVos = new ArrayList<>();
+ // 创建查询条件包装器
+ LambdaQueryWrapper<MallDoctor> objectQueryWrapper = new LambdaQueryWrapper<>();
+ // 根据会员ID进行精确查询
+ objectQueryWrapper.eq(MallDoctor::getBindMemberId,memberId);
+ // 按创建时间降序排序
+ objectQueryWrapper.orderByDesc(MallDoctor::getCreatedTime);
+ // 执行查询,获取医生列表
+ List<MallDoctor> mallDoctors = mallDoctorMapper.selectList(objectQueryWrapper);
+ // 如果查询结果不为空,则遍历查询结果,封装医生信息
+ if(CollUtil.isNotEmpty(mallDoctors)){
+ for(MallDoctor mallDoctor : mallDoctors){
+ ApiDoctorListVo apiDoctorListVo = new ApiDoctorListVo();
+ apiDoctorListVo.setId(mallDoctor.getId());
+ apiDoctorListVo.setStoreMemberId(mallDoctor.getStoreMemberId());
+ MallMember mallMember = this.baseMapper.selectById(mallDoctor.getMemberId());
+ apiDoctorListVo.setName(mallMember.getName());
+ apiDoctorListVo.setPhone(mallDoctor.getBindPhone());
+ apiDoctorListVo.setBindAge(mallDoctor.getBindAge());
+ apiDoctorListVo.setBindInfo(mallDoctor.getBindInfo());
+ apiDoctorListVo.setCreatedTime(mallDoctor.getCreatedTime());
+ // 将封装好的医生信息添加到集合中
+ apiDoctorListVos.add(apiDoctorListVo);
+ }
+ }
+ // 返回包含医生列表的响应对象
+ return new FebsResponse().success().data(apiDoctorListVos);
+ }
+
+ @Override
+ public FebsResponse authDel(ApiDoctorAuthDeleteDto dto) {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ MallDoctor mallDoctor = mallDoctorMapper.selectById(dto.getId());
+ if(!memberId.equals(mallDoctor.getBindMemberId())){
+ throw new FebsException("当前授权无法删除!");
+ }
+ mallDoctorMapper.deleteById(dto.getId());
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse flowList(ApiMoneyFlowDto dto) {
+ Long id = LoginUserUtil.getLoginUser().getId();
+ IPage<ApiMoneyFlowVo> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+ dto.setMemberId(id);
+ IPage<ApiMoneyFlowVo> pages = mallMoneyFlowMapper.selectFlowInPage(page, dto);
+ return new FebsResponse().success().data(pages);
+ }
+
+ @Override
+ public FebsResponse flowHeader() {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ ApiMoneyFlowHeaderVo apiMoneyFlowHeaderVo = new ApiMoneyFlowHeaderVo();
+ MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+ apiMoneyFlowHeaderVo.setBalance(mallMemberWallet.getBalance());
+ apiMoneyFlowHeaderVo.setPrizeScore(mallMemberWallet.getPrizeScore());
+ return new FebsResponse().success().data(apiMoneyFlowHeaderVo);
+ }
+
+ @Override
+ public FebsResponse newGiftEvent() {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ ApiMemberNewGiftSettingVo apiMemberNewGiftSettingVo = new ApiMemberNewGiftSettingVo();
+
+ MallMember mallMember = this.baseMapper.selectById(memberId);
+
+ Integer newGift = mallMember.getNewGift();
+ if(newGift == 0){
+ apiMemberNewGiftSettingVo.setOpenState(1);
+ }else{
+ apiMemberNewGiftSettingVo.setOpenState(0);
+ }
+
+ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ CommonDictionaryEnum.NEW_GIFT_SETTING.getType(),
+ CommonDictionaryEnum.NEW_GIFT_SETTING.getCode()
+ );
+ ApiNewGiftSettingDto apiNewGiftSettingDto = JSONObject.parseObject(dic.getValue(), ApiNewGiftSettingDto.class);
+ apiMemberNewGiftSettingVo.setState(apiNewGiftSettingDto.getState());
+ if(apiMemberNewGiftSettingVo.getState() == 1 && apiMemberNewGiftSettingVo.getOpenState() == 1){
+
+ mallMember.setNewGift(1);
+
+ BigDecimal prizeScore = new BigDecimal(StrUtil.isBlank(apiNewGiftSettingDto.getPrizeScore()) ? "0" : apiNewGiftSettingDto.getPrizeScore())
+ .setScale(0, RoundingMode.HALF_DOWN);
+
+ if(prizeScore.compareTo(BigDecimal.ZERO) > 0){
+ mallMoneyFlowService.addMoneyFlow(
+ memberId,
+ prizeScore,
+ ScoreFlowTypeEnum.NEW_GIFT_PRIZE_SCORE.getValue(),
+ MallUtils.getOrderNum(),
+ FlowTypeEnum.PRIZE_SCORE.getValue(),
+ StrUtil.format( ScoreFlowTypeEnum.NEW_GIFT_PRIZE_SCORE.getDesc(),prizeScore),
+ 2);
+ mallMemberWalletService.add(prizeScore,memberId , "prizeScore");
+
+ apiMemberNewGiftSettingVo.setPrizeScore(prizeScore);
+ }
+
+ String couponUUID = IdUtil.simpleUUID();
+ if(ObjectUtil.isNotEmpty(apiNewGiftSettingDto.getCouponId())){
+ Long couponId = apiNewGiftSettingDto.getCouponId();
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+ if(ObjectUtil.isNotEmpty(mallGoodsCoupon) && mallGoodsCoupon.getState() == 2){
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(memberId, couponId);
+ if(CollUtil.isEmpty(mallMemberCoupons)){
+ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
+ 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);
+
+ mallMoneyFlowService.addMoneyFlow(
+ memberId,
+ BigDecimal.ONE,
+ ScoreFlowTypeEnum.NEW_GIFT_COUPON.getValue(),
+ MallUtils.getOrderNum(),
+ FlowTypeEnum.BALANCE.getValue(),
+ StrUtil.format( ScoreFlowTypeEnum.NEW_GIFT_COUPON.getDesc(),mallGoodsCoupon.getName()),
+ 2);
+
+ apiMemberNewGiftSettingVo.setCouponName(mallGoodsCoupon.getName());
+ }
+ }
+ }
+ }
+
+ mallMember.setLastLoginTime(new Date());
+ this.baseMapper.updateById(mallMember);
+
+// this.baseMapper.updateLastLoginTime(memberId,new Date());
+
+ return new FebsResponse().success().data(apiMemberNewGiftSettingVo);
+ }
+
+ @Override
+ public FebsResponse getLabelList() {
+
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ ArrayList<ApiMemberLabelVo> apiMemberLabelVos = new ArrayList<>();
+
+ List<HappyMemberLabelRecord> happyMemberLabelRecords = happyMemberLabelRecordMapper.selectList(
+ new LambdaQueryWrapper<HappyMemberLabelRecord>()
+ .eq(HappyMemberLabelRecord::getMemberId,memberId)
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabelRecords)){
+ Set<Long> collect = happyMemberLabelRecords.stream().map(HappyMemberLabelRecord::getLabelId).collect(Collectors.toSet());
+ List<HappyMemberLabel> happyMemberLabels = happyMemberLabelMapper.selectList(
+ new LambdaQueryWrapper<HappyMemberLabel>()
+ .select( HappyMemberLabel::getId, HappyMemberLabel::getCode,HappyMemberLabel::getIconPng, HappyMemberLabel::getName, HappyMemberLabel::getContent, HappyMemberLabel::getHeaderPng)
+ .in(HappyMemberLabel::getId, collect)
+ .orderByDesc(HappyMemberLabel::getCode)
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabels)){
+ for (HappyMemberLabel happyMemberLabel : happyMemberLabels) {
+ ApiMemberLabelVo apiMemberLabelVo = new ApiMemberLabelVo();
+ apiMemberLabelVo.setId(happyMemberLabel.getId());
+ apiMemberLabelVo.setCode(happyMemberLabel.getCode());
+ apiMemberLabelVo.setName(happyMemberLabel.getName());
+ apiMemberLabelVo.setContent(happyMemberLabel.getContent());
+ apiMemberLabelVo.setHeaderPng(happyMemberLabel.getHeaderPng());
+ apiMemberLabelVo.setIconPng(happyMemberLabel.getIconPng());
+ apiMemberLabelVos.add(apiMemberLabelVo);
+ }
+ }
+ }
+
+ return new FebsResponse().success().data(apiMemberLabelVos);
+ }
+
+ @Override
+ public FebsResponse getLabelListById(ApiMemberLabelInfoDto dto) {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ List<ApiMemberLabelInfoVo> apiMemberLabelInfoVos = new ArrayList<>();
+
+ HappyMemberLabelRecord happyMemberLabelRecord = happyMemberLabelRecordMapper.selectOne(
+ Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .eq(HappyMemberLabelRecord::getMemberId, memberId)
+ .eq(HappyMemberLabelRecord::getLabelId, dto.getId())
+ );
+ if(ObjectUtil.isEmpty(happyMemberLabelRecord)){
+ throw new FebsException("您没有该会员标签");
+ }
+ HappyMemberLabel happyMemberLabel = happyMemberLabelMapper.selectById(dto.getId());
+ if(ObjectUtil.isEmpty(happyMemberLabel)){
+ throw new FebsException("您没有该会员标签");
+ }
+ if(!ObjectUtil.equal(happyMemberLabel.getCode(),1)){
+ throw new FebsException("没有查看权限");
+ }
+
+ List<HappyMemberLabel> happyMemberLabels = happyMemberLabelMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabel.class)
+ .eq(HappyMemberLabel::getParentId, dto.getId())
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabels)){
+ for (HappyMemberLabel happyMemberLabelItem : happyMemberLabels) {
+ ApiMemberLabelInfoVo apiMemberLabelInfoVo = new ApiMemberLabelInfoVo();
+
+ apiMemberLabelInfoVo.setId(happyMemberLabelItem.getId());
+ apiMemberLabelInfoVo.setName(happyMemberLabelItem.getName());
+ apiMemberLabelInfoVos.add(apiMemberLabelInfoVo);
+ }
+ }
+
+ return new FebsResponse().success().data(apiMemberLabelInfoVos);
+ }
+
+ @Override
+ public FebsResponse scoreRecord(ApiScoreRecordInfoDto dto) {
+ // 初始化结果列表
+ List<ApiScoreRecordInfoVo> apiSaleRecordInfoVos = new ArrayList<>();
+
+ List<HappyMemberLabel> happyMemberLabels = happyMemberLabelMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabel.class)
+ .eq(HappyMemberLabel::getCode, 1)
+ .eq(HappyMemberLabel::getParentId, 0)
+ );
+ if(CollUtil.isEmpty(happyMemberLabels)){
+ return new FebsResponse().success().data(apiSaleRecordInfoVos);
+ }
+
+ // 获取类型参数
+ Integer type = dto.getType();
+ // 校验类型参数,确保其为1(月)或2(周)
+ if (type == null || (type != 1 && type != 2 && type != 3)) {
+ return new FebsResponse().fail().message("非法的类型参数");
+ }
+ DateTime startTime = DateUtil.beginOfMonth(new Date());
+ if(1 == type){
+ startTime = DateUtil.beginOfMonth(new Date());
+ }
+ if(2 == type){
+ startTime = DateUtil.beginOfWeek(new Date());
+ }
+ if(3 == type){
+ startTime = DateUtil.beginOfYear(new Date());
+ }
+
+ // 合并查询所有子标签
+ Set<Long> parentIds = happyMemberLabels.stream()
+ .map(HappyMemberLabel::getId)
+ .collect(Collectors.toSet());
+
+ List<HappyMemberLabel> allChildLabels = happyMemberLabelMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabel.class)
+ .in(HappyMemberLabel::getParentId, parentIds)
+ );
+
+ Map<Long, List<HappyMemberLabel>> childLabelMap = new HashMap<>();
+ if (CollUtil.isNotEmpty(allChildLabels)) {
+ childLabelMap = allChildLabels.stream()
+ .collect(Collectors.groupingBy(HappyMemberLabel::getParentId));
+ }
+
+ // 提取所有子标签 ID
+ Set<Long> labelIds = allChildLabels.stream()
+ .map(HappyMemberLabel::getId)
+ .collect(Collectors.toSet());
+
+ // 获取所有绑定关系
+ List<HappyMemberLabelRecord> labelRecords = CollUtil.isEmpty(labelIds) ? Collections.emptyList() :
+ happyMemberLabelRecordMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .in(HappyMemberLabelRecord::getLabelId, labelIds)
+ );
+
+ Map<Long, Set<Long>> labelToMembersMap = new HashMap<>();
+ if (CollUtil.isNotEmpty(labelRecords)) {
+ labelToMembersMap = labelRecords.stream()
+ .collect(Collectors.groupingBy(
+ HappyMemberLabelRecord::getLabelId,
+ Collectors.mapping(HappyMemberLabelRecord::getMemberId, Collectors.toSet())
+ ));
+ }
+
+ Set<Long> memberIds = labelToMembersMap.values().stream()
+ .flatMap(Set::stream)
+ .collect(Collectors.toSet());
+
+ // 获取资金流
+ List<MallMoneyFlow> moneyFlows = CollUtil.isEmpty(memberIds) ? Collections.emptyList() :
+ mallMoneyFlowMapper.selectList(
+ Wrappers.lambdaQuery(MallMoneyFlow.class)
+ .select(MallMoneyFlow::getAmount, MallMoneyFlow::getMemberId)
+ .in(MallMoneyFlow::getMemberId, memberIds)
+ .eq(MallMoneyFlow::getFlowType, FlowTypeEnum.PRIZE_SCORE.getValue())
+ .gt(MallMoneyFlow::getAmount, BigDecimal.ZERO)
+ .ge(MallMoneyFlow::getCreatedTime, startTime)
+ );
+
+ Map<Long, BigDecimal> memberScoreMap = new HashMap<>();
+ if (CollUtil.isNotEmpty(moneyFlows)) {
+ memberScoreMap = moneyFlows.stream()
+ .collect(Collectors.groupingBy(
+ MallMoneyFlow::getMemberId,
+ Collectors.mapping(MallMoneyFlow::getAmount, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+ ));
+ }
+
+ List<CompletableFuture<ApiScoreRecordInfoVo>> futures = new ArrayList<>();
+
+ Map<Long, List<HappyMemberLabel>> finalChildLabelMap = childLabelMap;
+ Map<Long, Set<Long>> finalLabelToMembersMap = labelToMembersMap;
+ Map<Long, BigDecimal> finalMemberScoreMap = memberScoreMap;
+ happyMemberLabels.forEach(item -> {
+ CompletableFuture<ApiScoreRecordInfoVo> uCompletableFuture = CompletableFuture.supplyAsync(() -> {
+ ApiScoreRecordInfoVo vo = new ApiScoreRecordInfoVo();
+ vo.setName(item.getName());
+ vo.setAvatar(item.getIconPng());
+ vo.setScore(BigDecimal.ZERO);
+
+ List<HappyMemberLabel> children = finalChildLabelMap.getOrDefault(item.getId(), Collections.emptyList());
+ if (CollUtil.isEmpty(children)) {
+ return vo;
+ }
+
+ Set<Long> childIds = children.stream().map(HappyMemberLabel::getId).collect(Collectors.toSet());
+ Set<Long> members = new HashSet<>();
+ for (Long childId : childIds) {
+ Set<Long> ids = finalLabelToMembersMap.getOrDefault(childId, Collections.emptySet());
+ members.addAll(ids);
+ }
+
+ if (CollUtil.isEmpty(members)) {
+ return vo;
+ }
+
+ BigDecimal total = BigDecimal.ZERO;
+ for (Long memberId : members) {
+ total = total.add(finalMemberScoreMap.getOrDefault(memberId, BigDecimal.ZERO));
+ }
+ vo.setScore(total.setScale(0, RoundingMode.DOWN));
+ return vo;
+ }, febsConfigure.asyncThreadPoolTaskExecutor()).exceptionally(ex -> {
+ // 异常兜底返回默认值
+ ApiScoreRecordInfoVo vo = new ApiScoreRecordInfoVo();
+ vo.setName(item.getName());
+ vo.setAvatar(item.getIconPng());
+ vo.setScore(BigDecimal.ZERO);
+ return vo;
+ });
+
+ futures.add(uCompletableFuture);
+ });
+ // 等待所有任务完成
+ CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
+ allOf.join(); // 阻塞直到所有任务完成
+
+ //等任务结束,获取返回结果
+ apiSaleRecordInfoVos = futures.stream()
+ .map(CompletableFuture::join)
+ .sorted(Comparator.comparing(ApiScoreRecordInfoVo::getScore).reversed())
+ .collect(Collectors.toList());
+
+
+ // 返回成功响应,包含销售记录信息
+ return new FebsResponse().success().data(apiSaleRecordInfoVos);
+ }
+
+ @Override
+ public FebsResponse getMemberLabelListById(ApiMemberLabelItemDto dto) {
+
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ List<ApiMemberLabelItemVo> apiMemberLabelItemVos = new ArrayList<>();
+
+ Integer labelId = dto.getLabelId();
+ List<HappyMemberLabelRecord> happyMemberLabelRecords = happyMemberLabelRecordMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .eq(HappyMemberLabelRecord::getLabelId, labelId)
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabelRecords)){
+
+ //stream流操作happyMemberLabelRecords,返回memberId的set集合
+ Set<Long> memberIdSet = happyMemberLabelRecords.stream().map(HappyMemberLabelRecord::getMemberId).collect(Collectors.toSet());
+ List<MallMember> mallMembers = this.baseMapper.selectList(
+ Wrappers.lambdaQuery(MallMember.class)
+ .select(MallMember::getId, MallMember::getName, MallMember::getPhone, MallMember::getAvatar)
+ .in(MallMember::getId, memberIdSet)
+ .eq(MallMember::getAccountStatus, MallMember.ACCOUNT_STATUS_ENABLE)
+ );
+
+ List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(
+ Wrappers.lambdaQuery(MallMoneyFlow.class)
+ .select(MallMoneyFlow::getAmount, MallMoneyFlow::getMemberId)
+ .in(MallMoneyFlow::getMemberId, memberIdSet)
+ .eq(MallMoneyFlow::getFlowType, FlowTypeEnum.PRIZE_SCORE.getValue())
+ .gt(MallMoneyFlow::getAmount, BigDecimal.ZERO)
+ );
+ //stream流操作mallMoneyFlows,返回一个map<Long,BigDecimal>,其中key为memberId,value为mallMoneyFlow的memberId等于key的amount的总和
+ Map<Long, BigDecimal> prizeScoreMap = mallMoneyFlows.stream()
+ .filter(Objects::nonNull) // 防止 MallMoneyFlow 为 null
+ .collect(Collectors.groupingBy(
+ MallMoneyFlow::getMemberId,
+ Collectors.mapping(
+ MallMoneyFlow::getAmount,
+ Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)
+ )
+ ));
+ for (MallMember mallMember : mallMembers){
+ ApiMemberLabelItemVo apiMemberLabelItemVo = new ApiMemberLabelItemVo();
+ apiMemberLabelItemVo.setName(mallMember.getName());
+ apiMemberLabelItemVo.setAvatar(mallMember.getAvatar());
+ apiMemberLabelItemVo.setPhone(mallMember.getPhone());
+ apiMemberLabelItemVo.setScore(prizeScoreMap.getOrDefault(mallMember.getId(), BigDecimal.ZERO).setScale(0,RoundingMode.DOWN));
+ apiMemberLabelItemVos.add(apiMemberLabelItemVo);
+ }
+ }
+
+ return new FebsResponse().success().data(apiMemberLabelItemVos);
+ }
+
+ @Override
+ public FebsResponse addLabelMember(ApiMemberLabelAddDto dto) {
+
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ ApiMemberLabelAddVo apiMemberLabelAddVo = new ApiMemberLabelAddVo();
+
+ Integer labelId = dto.getLabelId();
+ String phone = dto.getPhone();
+
+ List<MallMember> mallMembers = this.baseMapper.selectList(
+ Wrappers.lambdaQuery(MallMember.class)
+ .eq(MallMember::getPhone, phone)
+ );
+ if(CollUtil.isEmpty(mallMembers)){
+ throw new FebsException("未查询到用户");
+ }
+
+ MallMember mallMember = mallMembers.get(0);
+ apiMemberLabelAddVo.setMemberId(mallMember.getId());
+ apiMemberLabelAddVo.setName(mallMember.getName());
+ apiMemberLabelAddVo.setPhone(mallMember.getPhone());
+
+ HappyMemberLabel happyMemberLabel = happyMemberLabelMapper.selectById(labelId);
+ apiMemberLabelAddVo.setLabelId(happyMemberLabel.getId());
+ apiMemberLabelAddVo.setLabelName(happyMemberLabel.getName());
+
+ //获取会员标签
+ Integer integer = happyMemberLabelRecordMapper.selectCount(
+ Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .eq(HappyMemberLabelRecord::getMemberId, mallMember.getId())
+ .eq(HappyMemberLabelRecord::getLabelId, labelId)
+ );
+ if(integer > 0){
+ apiMemberLabelAddVo.setState(0);
+ }else{
+ apiMemberLabelAddVo.setState(1);
+ }
+ return new FebsResponse().success().data(apiMemberLabelAddVo);
+ }
+
+ @Override
+ public FebsResponse insureLabelMember(ApiMemberLabelInsureDto dto) {
+
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ Long labelId = dto.getLabelId();
+ Long insureMemberId = dto.getMemberId();
+
+ List<HappyMemberLabelRecord> happyMemberLabelRecords1 = happyMemberLabelRecordMapper.selectList(Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .eq(HappyMemberLabelRecord::getMemberId, insureMemberId)
+ );
+ if(CollUtil.isNotEmpty(happyMemberLabelRecords1)){
+ throw new FebsException("该用户不能重复加入");
+ }
+
+ HappyMemberLabel happyMemberLabel = happyMemberLabelMapper.selectById(labelId);
+ if(ObjectUtil.isEmpty(happyMemberLabel)){
+ throw new FebsException("会员标签不存在");
+ }
+ if(happyMemberLabel.getParentId() == 0){
+ throw new FebsException("会员标签不存在");
+ }
+
+ Long parentId = happyMemberLabel.getParentId();
+ HappyMemberLabel happyMemberLabelParent = happyMemberLabelMapper.selectById(parentId);
+ if(ObjectUtil.isEmpty(happyMemberLabelParent)){
+ throw new FebsException("会员标签不存在");
+ }
+ if(happyMemberLabelParent.getCode() != 1){
+ throw new FebsException("权限不足");
+ }
+
+ List<HappyMemberLabelRecord> happyMemberLabelRecordsParent = happyMemberLabelRecordMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .eq(HappyMemberLabelRecord::getMemberId, memberId)
+ .eq(HappyMemberLabelRecord::getLabelId, parentId)
+ );
+ if(ObjectUtil.isEmpty(happyMemberLabelRecordsParent)){
+ throw new FebsException("权限不足");
+ }
+
+
+ List<HappyMemberLabelRecord> happyMemberLabelRecords = happyMemberLabelRecordMapper.selectList(
+ Wrappers.lambdaQuery(HappyMemberLabelRecord.class)
+ .eq(HappyMemberLabelRecord::getMemberId, insureMemberId)
+ .eq(HappyMemberLabelRecord::getLabelId, labelId)
+ );
+ if(CollUtil.isEmpty(happyMemberLabelRecords)){
+ HappyMemberLabelRecord happyMemberLabelRecord = new HappyMemberLabelRecord();
+ happyMemberLabelRecord.setMemberId(insureMemberId);
+ happyMemberLabelRecord.setLabelId(labelId);
+ happyMemberLabelRecordMapper.insert(happyMemberLabelRecord);
+ }
+
+ return new FebsResponse().success().message("操作成功");
+ }
+
+// public static void main(String[] args) {
+// Long userld = 16425L;
+// String shopAccount = "爱和美医疗";
+// String shopPwd = "blnka2005";
+//
+// HashMap<String, String> objectObjectHashMap = new HashMap<>();
+//
+// objectObjectHashMap.put("shopAccount",shopAccount);
+// objectObjectHashMap.put("shopPwd",shopPwd);
+// objectObjectHashMap.put("userId",userld.toString());
+//
+// //sign= MD5(shopAccount+shopPwd+userId)
+// StringBuffer stringBuffer = new StringBuffer();
+// stringBuffer.append(shopAccount);
+// stringBuffer.append(shopPwd);
+// stringBuffer.append(userld);
+// String sign = MD5.MD5Encode(stringBuffer.toString());
+// objectObjectHashMap.put("sign",sign);
+//
+// System.out.println(sign);
+//
+// System.out.println(objectObjectHashMap);
+// String url = "https://data.muchun.co/api/getCustomerCheckRecords";
+// String result = HttpCurlUtil.sendPost(url, objectObjectHashMap);
+// Integer retCode = JSONUtil.parseObj(result).getInt("retCode");
+// String message = JSONUtil.parseObj(result).getStr("message");
+// if(0 != retCode){
+// System.out.println(message);
+// }
+//
+// JSONArray data = JSONUtil.parseObj(result).getJSONArray("data");
+// System.out.println(data);
+// }
+
+
}
--
Gitblit v1.9.1