[fix]绑定推广人增加互关逻辑
This commit is contained in:
parent
8795b1fb37
commit
1c2e84eaf1
@ -1,11 +1,13 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.member.business.IMemberBusiness;
|
||||
import com.wzj.soopin.member.convert.AccountBillConvert;
|
||||
import com.wzj.soopin.member.convert.MemberAccountConvert;
|
||||
import com.wzj.soopin.member.convert.MemberBankConvert;
|
||||
import com.wzj.soopin.member.convert.MemberConvert;
|
||||
import com.wzj.soopin.member.domain.bo.AccountBillBO;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBO;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBankBO;
|
||||
import com.wzj.soopin.member.domain.po.AccountBill;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
@ -50,6 +52,7 @@ import java.time.LocalDateTime;
|
||||
@Tag(name = "会员管理")
|
||||
@RequiredArgsConstructor
|
||||
public class AppMemberController {
|
||||
private final IMemberBusiness memberBusiness;
|
||||
|
||||
private final IMemberService service;
|
||||
|
||||
@ -133,30 +136,11 @@ public class AppMemberController {
|
||||
}
|
||||
|
||||
|
||||
@Tag(name = "绑定微信")
|
||||
@Tag(name = "绑定推广人")
|
||||
@PostMapping("/bind/spread")
|
||||
public R<AuthToken> bindSpread(@RequestBody SocialLoginBody loginBody) {
|
||||
public R<AuthToken> bindSpread(@RequestBody MemberBO bo) {
|
||||
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
|
||||
//检查推广人
|
||||
Long memberId = loginUser.getUserId();
|
||||
//检查推广人是否绑定
|
||||
Member member = service.getById(loginBody);
|
||||
if (member.getSpreadUid() != null) {
|
||||
throw new ServiceException("用户已绑定推广人");
|
||||
}
|
||||
//检查推广人是否存在
|
||||
Member spreadMember = service.getById(loginBody.getSocialCode());
|
||||
if (spreadMember == null) {
|
||||
throw new ServiceException("推广人不存在");
|
||||
}
|
||||
member = Member.builder().id(memberId).spreadUid(spreadMember.getId()).spreadTime(LocalDateTime.now()).build();
|
||||
service.updateById(member);
|
||||
memberBusiness.bindSpread(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
package com.wzj.soopin.member.business;
|
||||
|
||||
import com.wzj.soopin.member.domain.bo.MemberBO;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.member.domain.vo.MemberVO;
|
||||
import org.dromara.common.web.core.IBusiness;
|
||||
|
||||
public interface IMemberBusiness extends IBusiness<MemberVO, MemberBO> {
|
||||
void bindSpread(MemberBO memberBO);
|
||||
void bindWechat(MemberBO memberBO);
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
package com.wzj.soopin.member.business.impl;
|
||||
|
||||
import com.wzj.soopin.member.business.IMemberBusiness;
|
||||
import com.wzj.soopin.member.convert.MemberConvert;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBO;
|
||||
import com.wzj.soopin.member.domain.po.Fans;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.member.domain.vo.MemberVO;
|
||||
import com.wzj.soopin.member.service.IFansService;
|
||||
import com.wzj.soopin.member.service.IMemberService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.web.core.BusinessImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
@Slf4j
|
||||
public class MemberBusinessImpl extends BusinessImpl<IMemberService, MemberConvert, MemberVO, MemberBO, Member>
|
||||
implements IMemberBusiness {
|
||||
|
||||
private final IFansService fansService;
|
||||
@Override
|
||||
public void bindSpread(MemberBO memberBO) {
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
|
||||
//检查推广人
|
||||
Long memberId = loginUser.getUserId();
|
||||
//检查推广人是否绑定
|
||||
Member member = service.getById(loginUser.getUserId());
|
||||
if (member.getSpreadUid() != null) {
|
||||
throw new ServiceException("用户已绑定推广人");
|
||||
}
|
||||
//检查推广人是否存在
|
||||
Member spreadMember = service.getById(memberBO.getId());
|
||||
if (spreadMember == null) {
|
||||
throw new ServiceException("推广人不存在");
|
||||
}
|
||||
//更新用户的推广人
|
||||
member = Member.builder().id(memberId).spreadUid(spreadMember.getId()).spreadTime(LocalDateTime.now()).build();
|
||||
service.updateById(member);
|
||||
|
||||
//两人互加好友
|
||||
|
||||
Fans fans=new Fans();
|
||||
fans.setVloggerId(memberId);
|
||||
fans.setFanId(spreadMember.getId());
|
||||
fans.setFriendFlag(1);
|
||||
fans.setBothFriend(1);
|
||||
fansService.save(fans);
|
||||
log.info("用户{}关注了用户{}",memberId,spreadMember.getId());
|
||||
|
||||
//被关注人也关注用户
|
||||
Fans fans2=new Fans();
|
||||
fans2.setVloggerId(spreadMember.getId());
|
||||
fans2.setFanId(memberId);
|
||||
fans2.setFriendFlag(1);
|
||||
fans2.setBothFriend(1);
|
||||
fansService.save(fans2);
|
||||
log.info("用户{}关注了用户{}",spreadMember.getId(),memberId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindWechat(MemberBO memberBO) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -234,6 +234,8 @@ public class MemberController extends BaseController {
|
||||
|
||||
@Tag(name = "获取登录会员的信息")
|
||||
@GetMapping(value = "/login/info")
|
||||
@Tag(name ="获取登录会员的信息")
|
||||
@GetMapping(value = "login/info")
|
||||
public R<MemberVO> getLoinInfo() {
|
||||
return R.ok(service.getLoginMemberInfo());
|
||||
}
|
||||
@ -241,6 +243,8 @@ public class MemberController extends BaseController {
|
||||
|
||||
@Tag(name = "同步会员的信息")
|
||||
@GetMapping(value = "/sync")
|
||||
@Tag(name ="同步会员的信息")
|
||||
@GetMapping(value = "sync")
|
||||
public R<MemberVO> syncInfo() {
|
||||
service.syncInfo();
|
||||
return R.ok();
|
||||
|
@ -1,8 +1,11 @@
|
||||
package com.wzj.soopin.member.service;
|
||||
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**km//,
|
||||
* 腾讯IM服务
|
||||
* @author wqx
|
||||
@ -10,4 +13,5 @@ import com.wzj.soopin.member.domain.po.Member;
|
||||
public interface ITencentIMServicce {
|
||||
String createTencentIMAccount(Member member);
|
||||
void updateMemberRole(Member member);
|
||||
JSONArray checkTencentIMAccount(List<String> ids);
|
||||
}
|
||||
|
@ -48,6 +48,9 @@ import java.time.LocalDateTime;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 会员信息Service业务层处理
|
||||
@ -71,6 +74,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
||||
private final MemberMapper memberMapper;
|
||||
|
||||
private final IFansService fansService;
|
||||
private final TencentIMServiceImpl tencentIMServiceImpl;
|
||||
|
||||
private final SysUserMapper sysUserMapper;
|
||||
|
||||
@ -323,10 +327,25 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
||||
|
||||
@Override
|
||||
public void syncInfo() {
|
||||
|
||||
//分页拉取用户信息
|
||||
|
||||
|
||||
|
||||
Page<Member> memberPage=memberMapper.selectPage(new Page<>(1,100),null);
|
||||
List<Member> records = memberPage.getRecords();
|
||||
Map<Long,Member> memberMap = new HashMap<>(records.size());
|
||||
records.stream().forEach(member -> memberMap.put(member.getId(),member));
|
||||
List<String> ids=records.stream().map(member -> member.getId()+"").collect(Collectors.toList());
|
||||
JSONArray jsonArray=tencentIMServiceImpl.checkTencentIMAccount(ids);
|
||||
if(jsonArray!=null){
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONObject o=jsonArray.getJSONObject(i);
|
||||
String userID=o.getStr("UserID");
|
||||
String accountStatus=o.getStr("AccountStatus");
|
||||
if(accountStatus.equals("NotImported")){
|
||||
//不存在,创建
|
||||
tencentIMServiceImpl.createTencentIMAccount(memberMap.get(Long.valueOf(userID)));
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -12,8 +12,11 @@ import org.dromara.common.core.exception.ServiceException;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.bouncycastle.asn1.x500.style.RFC4519Style.member;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@ -91,6 +94,77 @@ public class TencentIMServiceImpl implements ITencentIMServicce {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建腾讯云IM账号
|
||||
*/
|
||||
@Override
|
||||
public JSONArray checkTencentIMAccount(List<String> ids) {
|
||||
|
||||
try {
|
||||
|
||||
//这里生成一个管理员签名,
|
||||
String adminSig=generateUserSig(adminAccount);
|
||||
String random = String.valueOf(System.currentTimeMillis());
|
||||
|
||||
|
||||
// 构建请求体
|
||||
JSONArray jsonArray=new JSONArray();
|
||||
ids.stream().forEach(id->{
|
||||
JSONObject o=new JSONObject();
|
||||
o.put("UserID",id);
|
||||
jsonArray.add(o);
|
||||
});
|
||||
JSONObject requestBody = new JSONObject();
|
||||
requestBody.put("CheckItem", jsonArray);
|
||||
|
||||
// 构建URL - 使用管理员账号(administrator)而不是用户ID来生成签名
|
||||
String urlString = String.format(
|
||||
"https://console.tim.qq.com/v4/im_open_login_svc/account_check" +
|
||||
"?sdkappid=%s&identifier=%s&usersig=%s&random=%s&contenttype=json",
|
||||
GenerateTestUserSig.SDKAPPID,
|
||||
adminAccount, // 使用管理员账号
|
||||
adminSig, // 使用管理员的UserSig
|
||||
random);
|
||||
// return userSig;
|
||||
|
||||
// 创建HTTP客户端
|
||||
OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(15, TimeUnit.SECONDS)
|
||||
.readTimeout(15, TimeUnit.SECONDS)
|
||||
.writeTimeout(15, TimeUnit.SECONDS)
|
||||
.build();
|
||||
|
||||
// 发送请求
|
||||
Request request = new Request.Builder()
|
||||
.url(urlString)
|
||||
.post(RequestBody.create(MediaType.get("application/json; charset=utf-8"),
|
||||
requestBody.toString()))
|
||||
.build();
|
||||
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
if (!response.isSuccessful()) {
|
||||
log.error("查询账号失败: {}, 状态码: {}", ids, response.code());
|
||||
throw new ServiceException(String.format("查询账号异常: %s", ids));
|
||||
}
|
||||
|
||||
String responseBody = response.body().string();
|
||||
JSONObject jsonResponse = new JSONObject(responseBody);
|
||||
int errorCode = jsonResponse.getInt("ErrorCode");
|
||||
|
||||
if (errorCode == 0) {
|
||||
log.info("查询账号成功: {}, 结果: {}", ids, jsonResponse.get("ResultItem"));
|
||||
JSONArray jsonArray1=jsonResponse.getJSONArray("ResultItem");
|
||||
return jsonArray1;
|
||||
} else {
|
||||
log.error("查询账号失败: {}, 错误码: {}, 错误信息: {}",
|
||||
ids, errorCode, jsonResponse.get("ErrorInfo"));
|
||||
throw new ServiceException(String.format("查询账号异常: %s", ids));
|
||||
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(String.format("查询账号异常"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户角色
|
||||
|
@ -169,10 +169,20 @@ http {
|
||||
# HTTPS server
|
||||
#
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name _;
|
||||
ssl_certificate /etc/nginx/cert/wzjnetcn/wzj.net.cn.pem;
|
||||
ssl_certificate_key /etc/nginx/cert/wzjnetcn/wzj.net.cn.key;
|
||||
listen 443 ssl;
|
||||
server_name wuzhongjie.com.cn www.wuzhongjie.com.cn;
|
||||
|
||||
ssl_certificate /etc/nginx/cert/wuzhongjie.com.cn_bundle.pem;
|
||||
ssl_certificate_key /etc/nginx/cert/wuzhongjie.com.cn.key;
|
||||
ssl_session_timeout 5m;
|
||||
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
|
||||
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
|
||||
ssl_prefer_server_ciphers on;
|
||||
# 设置 gzip 压缩
|
||||
gzip on;
|
||||
#gzip_static on;
|
||||
gzip_types text/plain text/css application/javascript application/json;
|
||||
gzip_min_length 256;
|
||||
location / {
|
||||
proxy_pass http://tj-wzjkjww.icpkuaiban.net/;
|
||||
proxy_set_header Host tj-wzjkjww.icpkuaiban.net;
|
||||
@ -203,7 +213,7 @@ http {
|
||||
}
|
||||
# app分享-接口代理
|
||||
location /prod-api/ {
|
||||
proxy_pass http://43.143.227:8880/;
|
||||
proxy_pass http://43.143.227.203:8880/;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
@ -214,37 +224,24 @@ http {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
}
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name www.wzj.net.cn wzj.net.cn;
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name _;
|
||||
ssl_certificate /etc/nginx/cert/wzjnetcn/wzj.net.cn.pem;
|
||||
ssl_certificate_key /etc/nginx/cert/wzjnetcn/wzj.net.cn.key;
|
||||
location / {
|
||||
proxy_pass http://tj-wzjkjww.icpkuaiban.net/;
|
||||
proxy_set_header Host tj-wzjkjww.icpkuaiban.net;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
ssl_certificate /etc/nginx/cert/wzjnetcn/wzj.net.cn.pem;
|
||||
ssl_certificate_key /etc/nginx/cert/wzjnetcn/wzj.net.cn.key;
|
||||
|
||||
location / {
|
||||
proxy_pass http://tj-wzjkjww.icpkuaiban.net/;
|
||||
proxy_set_header Host tj-wzjkjww.icpkuaiban.net;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name www.wzj.net.cn wzj.net.cn;
|
||||
|
||||
ssl_certificate /etc/nginx/cert/wzjnetcn/wzj.net.cn.pem;
|
||||
ssl_certificate_key /etc/nginx/cert/wzjnetcn/wzj.net.cn.key;
|
||||
|
||||
location / {
|
||||
proxy_pass http://tj-wzjkjww.icpkuaiban.net/;
|
||||
proxy_set_header Host tj-wzjkjww.icpkuaiban.net;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user