店铺会员mq新增

This commit is contained in:
liyj 2026-01-14 15:23:10 +08:00
parent 0597b03f8d
commit 9b558f2bd3
12 changed files with 290 additions and 8 deletions

View File

@ -0,0 +1,9 @@
package com.suisung.mall.account.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suisung.mall.common.modules.store.ShopStoreMemberLevel;
import org.springframework.stereotype.Component;
@Component
public interface ShopStoreMemberLevelMapper extends BaseMapper<ShopStoreMemberLevel> {
}

View File

@ -0,0 +1,9 @@
package com.suisung.mall.account.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suisung.mall.common.modules.store.ShopStoreMember;
import org.springframework.stereotype.Repository;
@Repository
public interface ShopStoreMemberMapper extends BaseMapper<ShopStoreMember> {
}

View File

@ -113,4 +113,6 @@ public interface AccountUserBindConnectService extends IBaseService<AccountUserB
* @return
*/
ThirdApiRes updateBatchAccountUserBindConnect(List<AccountUserBindConnect> accountUserBindConnectList);
List<AccountUserBindConnect> getAllBindList(AccountUserBindConnect accountUserBindConnect);
}

View File

@ -0,0 +1,12 @@
package com.suisung.mall.account.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.suisung.mall.common.modules.store.ShopStoreMemberLevel;
import java.util.List;
public interface ShopStoreMemberLevelService extends IService<ShopStoreMemberLevel> {
List<ShopStoreMemberLevel> findShopStoreMemberLevelList(ShopStoreMemberLevel shopStoreMemberLevel);
}

View File

@ -0,0 +1,23 @@
package com.suisung.mall.account.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.suisung.mall.common.modules.account.AccountUserInfo;
import com.suisung.mall.common.modules.store.ShopStoreMember;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface ShopStoreMemberService extends IService<ShopStoreMember> {
Page<ShopStoreMember> findPage(ShopStoreMember shopStoreMember, Integer pageNo, Integer pageSize);
List<ShopStoreMember> findShopStoreMemberList(ShopStoreMember shopStoreMember);
List<ShopStoreMember> findSendPage(QueryWrapper<ShopStoreMember> queryWrapper, Integer pageNo, Integer pageSize);
ShopStoreMember getShopStoreMemberById(Long id);
void dealStoreMember(AccountUserInfo accountUserInfo);
}

View File

@ -516,6 +516,17 @@ public class AccountUserBindConnectServiceImpl extends BaseServiceImpl<AccountUs
return new ThirdApiRes().fail(250, "保存异常");
}
@Override
public List<AccountUserBindConnect> getAllBindList(AccountUserBindConnect accountUserBindConnect) {
QueryWrapper<AccountUserBindConnect> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("bind_id", accountUserBindConnect.getBind_id());
queryWrapper.eq("bind_type", BindCode.MOBILE)
.eq("user_type", 0)
.eq("user_id", accountUserBindConnect.getUser_id())
.orderByAsc("bind_time");
return this.list(queryWrapper);
}
/**
* 用户绑定手机号和openid

View File

@ -81,6 +81,10 @@ public class AccountUserInfoServiceImpl extends BaseServiceImpl<AccountUserInfoM
@Autowired
private PayService payService;
@Autowired
private ShopStoreMemberLevelService shopStoreMemberLevelService;
/**
* 实名认证页面
*
@ -214,12 +218,12 @@ public class AccountUserInfoServiceImpl extends BaseServiceImpl<AccountUserInfoM
throw new ApiException(ResultCode.FAILED);
}
}
if(level_row != null && user_store_spend_total!=null){//店铺消费
if(level_row != null && user_store_spend_total!=null && store_id!=null){//店铺消费
//查找会员再更新店铺会员等级 todo
ShopStoreMemberLevel params = new ShopStoreMemberLevel();
params.setUserId(user_id);
params.setStoreId(store_id);
List<ShopStoreMemberLevel> shopStoreMemberLevels= shopService.findShopStoreMemberLevelList(params);
List<ShopStoreMemberLevel> shopStoreMemberLevels= shopStoreMemberLevelService.findShopStoreMemberLevelList(params);
if(shopStoreMemberLevels!=null && !shopStoreMemberLevels.isEmpty()){
ShopStoreMemberLevel updateShopStoreMemberLevel= shopStoreMemberLevels.get(0);
BigDecimal storeSpend=NumberUtil.add(updateShopStoreMemberLevel.getUserLevelSpend(),user_store_spend_total);//店铺会员总消费
@ -234,11 +238,10 @@ public class AccountUserInfoServiceImpl extends BaseServiceImpl<AccountUserInfoM
updateShopStoreMemberLevel.setUserLevelId(user_level_id);
updateShopStoreMemberLevel.setUserLevelName(user_level_name);
}
shopService.saveShopStoreMemberLevel(updateShopStoreMemberLevel);
shopStoreMemberLevelService.updateById(updateShopStoreMemberLevel);
}
}
return true;
}

View File

@ -0,0 +1,42 @@
package com.suisung.mall.account.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.suisung.mall.account.mapper.ShopStoreMemberLevelMapper;
import com.suisung.mall.account.service.ShopStoreMemberLevelService;
import com.suisung.mall.common.modules.store.ShopStoreMemberLevel;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 店铺会员-会员等级
* </p>
*/
@Transactional
@Service
public class ShopStoreMemberLevelServiceImpl extends BaseServiceImpl<ShopStoreMemberLevelMapper, ShopStoreMemberLevel> implements ShopStoreMemberLevelService {
@Override
public List<ShopStoreMemberLevel> findShopStoreMemberLevelList(ShopStoreMemberLevel shopStoreMemberLevel) {
QueryWrapper<ShopStoreMemberLevel> queryWrapper = new QueryWrapper<>();
if(shopStoreMemberLevel.getStoreId()!=null){
queryWrapper.eq("store_id",shopStoreMemberLevel.getStoreId());
}
if(shopStoreMemberLevel.getMemberLevelId()!=null){
queryWrapper.eq("store_member_id",shopStoreMemberLevel.getStoreMemberId());
}
if(shopStoreMemberLevel.getUserId()!=null){
queryWrapper.eq("user_id",shopStoreMemberLevel.getUserId());
}
return this.list(queryWrapper);
}
}

