From e1d1b5e5a2248381bc4faa2ac0e629676d17ff3c Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 01 Jul 2026 10:59:05 +0800
Subject: [PATCH] feat(mall): 支持优惠券多选绑定功能
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 335 ++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 254 insertions(+), 81 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 9ce7693..1831857 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
@@ -24,6 +24,7 @@
import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import java.util.List;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
@@ -88,6 +89,7 @@
private final MallStoreMapper mallStoreMapper;
private final MallStoreItemMapper mallStoreItemMapper;
private final MallStoreMemberMapper mallStoreMemberMapper;
+ private final MallDoctorMapper mallDoctorMapper;
@Value("${spring.profiles.active}")
@@ -922,45 +924,40 @@
@Override
public FebsResponse getCoupon(GetCouponDto getCouponDto) {
Long memberId = LoginUserUtil.getLoginUser().getId();
+ Long goodsId = getCouponDto.getGoodsId();
- 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();
-// }
+ //验证商品存不存在,且上没上架
+ MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
+ if(ObjectUtil.isEmpty(mallGoods) || MallGoods.ISSALE_STATUS_ENABLE != mallGoods.getIsSale()){
+ 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);
- }
+ List<SalemanCoupon> salemanCouponList = salemanCouponMapper.selectByMemberId(mallMember.getId());
+ if(CollUtil.isNotEmpty(salemanCouponList)){
+ for(SalemanCoupon salemanCoupon : salemanCouponList){
+ Long couponId = salemanCoupon.getCouponId();
+ //验证是否已经领取过该优惠券
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(memberId, couponId);
+ if(CollUtil.isNotEmpty(mallMemberCoupons)){
+ continue;
+ }
+ //商品优惠卷如果绑定了该商品,那么当前登陆者获取一张卷
+ List<CouponGoods> couponGoodsList = couponGoodsMapper.selectByGoodIdAndCouponId(goodsId, couponId);
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+ if(CollUtil.isNotEmpty(couponGoodsList) && ObjectUtil.isNotEmpty(mallGoodsCoupon)){
+ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+ mallMemberCoupon.setCouponId(couponId);
+ mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
+ mallMemberCoupon.setMemberId(memberId);
+ mallMemberCoupon.setGoodsId(goodsId);
+ mallMemberCoupon.setCouponUuid(IdUtil.simpleUUID());
+ mallMemberCoupon.setInviteId(mallMember.getInviteId());
+ mallMemberCoupon.setState(1);
+ mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), mallGoodsCoupon.getExpireDay()));
+ mallMemberCouponMapper.insert(mallMemberCoupon);
}
}
}
@@ -971,26 +968,29 @@
@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);
+ List<SalemanCoupon> salemanCouponList = salemanCouponMapper.selectByMemberId(mallMember.getId());
+ if(CollUtil.isNotEmpty(salemanCouponList)){
+ for(SalemanCoupon salemanCoupon : salemanCouponList){
+ Long couponId = salemanCoupon.getCouponId();
+ List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(memberId, couponId);
+ if(CollUtil.isEmpty(mallMemberCoupons)){
+ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
+ if(ObjectUtil.isNotEmpty(mallGoodsCoupon)){
+ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+ mallMemberCoupon.setCouponId(couponId);
+ mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
+ mallMemberCoupon.setMemberId(memberId);
+ mallMemberCoupon.setCouponUuid(IdUtil.simpleUUID());
+ mallMemberCoupon.setInviteId(mallMember.getInviteId());
+ mallMemberCoupon.setState(1);
+ mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
+ mallMemberCouponMapper.insert(mallMemberCoupon);
+ }
+ }
}
}
}
@@ -1096,10 +1096,12 @@
MallMember member = this.baseMapper.selectById(loginUser.getId());
- MallMember mallMember = new MallMember();
- mallMember.setId(member.getId());
- mallMember.setLastLoginTime(new Date());
- this.baseMapper.updateById(mallMember);
+// 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())) {
@@ -1176,9 +1178,14 @@
@Override
public FebsResponse storeItemList(MallStoreItemDto mallStoreItemDto) {
- QueryWrapper<MallStoreItem> mallStoreQueryWrapper = new QueryWrapper<>();
- mallStoreQueryWrapper.like("store_id",mallStoreItemDto.getStoreId());
- List<MallStoreItem> mallStores = mallStoreItemMapper.selectList(mallStoreQueryWrapper);
+// 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);
}
@@ -1191,15 +1198,14 @@
// 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::getStoreId, bindStoreMemberDto.getStoreId())
- .eq(MallStoreMember::getStoreItemId, bindStoreMemberDto.getStoreItemId())
- );
- if(CollUtil.isNotEmpty(mallStoreMembers)){
- return new FebsResponse().fail().message("您已经绑定过了");
- }
+// 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;
@@ -1233,28 +1239,39 @@
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 mallStoreMember = new MallStoreMember();
- mallStoreMember.setMemberId(memberId);
- mallStoreMember.setBindId(bindId);
- mallStoreMember.setStoreId(mallStoreItem.getStoreId());
- mallStoreMember.setStoreItemId(mallStoreItem.getId());
+ mallStoreMember.setAccount(shopAccount);
+ mallStoreMember.setPassword(shopPwd);
- mallStoreMember.setAccount(shopAccount);
- mallStoreMember.setPassword(shopPwd);
-
- mallStoreMember.setName(name);
- mallStoreMember.setAddress(address);
- mallStoreMember.setAge(age);
- mallStoreMember.setPhone(phoneNumber);
- mallStoreMemberMapper.insert(mallStoreMember);
+ mallStoreMember.setName(name);
+ mallStoreMember.setAddress(address);
+ mallStoreMember.setAge(age);
+ mallStoreMember.setPhone(phoneNumber);
+ mallStoreMemberMapper.insert(mallStoreMember);
+ }
return new FebsResponse().success().message("绑定成功");
}
@@ -1312,6 +1329,162 @@
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("操作成功");
+ }
+
public static void main(String[] args) {
Long userld = 16425L;
String shopAccount = "爱和美医疗";
--
Gitblit v1.9.1