调用service会有上下文,改用mapper看看行不行

This commit is contained in:
liyj 2026-01-14 17:55:16 +08:00
parent 9c6f8c715f
commit bc7e359e1f
4 changed files with 87 additions and 80 deletions

View File

@ -1,20 +1,31 @@
package com.suisung.mall.account.listener; package com.suisung.mall.account.listener;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import com.suisung.mall.account.mapper.AccountUserBindConnectMapper;
import com.suisung.mall.account.mapper.AccountUserInfoMapper;
import com.suisung.mall.account.mapper.ShopStoreMemberLevelMapper;
import com.suisung.mall.account.mapper.ShopStoreMemberMapper;
import com.suisung.mall.account.service.AccountUserInfoService; import com.suisung.mall.account.service.AccountUserInfoService;
import com.suisung.mall.account.service.ShopStoreMemberService; import com.suisung.mall.common.api.BindCode;
import com.suisung.mall.common.constant.MqConstant; import com.suisung.mall.common.constant.MqConstant;
import com.suisung.mall.common.modules.account.AccountUserBindConnect;
import com.suisung.mall.common.modules.account.AccountUserInfo; 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 lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.List;
@Service @Service
@Slf4j @Slf4j
@ -23,8 +34,18 @@ public class DealUserInfoListener {
@Autowired @Autowired
private AccountUserInfoService accountUserInfoService; private AccountUserInfoService accountUserInfoService;
@Autowired @Autowired
private ShopStoreMemberService shopStoreMemberService; private AccountUserBindConnectMapper accountUserBindConnectMapper;
@Autowired
private AccountUserInfoMapper accountUserInfoMapper;
@Autowired
private ShopStoreMemberMapper shopStoreMemberMapper;
@Autowired
private ShopStoreMemberLevelMapper shopStoreMemberLevelMapper;
@RabbitHandler @RabbitHandler
public void listener(byte[] data, Channel channel, Message message) throws IOException, InterruptedException { public void listener(byte[] data, Channel channel, Message message) throws IOException, InterruptedException {
@ -38,16 +59,21 @@ public class DealUserInfoListener {
AccountUserInfo accountUserInfo = JSONUtil.toBean(data, AccountUserInfo.class); AccountUserInfo accountUserInfo = JSONUtil.toBean(data, AccountUserInfo.class);
// String messageId = message.getMessageProperties().getMessageId(); // String messageId = message.getMessageProperties().getMessageId();
log.info("MQ处理活动开始:accountUserInfo:{}", JSONUtil.toJsonStr(accountUserInfo)); log.info("MQ处理活动开始:accountUserInfo:{}", JSONUtil.toJsonStr(accountUserInfo));
// 设置模拟的请求上下文避免RequestContextHolder报错
ServletRequestAttributes reqAttr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(reqAttr,true);
log.info("reqAttr{}", reqAttr);
try { try {
boolean flag = accountUserInfoService.saveOrUpdate(accountUserInfo); boolean flag = accountUserInfoService.saveOrUpdate(accountUserInfo);
if (flag) { if (flag) {
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
log.info("MQ处理活动开始:accountUserInfo:{}", JSONUtil.toJsonStr(accountUserInfo));
if(accountUserInfo.getStore_id()!=null){ if(accountUserInfo.getStore_id()!=null){
AccountUserInfo updateAccountUserInfo= accountUserInfoService.get(accountUserInfo.getUser_id()); AccountUserInfo updateAccountUserInfo= accountUserInfoMapper.selectById(accountUserInfo.getUser_id());
// AccountUserInfo updateAccountUserInfo= accountUserInfoService.get(accountUserInfo.getUser_id());
updateAccountUserInfo.setStore_name(accountUserInfo.getStore_name()); updateAccountUserInfo.setStore_name(accountUserInfo.getStore_name());
shopStoreMemberService.dealStoreMember(updateAccountUserInfo); //shopStoreMemberService.dealStoreMember(updateAccountUserInfo);
this.dealStoreMember(updateAccountUserInfo);
} }
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} else { } else {
log.error("消息消费失败执行dealUserInfo异常当前用户编号{}", accountUserInfo.getUser_id()); log.error("消息消费失败执行dealUserInfo异常当前用户编号{}", accountUserInfo.getUser_id());
channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
@ -59,4 +85,58 @@ public class DealUserInfoListener {
Thread.sleep(1000); Thread.sleep(1000);
} }
} }
private void dealStoreMember(AccountUserInfo accountUserInfo){
log.info("dealStoreMember-MQ处理店铺会员开始:accountUserInfo:{}", JSONUtil.toJsonStr(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= shopStoreMemberMapper.selectList(params);
if(shopStoreMembers.isEmpty()){
QueryWrapper<AccountUserBindConnect> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("bind_id", "+86"+accountUserInfo.getUser_mobile());
queryWrapper.eq("bind_type", BindCode.MOBILE)
.eq("user_type", 0)
.eq("user_id", user_id)
.orderByAsc("bind_time");
List<AccountUserBindConnect> accountUserBindConnectList = accountUserBindConnectMapper.selectList(queryWrapper);
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());
shopStoreMemberMapper.insert(shopStoreMember);
ShopStoreMemberLevel shopStoreMemberLevel = getShopStoreMemberLevel(store_id, shopStoreMember);
shopStoreMemberLevel.setUserId(user_id);
shopStoreMemberLevelMapper.insert(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;
}
} }

View File

@ -1,23 +1,11 @@
package com.suisung.mall.account.service; 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.baomidou.mybatisplus.extension.service.IService;
import com.suisung.mall.common.modules.account.AccountUserInfo; import com.suisung.mall.common.modules.account.AccountUserInfo;
import com.suisung.mall.common.modules.store.ShopStoreMember; import com.suisung.mall.common.modules.store.ShopStoreMember;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface ShopStoreMemberService extends IService<ShopStoreMember> { 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); void dealStoreMember(AccountUserInfo accountUserInfo);
} }

View File

@ -218,6 +218,7 @@ public class AccountUserInfoServiceImpl extends BaseServiceImpl<AccountUserInfoM
throw new ApiException(ResultCode.FAILED); throw new ApiException(ResultCode.FAILED);
} }
} }
logger.info("店铺消费开始level_row{};user_store_spend_total{}", level_row,user_store_spend_total);
if(level_row != null && user_store_spend_total!=null && store_id!=null){//店铺消费 if(level_row != null && user_store_spend_total!=null && store_id!=null){//店铺消费
//查找会员再更新店铺会员等级 todo //查找会员再更新店铺会员等级 todo
ShopStoreMemberLevel params = new ShopStoreMemberLevel(); ShopStoreMemberLevel params = new ShopStoreMemberLevel();

View File

@ -45,54 +45,6 @@ public class ShopStoreMemberServiceImpl extends BaseServiceImpl<ShopStoreMemberM
@Autowired @Autowired
private AccountUserBindConnectService accountUserBindConnectService; 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 @Override
public void dealStoreMember(AccountUserInfo accountUserInfo){ public void dealStoreMember(AccountUserInfo accountUserInfo){
@ -148,18 +100,4 @@ public class ShopStoreMemberServiceImpl extends BaseServiceImpl<ShopStoreMemberM
} }
// 设置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("文件名编码失败");
}
}
} }