View File

@ -0,0 +1,165 @@
package com.suisung.mall.account.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.suisung.mall.account.mapper.ShopStoreMemberMapper;
import com.suisung.mall.account.service.AccountUserBindConnectService;
import com.suisung.mall.account.service.ShopStoreMemberLevelService;
import com.suisung.mall.account.service.ShopStoreMemberService;
import com.suisung.mall.common.api.BindCode;
import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.domain.UserDto;
import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.modules.account.AccountUserBindConnect;
import com.suisung.mall.common.modules.account.AccountUserInfo;
import com.suisung.mall.common.modules.store.ShopStoreMember;
import com.suisung.mall.common.modules.store.ShopStoreMemberLevel;
import com.suisung.mall.common.utils.ContextUtil;
import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
/**
* <p>
* 店铺会员-店铺会员
* </p>
*/
@Transactional
@Service
@Slf4j
public class ShopStoreMemberServiceImpl extends BaseServiceImpl<ShopStoreMemberMapper, ShopStoreMember> implements ShopStoreMemberService {
@Autowired
private ShopStoreMemberLevelService shopStoreMemberLevelService;
@Autowired
private AccountUserBindConnectService accountUserBindConnectService;
@Override
public Page<ShopStoreMember> findPage(ShopStoreMember shopStoreMember, Integer pageNo, Integer pageSize) {
QueryWrapper<ShopStoreMember> queryWrapper = new QueryWrapper<>();
UserDto userDto= ContextUtil.getCurrentUser();
assert userDto != null;
if(userDto.getRole_id()!=2){
throw new ApiException("无权限");
}
queryWrapper.eq("store_id", Convert.toInt(userDto.getStore_id()));
if(shopStoreMember.getUserId()!=null){
queryWrapper.eq("user_id", shopStoreMember.getUserId());
}
if(StringUtils.isNotEmpty(shopStoreMember.getUserAccount())){
queryWrapper.like("user_account", shopStoreMember.getUserAccount());
}
return this.lists(queryWrapper, pageNo, pageSize);
}
@Override
public List<ShopStoreMember> findShopStoreMemberList(ShopStoreMember shopStoreMember) {
QueryWrapper<ShopStoreMember> queryWrapper = new QueryWrapper<>();
if(shopStoreMember.getUserId()!=null){
queryWrapper.eq("user_id",shopStoreMember.getUserId());
}
if(shopStoreMember.getStoreId()!=null){
queryWrapper.eq("store_id", shopStoreMember.getStoreId());
}
return this.list(queryWrapper);
}
@Override
public List<ShopStoreMember> findSendPage(QueryWrapper<ShopStoreMember> queryWrapper, Integer pageNo, Integer pageSize) {
return this.lists(queryWrapper,pageNo,pageSize).getRecords();
}
@Override
public ShopStoreMember getShopStoreMemberById(Long id) {
ShopStoreMember shopStoreMember=this.getById(id);
if(null!=shopStoreMember){
QueryWrapper<ShopStoreMemberLevel> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("store_member_id", shopStoreMember.getStore_member_id());
ShopStoreMemberLevel shopStoreMemberLevel= shopStoreMemberLevelService.getOne(queryWrapper);
if(shopStoreMemberLevel!=null){
shopStoreMember.setShopStoreMemberLevel(shopStoreMemberLevel);
}
}
return shopStoreMember;
}
@Override
public void dealStoreMember(AccountUserInfo accountUserInfo){
if(null!=accountUserInfo.getStore_id()){
log.info("MQ处理店铺会员开始:accountUserInfo:{}", JSONUtil.toJsonStr(accountUserInfo));
Integer store_id = accountUserInfo.getStore_id();
Integer user_id = accountUserInfo.getUser_id();
QueryWrapper<ShopStoreMember> params=new QueryWrapper<>();
params.eq("store_id",store_id);
params.eq("user_id",user_id);
List<ShopStoreMember> shopStoreMembers= this.list(params);
if(shopStoreMembers.isEmpty()){
AccountUserBindConnect paramAccountUserBindConnect=new AccountUserBindConnect();
paramAccountUserBindConnect.setBind_id("+86"+accountUserInfo.getUser_mobile());
paramAccountUserBindConnect.setBind_type(BindCode.MOBILE);
paramAccountUserBindConnect.setUser_id(user_id);
paramAccountUserBindConnect.setBind_active(CommonConstant.Enable);
paramAccountUserBindConnect.setUser_type(0);
List<AccountUserBindConnect> accountUserBindConnectList = accountUserBindConnectService.getAllBindList(paramAccountUserBindConnect);
if (!accountUserBindConnectList.isEmpty()){
AccountUserBindConnect accountUserBindConnect= accountUserBindConnectList.get(0);
ShopStoreMember shopStoreMember = new ShopStoreMember();
shopStoreMember.setStoreName(accountUserInfo.getStore_name());
shopStoreMember.setStoreId(store_id);
shopStoreMember.setUserId(user_id);
shopStoreMember.setBind_openid(accountUserBindConnect.getBind_openid());
shopStoreMember.setUserNickname(accountUserBindConnect.getBind_nickname());
shopStoreMember.setUserAccount(accountUserBindConnect.getBind_id());
this.save(shopStoreMember);
ShopStoreMemberLevel shopStoreMemberLevel = getShopStoreMemberLevel(store_id, shopStoreMember);
shopStoreMemberLevel.setUserId(user_id);
shopStoreMemberLevelService.saveOrUpdate(shopStoreMemberLevel);
}
}
}
}
/**
* 店铺会员初始化信息
* @param storeId
* @param shopStoreMember
* @return
*/
private ShopStoreMemberLevel getShopStoreMemberLevel(Integer storeId, ShopStoreMember shopStoreMember) {
ShopStoreMemberLevel shopStoreMemberLevel=new ShopStoreMemberLevel();
shopStoreMemberLevel.setStoreId(storeId);
shopStoreMemberLevel.setStoreMemberId(shopStoreMember.getStore_member_id());
shopStoreMemberLevel.setUserLevelName("v1");
shopStoreMemberLevel.setUserLevelId(1001);
shopStoreMemberLevel.setMemberLevelId(1001);
shopStoreMemberLevel.setMemberLevelName("v1");
return shopStoreMemberLevel;
}
// 设置Excel响应头
private void setExcelResponseHeader(HttpServletResponse response, String fileName) {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("文件名编码失败");
}
}
}

