From 8381bd7af61a2866eac5555c16e1116793ec4e32 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 13 Mar 2026 17:30:44 +0800
Subject: [PATCH] feat(mall): 替换会员系统为新的AI会员架构
---
src/main/java/cc/mrbird/febs/yinhe/entity/YhAiMember.java | 193 +++++++++++++++++++++
src/main/java/cc/mrbird/febs/yinhe/entity/YHAiCompany.java | 20 ++
src/main/java/cc/mrbird/febs/yinhe/entity/YhBaseEntity.java | 29 +++
src/main/java/cc/mrbird/febs/yinhe/mapper/YHAiCompanyMapper.java | 9 +
src/main/java/cc/mrbird/febs/yinhe/mapper/YhAiMemberMapper.java | 14 +
src/main/java/cc/mrbird/febs/yinhe/service/YhAiMemberService.java | 12 +
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 231 ++++++-------------------
7 files changed, 334 insertions(+), 174 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 327259b..6a585ee 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
@@ -33,6 +33,10 @@
import cc.mrbird.febs.vip.VipSettingUnAliveSettingBo;
import cc.mrbird.febs.vip.entity.MallVipConfig;
import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
+import cc.mrbird.febs.yinhe.entity.YHAiCompany;
+import cc.mrbird.febs.yinhe.entity.YhAiMember;
+import cc.mrbird.febs.yinhe.mapper.YHAiCompanyMapper;
+import cc.mrbird.febs.yinhe.mapper.YhAiMemberMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
@@ -696,6 +700,8 @@
private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class);
+ private final YhAiMemberMapper yhAiMemberMapper;
+ private final YHAiCompanyMapper yhAiCompanyMapper;
@Override
public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException {
@@ -718,118 +724,53 @@
String sessionKey = json.getString("session_key");
log.info("openId={},sessionKey={}", openId, sessionKey);
// 查询用户是否存在
- MallMember mallMember = null;
+ YhAiMember entity = null;
synchronized (this) {
- mallMember = this.baseMapper.selectMemberByOpenId(openId);
- if (ObjectUtil.isEmpty(mallMember)) {
+ Date systemTime = new Date();
+ entity = yhAiMemberMapper.selectOne(
+ Wrappers.lambdaQuery(YhAiMember.class)
+ .eq(YhAiMember::getOpenId, openId)
+ );
+ if (ObjectUtil.isEmpty(entity)) {
// 新增用户
- mallMember = new MallMember();
- mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
- mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
- mallMember.setOpenId(openId);
- mallMember.setSessionKey(sessionKey);
- mallMember.setTradePassword(SecureUtil.md5("123456"));
+ entity = new YhAiMember();
+ entity.setOpenId(openId);
+ entity.setSessionKey(sessionKey);
- 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);
-
- AiMember aiMember = new AiMember();
- aiMember.setId(UUID.getSimpleUUIDString());
+ entity.setMemberUuid(UUID.getSimpleUUIDString());
if (StrUtil.isNotEmpty(apiXcxLoginDto.getCompanyId())){
- AiCompany aiCompany = aiCompanyMapper.selectOne(
- Wrappers.lambdaQuery(AiCompany.class)
- .eq(AiCompany::getCode, apiXcxLoginDto.getCompanyId())
- .last("limit 1")
+ YHAiCompany aiCompany = yhAiCompanyMapper.selectOne(
+ Wrappers.lambdaQuery(YHAiCompany.class)
+ .eq(YHAiCompany::getCode, apiXcxLoginDto.getCompanyId())
);
if (ObjectUtil.isNotEmpty(aiCompany)){
- aiMember.setCompanyId(aiCompany.getId());
+ entity.setCompanyId(aiCompany.getId());
}
}
- aiMember.setCreatedTime(new Date());
- aiMemberMapper.insert(aiMember);
+ entity.setCreateTime(systemTime);
+ entity.setUpdateTime(systemTime);
+ entity.setLastLoginTime(systemTime);
+ yhAiMemberMapper.insert(entity);
- mallMember = this.baseMapper.selectMemberByOpenId(openId);
- String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId());
- mallMember.setMemberUuid(aiMember.getId());
- if (StrUtil.isNotEmpty(aiMember.getCompanyId())){
- mallMember.setCompanyId(aiMember.getCompanyId());
- }
- mallMember.setInviteId(inviteId);
- mallMember.setName("新用户"+inviteId);
- this.baseMapper.updateById(mallMember);
- MallMemberWallet wallet = new MallMemberWallet();
- 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);
- }
- }
- }
- }
+ entity = yhAiMemberMapper.selectOne(
+ Wrappers.lambdaQuery(YhAiMember.class)
+ .eq(YhAiMember::getOpenId, openId)
+ );
+ String inviteId = ShareCodeUtil.toSerialCode(entity.getId());
+ entity.setInviteId(inviteId);
+ entity.setName("XCX"+inviteId);
+ yhAiMemberMapper.updateById(entity);
} else {
- if (MallMember.ACCOUNT_STATUS_DISABLED.equals(mallMember.getAccountStatus())) {
+ if ("1".equals(entity.getAccountStatus())) {
throw new FebsException("账号已停用");
}
- mallMember.setSessionKey(sessionKey);
- this.baseMapper.updateById(mallMember);
+ entity.setSessionKey(sessionKey);
+ entity.setLastLoginTime(systemTime);
+ yhAiMemberMapper.updateById(entity);
}
}
// 存放redis
- String redisKey = AppContants.XCX_LOGIN_PREFIX + mallMember.getId();
+ String redisKey = AppContants.XCX_LOGIN_PREFIX + entity.getMemberUuid();
String existToken = redisUtils.getString(redisKey);
if (StrUtil.isNotBlank(existToken)) {
Object o = redisUtils.get(existToken);
@@ -838,12 +779,12 @@
}
}
String token = IdUtil.simpleUUID();
- redisUtils.set(token, JSONObject.toJSONString(mallMember), -1);
+ redisUtils.set(token, JSONObject.toJSONString(entity), -1);
redisUtils.set(redisKey, token, -1);
Map<String, Object> authInfo = new HashMap<>();
authInfo.put("token", token);
authInfo.put("appid", xcxProperties.getXcxAppid());
- authInfo.put("member", mallMember);
+ authInfo.put("member", entity);
authInfo.put("rasToken", generateAsaToken(token));
febsResponse.success().data(authInfo);
} else {
@@ -857,45 +798,41 @@
public FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto) {
log.info("name={},phone={},avatar={},sex={}",
apiXcxSaveInfoDto.getNickName(),apiXcxSaveInfoDto.getPhone(),apiXcxSaveInfoDto.getAvatarUrl(),apiXcxSaveInfoDto.getGender());
- Long memberId = LoginUserUtil.getLoginUser().getId();
- MallMember mallMember = this.baseMapper.selectById(memberId);
+ String memberId = LoginUserUtil.getLoginUser().getMemberUuid();
+ YhAiMember entity = yhAiMemberMapper.selectOne(
+ Wrappers.lambdaQuery(YhAiMember.class)
+ .eq(YhAiMember::getMemberUuid, memberId)
+ );
String nickName = apiXcxSaveInfoDto.getNickName();
if(StrUtil.isNotEmpty(nickName)){
- mallMember.setName(nickName);
+ entity.setName(nickName);
}
String phone = apiXcxSaveInfoDto.getPhone();
if(StrUtil.isNotEmpty(phone)){
- mallMember.setPhone(phone);
+ entity.setPhone(phone);
}
String avatarUrl = apiXcxSaveInfoDto.getAvatarUrl();
if(StrUtil.isNotEmpty(avatarUrl)){
- mallMember.setAvatar(avatarUrl);
+ entity.setAvatar(avatarUrl);
}
if (StrUtil.isNotBlank(apiXcxSaveInfoDto.getRealName())) {
- mallMember.setRealName(apiXcxSaveInfoDto.getRealName());
+ entity.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());
+ entity.setBirthday(apiXcxSaveInfoDto.getBirthday());
}
if(ObjectUtil.isNotEmpty(apiXcxSaveInfoDto.getGender())){
- mallMember.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
+ entity.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
}
String companyId = apiXcxSaveInfoDto.getCompanyId();
- if(ObjectUtil.isNotEmpty(apiXcxSaveInfoDto.getCompanyId())){
- AiCompany aiCompany = aiCompanyMapper.selectOne(
- Wrappers.lambdaQuery(AiCompany.class)
- .eq(AiCompany::getCode, apiXcxSaveInfoDto.getCompanyId())
- .last("limit 1")
+ if(ObjectUtil.isNotEmpty(companyId)){
+ YHAiCompany aiCompany = yhAiCompanyMapper.selectOne(
+ Wrappers.lambdaQuery(YHAiCompany.class)
+ .eq(YHAiCompany::getCode, companyId)
);
if (ObjectUtil.isEmpty(aiCompany)){
throw new FebsException("公司编码不存在");
@@ -904,63 +841,9 @@
companyId = aiCompany.getId();
}
}
- mallMember.setCompanyId(companyId);
- this.baseMapper.updateById(mallMember);
+ entity.setCompanyId(companyId);
+ yhAiMemberMapper.updateById(entity);
- String memberUuid = mallMember.getMemberUuid();
- AiMember aiMember = aiMemberService.getById(memberUuid);
- if (ObjectUtil.isNotEmpty(aiMember) && StrUtil.isNotEmpty(mallMember.getCompanyId())){
- aiMemberService.update(null,
- Wrappers.lambdaUpdate(AiMember.class)
- .set(AiMember::getCompanyId, mallMember.getCompanyId())
- .eq(AiMember::getId, aiMember.getId())
- );
- }
-
-
-// //完善信息赠送新人礼
-// 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();
}
diff --git a/src/main/java/cc/mrbird/febs/yinhe/entity/YHAiCompany.java b/src/main/java/cc/mrbird/febs/yinhe/entity/YHAiCompany.java
new file mode 100644
index 0000000..4bf5b68
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/yinhe/entity/YHAiCompany.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.yinhe.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("ai_company")
+public class YHAiCompany extends YhBaseEntity {
+
+
+ /** 主键 */
+ private String id;
+ /**
+ * 公司名称
+ */
+ private String name;
+ private String code;
+ private String knowledgeId;
+ private String categoryId;
+}
diff --git a/src/main/java/cc/mrbird/febs/yinhe/entity/YhAiMember.java b/src/main/java/cc/mrbird/febs/yinhe/entity/YhAiMember.java
new file mode 100644
index 0000000..7ef0946
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/yinhe/entity/YhAiMember.java
@@ -0,0 +1,193 @@
+package cc.mrbird.febs.yinhe.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 用户实体类
+ * 对应数据库表:ai_member
+ */
+@Data
+@TableName("ai_member")
+public class YhAiMember extends YhBaseEntity {
+
+ /**
+ * 主键ID (bigint自增)
+ */
+ @TableId(value = "id",type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 会员UUID
+ */
+ private String memberUuid;
+
+ /**
+ * 用户名称
+ */
+ private String name;
+
+ /**
+ * 手机号
+ */
+ private String phone;
+
+ /**
+ * 邮箱
+ */
+ private String email;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 支付密码
+ */
+ private String tradePassword;
+
+ /**
+ * 性别
+ */
+ private String sex;
+
+ /**
+ * 邀请码
+ */
+ private String inviteId;
+
+ /**
+ * 推荐人邀请码
+ */
+ private String referrerId;
+
+ /**
+ * 推荐人线路
+ */
+ private String referrerIds;
+
+ /**
+ * 代理层级
+ */
+ private String level;
+
+ /**
+ * 账户状态 0-正常 1-禁用
+ */
+ private Integer accountStatus;
+
+ /**
+ * 账户类型 1-正常用户
+ */
+ private Integer accountType;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+
+ /**
+ * 绑定手机号(仅全民商城用得到)
+ */
+ private String bindPhone;
+
+ /**
+ * 会员等级
+ */
+ private Integer director;
+
+ /**
+ * 分销等级
+ */
+ private Integer storeMaster;
+
+ /**
+ * 微信用户标识
+ */
+ private String openId;
+
+ /**
+ * 会话密钥
+ */
+ private String sessionKey;
+
+ /**
+ * 推销员id
+ */
+ private Long salesmansId;
+
+ /**
+ * 邀请图片
+ */
+ private String inviteImg;
+
+ /**
+ * 是否是销售员 1:是 2:否
+ */
+ private Integer isSale;
+
+ /**
+ * 生日
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date birthday;
+
+ /**
+ * 真实姓名
+ */
+ private String realName;
+
+ /**
+ * 上一次登录时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date lastLoginTime;
+
+ /**
+ * 会员时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date vipLevelTime;
+
+ /**
+ * 是否是医生 0-否 1-是
+ */
+ private Integer doctorState;
+
+ /**
+ * 是否是核销员 0-否 1-是
+ */
+ private Integer checkOrder;
+
+ /**
+ * 是否领取新人礼 0-否 1-是
+ */
+ private Integer newGift;
+
+ /**
+ * 是否是自提订单核销员 0-否 1-是
+ */
+ private Integer checkLeader;
+
+ /**
+ * 会员角色ID
+ */
+ private String memberRoleId;
+
+ /**
+ * 公司ID
+ */
+ private String companyId;
+
+ /**
+ * 角色ID
+ */
+ private Long roleId;
+}
\ No newline at end of file
diff --git a/src/main/java/cc/mrbird/febs/yinhe/entity/YhBaseEntity.java b/src/main/java/cc/mrbird/febs/yinhe/entity/YhBaseEntity.java
new file mode 100644
index 0000000..7446e9f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/yinhe/entity/YhBaseEntity.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.yinhe.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class YhBaseEntity implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+ /** 创建者 */
+ private String createBy;
+
+ /** 创建时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /** 更新者 */
+ private String updateBy;
+
+ /** 更新时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /** 备注 */
+ private String remark;
+}
diff --git a/src/main/java/cc/mrbird/febs/yinhe/mapper/YHAiCompanyMapper.java b/src/main/java/cc/mrbird/febs/yinhe/mapper/YHAiCompanyMapper.java
new file mode 100644
index 0000000..7da76cf
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/yinhe/mapper/YHAiCompanyMapper.java
@@ -0,0 +1,9 @@
+package cc.mrbird.febs.yinhe.mapper;
+
+import cc.mrbird.febs.yinhe.entity.YHAiCompany;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface YHAiCompanyMapper extends BaseMapper<YHAiCompany> {
+}
diff --git a/src/main/java/cc/mrbird/febs/yinhe/mapper/YhAiMemberMapper.java b/src/main/java/cc/mrbird/febs/yinhe/mapper/YhAiMemberMapper.java
new file mode 100644
index 0000000..a0346a1
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/yinhe/mapper/YhAiMemberMapper.java
@@ -0,0 +1,14 @@
+package cc.mrbird.febs.yinhe.mapper;
+
+import cc.mrbird.febs.yinhe.entity.YhAiMember;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户表 Mapper 接口
+ * 对应数据库表:ai_member
+ */
+@Mapper
+public interface YhAiMemberMapper extends BaseMapper<YhAiMember> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/cc/mrbird/febs/yinhe/service/YhAiMemberService.java b/src/main/java/cc/mrbird/febs/yinhe/service/YhAiMemberService.java
new file mode 100644
index 0000000..83820d7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/yinhe/service/YhAiMemberService.java
@@ -0,0 +1,12 @@
+package cc.mrbird.febs.yinhe.service;
+
+import cc.mrbird.febs.yinhe.entity.YhAiMember;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 用户表 Service 接口
+ * 对应数据库表:ai_member
+ */
+public interface YhAiMemberService extends IService<YhAiMember> {
+
+}
\ No newline at end of file
--
Gitblit v1.9.1