个人中心会员相关

This commit is contained in:
张松 2025-09-25 11:41:39 +08:00
parent f4b6e68eff
commit 6bcf58aafc
4 changed files with 81 additions and 14 deletions

View File

@ -3,11 +3,10 @@ package com.czg.controller.user;
import com.czg.market.service.TbMemberConfigService;
import com.czg.market.vo.MemberDetailVO;
import com.czg.market.vo.MemberListVO;
import com.czg.market.vo.UMemberConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.ServletUtil;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -23,6 +22,14 @@ public class UMemberController {
@Resource
private TbMemberConfigService memberConfigService;
/**
* 获取当前店铺会员开通配置信息
* @param shopId 店铺id
*/
@GetMapping("/config")
public CzgResult<UMemberConfigVO> getConfig(@RequestParam Long shopId) {
return CzgResult.success(memberConfigService.detail(shopId, StpKit.USER.getLoginIdAsLong()));
}
/**
* 获取所有已开通的会员
* @return 列表

View File

@ -4,12 +4,7 @@ import com.czg.constant.TableValueConstant;
import com.czg.exception.ApiNotPrintException;
import com.czg.market.dto.MemberConfigDTO;
import com.czg.market.dto.MemberLevelDTO;
import com.czg.market.dto.MemberOrderDTO;
import com.czg.market.entity.MemberOrder;
import com.czg.market.vo.MemberConfigVO;
import com.czg.market.vo.MemberDetailVO;
import com.czg.market.vo.MemberLevelVO;
import com.czg.market.vo.MemberListVO;
import com.czg.market.vo.*;
import com.mybatisflex.core.service.IService;
import com.czg.market.entity.TbMemberConfig;
@ -26,6 +21,7 @@ import java.util.List;
public interface TbMemberConfigService extends IService<TbMemberConfig> {
MemberConfigVO detail(Long shopId);
UMemberConfigVO detail(Long shopId, Long userId);
Boolean edit(Long shopId, MemberConfigDTO memberDTO);

View File

@ -0,0 +1,27 @@
package com.czg.market.vo;
import com.czg.market.dto.MemberConfigDTO;
import jakarta.validation.Valid;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Data
public class UMemberConfigVO implements Serializable {
/**
* 店铺会员配置信息
*/
private MemberConfigVO memberConfig;
/**
* kv形式BIND_PHONE绑定手机号 ORDER订单数 COST_AMOUNT消费金额 RECHARGE_AMOUNT充值金额, true满足 false不满足
*/
private Map<String, Object> conditionMap;
}

View File

@ -14,16 +14,11 @@ import com.czg.account.entity.*;
import com.czg.account.service.*;
import com.czg.market.entity.*;
import com.czg.market.service.*;
import com.czg.market.vo.MemberConfigVO;
import com.czg.market.vo.MemberDetailVO;
import com.czg.market.vo.MemberLevelVO;
import com.czg.exception.ApiNotPrintException;
import com.czg.market.vo.MemberListVO;
import com.czg.market.vo.*;
import com.czg.order.entity.OrderInfo;
import com.czg.order.entity.OrderPayment;
import com.czg.order.service.OrderInfoService;
import com.czg.order.service.OrderPaymentService;
import com.czg.sa.StpKit;
import com.czg.service.market.enums.OrderStatusEnums;
import com.czg.service.market.mapper.TbMemberConfigMapper;
import com.czg.utils.AssertUtil;
@ -99,6 +94,48 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
return memberConfigVO;
}
@Override
public UMemberConfigVO detail(Long shopId, Long userId) {
MemberConfigVO memberConfigVO = detail(shopId);
ShopUser shopUserInfo = shopUserService.getShopUserInfo(shopId, userId);
HashMap<String, Object> conditionMap = new HashMap<>();
UMemberConfigVO configVO = new UMemberConfigVO();
configVO.setMemberConfig(memberConfigVO);
configVO.setConditionMap(conditionMap);
if (memberConfigVO.getConditionList() != null) {
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
switch (item.getCode()) {
case "BIND_PHONE":
conditionMap.put("BIND_PHONE", StrUtil.isNotBlank(shopUserInfo.getPhone()));
break;
case "ORDER":
conditionMap.put("ORDER", orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUserInfo.getSourceShopId()).eq(OrderInfo::getUserId, shopUserInfo.getUserId())
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) >= Integer.parseInt(item.getValue()));
break;
case "COST_AMOUNT":
conditionMap.put("BIND_PHONE", orderInfoService.list(new QueryWrapper().eq(OrderInfo::getShopId, shopUserInfo.getSourceShopId()).eq(OrderInfo::getUserId, shopUserInfo.getUserId())
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode()))
.stream().map(OrderInfo::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) >= 0);
break;
case "RECHARGE_AMOUNT":
conditionMap.put("BIND_PHONE", paymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUserInfo.getSourceShopId())
.eq(OrderPayment::getSourceId, shopUserInfo.getId()).isNotNull(OrderPayment::getTradeNumber))
.stream().map(OrderPayment::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) >= 0);
break;
default:
throw new CzgException("会员开通条件类型错误");
}
}
}
return configVO;
}
@Override
public Boolean edit(Long shopId, MemberConfigDTO memberDTO) {
TbMemberConfig memberConfig = getOne(new QueryWrapper().eq(TbMemberConfig::getShopId, shopId));