View File

@ -126,4 +126,8 @@ public class AccountUserInfo implements Serializable {
@ApiModelProperty(value = "店铺id")
@TableField(exist = false)
private Integer store_id;
@ApiModelProperty(value = "店铺名称")
@TableField(exist = false)
private String store_name;
}

View File

@ -3389,6 +3389,8 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
BigDecimal min = NumberUtil.min(NumberUtil.mul(exp_consume_rate, exp_consume_rate), exp_consume_max);
AccountUserInfo info_data = shopUserExpHistoryService.experience(user_id, min, LevelCode.EXP_TYPE_CONSUME, "");
info_data.setStore_id(store_id);
info_data.setStore_name(shopStoreBaseService.get(store_id).getStore_name());
// 更新用户等级
mqMessageVos.add(new MqMessageVo(MqConstant.ACCOUNT_EXCHANGE, MqConstant.ACCOUNT_INFO_ROUTING_KEY, JSONUtil.parseObj(info_data)));
@ -3412,6 +3414,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
if (analytics != null) {
UserLevelTO userLevelTO = new UserLevelTO(user_id, BigDecimal.ZERO, 0, analytics.getUser_spend(), 0, 0, 0,store_id,order_payment_amount);
mqMessageVos.add(new MqMessageVo(MqConstant.ACCOUNT_EXCHANGE, MqConstant.ACCOUNT_UPGRADE_ROUTING_KEY, JSONUtil.parseObj(userLevelTO)));
//异步处理升级和店铺会员
// todo do_action("init_order_paid", order_base_rows, order_item_rows);
}
}

View File

@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;