This commit is contained in:
dzc committed 2025-12-02 11:47:48 +08:00
1 parent dc6c24eb48
commit 81c7b2e8d9
43 files changed
+412 -102

No files matched your search

@@ -86,12 +86,26 @@
<artifactId>yudao-spring-boot-starter-biz-ip</artifactId> <artifactId>yudao-spring-boot-starter-biz-ip</artifactId>
</dependency> </dependency>
<!-- 文字、图片风险认证 -->
<dependency> <dependency>
<groupId>com.aliyun</groupId> <groupId>com.aliyun</groupId>
<artifactId>green20220302</artifactId> <artifactId>green20220302</artifactId>
<version>3.0.1</version> <version>3.0.1</version>
</dependency> </dependency>
<!-- 人脸识别 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>cloudauth20190307</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>credentials-java</artifactId>
<version>LATEST</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
@@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.member.client.service; package cn.iocoder.yudao.module.member.client.service;
import cn.iocoder.yudao.module.member.client.vo.chat.ChatTableRespVO; import cn.iocoder.yudao.module.member.client.vo.chat.ChatTableRespVO;
import cn.iocoder.yudao.module.member.client.vo.chat.friend.ChatAddFriendReqVo; import cn.iocoder.yudao.module.member.client.vo.chat.friend.ChatAddFriendReqVO;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.*; import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.*;
import cn.iocoder.yudao.module.member.client.vo.chat.sensitive.*; import cn.iocoder.yudao.module.member.client.vo.chat.sensitive.*;
import cn.iocoder.yudao.module.member.client.vo.chat.user.*; import cn.iocoder.yudao.module.member.client.vo.chat.user.*;
@@ -17,22 +17,22 @@ public interface ChatApi {
/** /**
* 聊天用户登录 * 聊天用户登录
*/ */
ChatLoginRespVo login(@Valid ChatLoginReqVO dto); ChatLoginRespVO login(@Valid ChatLoginReqVO dto);
/** /**
* 创建或者更新聊天用户 * 创建或者更新聊天用户
*/ */
boolean createOrUpdate(@Valid ChatCreateOrUpdateUserReqVo dto); boolean createOrUpdate(@Valid ChatCreateOrUpdateUserReqVO dto);
/** /**
* 根据userId查询用户详情 * 根据userId查询用户详情
*/ */
ChatGetUserByUserIdRespVo getUserByUserId(@Valid ChatGetUserByUserIdReqVo dto); ChatGetUserByUserIdRespVO getUserByUserId(@Valid ChatGetUserByUserIdReqVO dto);
/** /**
* 添加好友 * 添加好友
*/ */
boolean addFriend(@Valid ChatAddFriendReqVo dto); boolean addFriend(@Valid ChatAddFriendReqVO dto);
/* *************************************** end 用户相关 end *************************************** */ /* *************************************** end 用户相关 end *************************************** */
@@ -41,17 +41,17 @@ public interface ChatApi {
/** /**
* 敏感词分页 * 敏感词分页
*/ */
ChatTableRespVO<ChatSensitiveRespVO> sensitivePage(ChatSensitiveReqVo dto); ChatTableRespVO<ChatSensitiveRespVO> sensitivePage(ChatSensitiveReqVO dto);
/** /**
* 敏感词详情 * 敏感词详情
*/ */
ChatSensitiveRespVO sensitiveGetInfo(ChatSensitiveInfoReqVo dto); ChatSensitiveRespVO sensitiveGetInfo(ChatSensitiveInfoReqVO dto);
/** /**
* 创建或者更新敏感词 * 创建或者更新敏感词
*/ */
boolean sensitiveCreateOrUpdate(ChatSensitiveSaveReqVo dto); boolean sensitiveCreateOrUpdate(ChatSensitiveSaveReqVO dto);
/** /**
* 删除敏感词 * 删除敏感词
@@ -85,7 +85,7 @@ public interface ChatApi {
/** /**
* 私聊消息发送消息的统计 * 私聊消息发送消息的统计
*/ */
List<ChatPrivateTotalMessageTotalResVo> privateTotal(ChatPrivateTotalMessageTotalReqVo dto); List<ChatPrivateTotalMessageTotalResVO> privateTotal(ChatPrivateTotalMessageTotalReqVO dto);
/* *************************************** end 私聊 end *************************************** */ /* *************************************** end 私聊 end *************************************** */
@@ -5,9 +5,9 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.client.tool.ChatApiTool; import cn.iocoder.yudao.module.member.client.tool.ChatApiTool;
import cn.iocoder.yudao.module.member.client.vo.chat.ChatBaseRespVo; import cn.iocoder.yudao.module.member.client.vo.chat.ChatBaseRespVO;
import cn.iocoder.yudao.module.member.client.vo.chat.ChatTableRespVO; import cn.iocoder.yudao.module.member.client.vo.chat.ChatTableRespVO;
import cn.iocoder.yudao.module.member.client.vo.chat.friend.ChatAddFriendReqVo; import cn.iocoder.yudao.module.member.client.vo.chat.friend.ChatAddFriendReqVO;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.*; import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.*;
import cn.iocoder.yudao.module.member.client.vo.chat.sensitive.*; import cn.iocoder.yudao.module.member.client.vo.chat.sensitive.*;
import cn.iocoder.yudao.module.member.client.vo.chat.user.*; import cn.iocoder.yudao.module.member.client.vo.chat.user.*;
@@ -33,7 +33,7 @@ public class ChatApiImpl implements ChatApi {
* 聊天用户登录 * 聊天用户登录
*/ */
@Override @Override
public ChatLoginRespVo login(ChatLoginReqVO dto) { public ChatLoginRespVO login(ChatLoginReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.USER_LOGIN); ChatApiTool.API api = setApiConfig(ChatApiTool.USER_LOGIN);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -43,12 +43,12 @@ public class ChatApiImpl implements ChatApi {
log.error("聊天用户登录,res为空"); log.error("聊天用户登录,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("聊天用户登录,返回错误"); log.error("聊天用户登录,返回错误");
return null; return null;
} }
ChatLoginRespVo vo = JSONUtil.toBean(baseRes.getData(), ChatLoginRespVo.class); ChatLoginRespVO vo = JSONUtil.toBean(baseRes.getData(), ChatLoginRespVO.class);
if (ObjectUtil.isEmpty(vo)) { if (ObjectUtil.isEmpty(vo)) {
log.error("聊天用户登录,返回json解析错误"); log.error("聊天用户登录,返回json解析错误");
return null; return null;
@@ -65,7 +65,7 @@ public class ChatApiImpl implements ChatApi {
* 创建或者更新聊天用户 * 创建或者更新聊天用户
*/ */
@Override @Override
public boolean createOrUpdate(ChatCreateOrUpdateUserReqVo dto) { public boolean createOrUpdate(ChatCreateOrUpdateUserReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.USER_SAVE_OR_UPDATE); ChatApiTool.API api = setApiConfig(ChatApiTool.USER_SAVE_OR_UPDATE);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -75,7 +75,7 @@ public class ChatApiImpl implements ChatApi {
log.error("创建或者更新聊天用户,res为空"); log.error("创建或者更新聊天用户,res为空");
return false; return false;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("创建或者更新聊天用户,返回错误"); log.error("创建或者更新聊天用户,返回错误");
return false; return false;
@@ -92,7 +92,7 @@ public class ChatApiImpl implements ChatApi {
* 根据userId查询用户详情 * 根据userId查询用户详情
*/ */
@Override @Override
public ChatGetUserByUserIdRespVo getUserByUserId(ChatGetUserByUserIdReqVo dto) { public ChatGetUserByUserIdRespVO getUserByUserId(ChatGetUserByUserIdReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.USER_GET); ChatApiTool.API api = setApiConfig(ChatApiTool.USER_GET);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -102,12 +102,12 @@ public class ChatApiImpl implements ChatApi {
log.error("根据userId查询用户详情,res为空"); log.error("根据userId查询用户详情,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("根据userId查询用户详情,返回错误"); log.error("根据userId查询用户详情,返回错误");
return null; return null;
} }
ChatGetUserByUserIdRespVo vo = JSONUtil.toBean(baseRes.getData(), ChatGetUserByUserIdRespVo.class); ChatGetUserByUserIdRespVO vo = JSONUtil.toBean(baseRes.getData(), ChatGetUserByUserIdRespVO.class);
if (ObjectUtil.isEmpty(vo)) { if (ObjectUtil.isEmpty(vo)) {
log.error("根据userId查询用户详情,返回json解析错误"); log.error("根据userId查询用户详情,返回json解析错误");
return null; return null;
@@ -124,7 +124,7 @@ public class ChatApiImpl implements ChatApi {
* 添加好友 * 添加好友
*/ */
@Override @Override
public boolean addFriend(ChatAddFriendReqVo dto) { public boolean addFriend(ChatAddFriendReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.FRIEND_ADD); ChatApiTool.API api = setApiConfig(ChatApiTool.FRIEND_ADD);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -134,7 +134,7 @@ public class ChatApiImpl implements ChatApi {
log.error("添加好友,res为空"); log.error("添加好友,res为空");
return false; return false;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("添加好友,返回错误"); log.error("添加好友,返回错误");
return false; return false;
@@ -155,7 +155,7 @@ public class ChatApiImpl implements ChatApi {
* 敏感词分页 * 敏感词分页
*/ */
@Override @Override
public ChatTableRespVO<ChatSensitiveRespVO> sensitivePage(ChatSensitiveReqVo dto) { public ChatTableRespVO<ChatSensitiveRespVO> sensitivePage(ChatSensitiveReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_PAGE); ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_PAGE);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -165,7 +165,7 @@ public class ChatApiImpl implements ChatApi {
log.error("敏感词分页,res为空"); log.error("敏感词分页,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("敏感词分页,返回错误"); log.error("敏感词分页,返回错误");
return null; return null;
@@ -192,7 +192,7 @@ public class ChatApiImpl implements ChatApi {
* 敏感词详情 * 敏感词详情
*/ */
@Override @Override
public ChatSensitiveRespVO sensitiveGetInfo(ChatSensitiveInfoReqVo dto) { public ChatSensitiveRespVO sensitiveGetInfo(ChatSensitiveInfoReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_INFO); ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_INFO);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -202,7 +202,7 @@ public class ChatApiImpl implements ChatApi {
log.error("敏感词详情,res为空"); log.error("敏感词详情,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("敏感词详情,返回错误"); log.error("敏感词详情,返回错误");
return null; return null;
@@ -224,7 +224,7 @@ public class ChatApiImpl implements ChatApi {
* 创建或者更新敏感词 * 创建或者更新敏感词
*/ */
@Override @Override
public boolean sensitiveCreateOrUpdate(ChatSensitiveSaveReqVo dto) { public boolean sensitiveCreateOrUpdate(ChatSensitiveSaveReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_CREATE_OR_UPDATE); ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_CREATE_OR_UPDATE);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -234,7 +234,7 @@ public class ChatApiImpl implements ChatApi {
log.error("创建或者更新敏感词,res为空"); log.error("创建或者更新敏感词,res为空");
return false; return false;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("创建或者更新敏感词,返回错误"); log.error("创建或者更新敏感词,返回错误");
return false; return false;
@@ -265,7 +265,7 @@ public class ChatApiImpl implements ChatApi {
log.error("删除敏感词,res为空"); log.error("删除敏感词,res为空");
return false; return false;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("删除敏感词,返回错误"); log.error("删除敏感词,返回错误");
return false; return false;
@@ -301,7 +301,7 @@ public class ChatApiImpl implements ChatApi {
log.error("发私聊送消息,res为空"); log.error("发私聊送消息,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("发私聊送消息,返回错误"); log.error("发私聊送消息,返回错误");
return null; return null;
@@ -333,7 +333,7 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息分页,res为空"); log.error("私聊消息分页,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息分页,返回错误"); log.error("私聊消息分页,返回错误");
return null; return null;
@@ -370,7 +370,7 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息详情,res为空"); log.error("私聊消息详情,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息详情,返回错误"); log.error("私聊消息详情,返回错误");
return null; return null;
@@ -402,7 +402,7 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息统计,res为空"); log.error("私聊消息统计,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息统计,返回错误"); log.error("私聊消息统计,返回错误");
return null; return null;
@@ -424,7 +424,7 @@ public class ChatApiImpl implements ChatApi {
* 私聊消息发送消息的统计 * 私聊消息发送消息的统计
*/ */
@Override @Override
public List<ChatPrivateTotalMessageTotalResVo> privateTotal(ChatPrivateTotalMessageTotalReqVo dto) { public List<ChatPrivateTotalMessageTotalResVO> privateTotal(ChatPrivateTotalMessageTotalReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.PRIVATE_MSG_TOTAL); ChatApiTool.API api = setApiConfig(ChatApiTool.PRIVATE_MSG_TOTAL);
try { try {
String body = JSONUtil.toJsonStr(dto); String body = JSONUtil.toJsonStr(dto);
@@ -434,12 +434,12 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息发送消息的统计,res为空"); log.error("私聊消息发送消息的统计,res为空");
return null; return null;
} }
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class); ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息发送消息的统计,返回错误"); log.error("私聊消息发送消息的统计,返回错误");
return null; return null;
} }
List<ChatPrivateTotalMessageTotalResVo> vo = JSONUtil.toList(baseRes.getData(), ChatPrivateTotalMessageTotalResVo.class); List<ChatPrivateTotalMessageTotalResVO> vo = JSONUtil.toList(baseRes.getData(), ChatPrivateTotalMessageTotalResVO.class);
if (ObjectUtil.isEmpty(vo)) { if (ObjectUtil.isEmpty(vo)) {
log.error("私聊消息发送消息的统计,返回json解析错误"); log.error("私聊消息发送消息的统计,返回json解析错误");
return null; return null;
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.member.service.thirdauth; package cn.iocoder.yudao.module.member.client.service;
import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo; import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo;
import com.aliyun.green20220302.models.ImageBatchModerationResponseBody;
/** /**
* @author liusiyang_dxm * @author liusiyang_dxm
@@ -1,8 +1,9 @@
package cn.iocoder.yudao.module.member.service.thirdauth; package cn.iocoder.yudao.module.member.client.service;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo; import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo;
import cn.iocoder.yudao.module.member.framework.web.config.ThirdAlConfig;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.aliyun.green20220302.Client; import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.*; import com.aliyun.green20220302.models.*;
@@ -12,6 +13,7 @@ import com.aliyun.teautil.models.RuntimeOptions;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.*; import java.util.*;
@@ -23,6 +25,9 @@ import java.util.*;
@Slf4j @Slf4j
public class ThirdAuthServiceImpl implements ThirdAuthService { public class ThirdAuthServiceImpl implements ThirdAuthService {
@Resource
private ThirdAlConfig thirdAlConfig;
private volatile Client clientInstance; private volatile Client clientInstance;
private final List<String> successRiskLevelList = new ArrayList<String>() {{ private final List<String> successRiskLevelList = new ArrayList<String>() {{
@@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.member.client.service;
import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFaceVerifyReqVO;
import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFaceVerifyResVO;
public interface ThirdFaceVerifyService {
/**
* 人脸识别
*/
ThirdFaceVerifyResVO faceVerify(ThirdFaceVerifyReqVO dto);
/**
* 人脸识别回调
*/
String callback(String code);
}
@@ -0,0 +1,109 @@
package cn.iocoder.yudao.module.member.client.service;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFaceVerifyReqVO;
import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFaceVerifyResVO;
import cn.iocoder.yudao.module.member.framework.web.config.ThirdAlConfig;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponse;
import com.aliyun.cloudauth20190307.Client;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponseBody;
import com.aliyun.teaopenapi.models.Config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.aliyun.teautil.models.RuntimeOptions;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;
/**
* 第三方人脸识别认证
*/
@Service
@Valid
@Slf4j
public class ThirdFaceVerifyServiceImpl implements ThirdFaceVerifyService {
@Resource
private ThirdAlConfig thirdAlConfig;
private static final com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
/**
* 人脸识别
*/
@Override
public ThirdFaceVerifyResVO faceVerify(ThirdFaceVerifyReqVO dto) {
InitFaceVerifyRequest request = new InitFaceVerifyRequest();
request.setSceneId(1000016045L);
request.setProductCode("PV_FV");
request.setModel("MOVE_ACTION");
// 参数
request.setOuterOrderNo(dto.getCode());
request.setUserId(String.valueOf(dto.getFaceVerifyUserId()));
request.setMetaInfo(dto.getMetaInfoJson());
request.setFaceContrastPictureUrl(dto.getFaceVerifyUrl());
// 配置
request.setCallbackToken(thirdAlConfig.getFaceVerifyCallbackToken());
request.setCallbackUrl(thirdAlConfig.getFaceVerifyCallbackUrl());
InitFaceVerifyResponse response = initFaceVerifyAutoRoute(request);
if (ObjectUtil.isEmpty(response)) {
log.error("|人脸识别|,第三方接口无响应");
return null;
}
InitFaceVerifyResponseBody body = response.getBody();
InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject resultObject = body.getResultObject();
ThirdFaceVerifyResVO result = new ThirdFaceVerifyResVO();
result.setCertifyId(resultObject.getCertifyId());
result.setCertifyUrl(resultObject.getCertifyUrl());
return result;
}
/**
* 人脸识别回调
*/
@Override
public String callback(String code) {
return "";
}
private InitFaceVerifyResponse initFaceVerifyAutoRoute(InitFaceVerifyRequest request) {
List<String> endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com");
InitFaceVerifyResponse lastResponse = null;
for (String endpoint : endpoints) {
try {
lastResponse = initFaceVerify(endpoint, request);
if (ObjectUtil.isEmpty(lastResponse)) return null;
if (ObjectUtil.equals(lastResponse.getStatusCode(), 500)) {
continue;
}
InitFaceVerifyResponseBody body = lastResponse.getBody();
if (ObjectUtil.equals(body.getCode(), "500")) {
continue;
}
return lastResponse;
} catch (Exception e) {
e.printStackTrace();
log.error("|人脸识别|,意外的错误:{}", e.getMessage());
}
}
return lastResponse;
}
private InitFaceVerifyResponse initFaceVerify(String endpoint, InitFaceVerifyRequest request) throws Exception {
Config config = new Config();
config.setCredential(credentialClient);
config.setEndpoint(endpoint);
config.setAccessKeyId(thirdAlConfig.getAccessKeyId());
config.setAccessKeySecret(thirdAlConfig.getAccessKeySecret());
Client client = new Client(config);
RuntimeOptions runtime = new RuntimeOptions();
runtime.readTimeout = 10_000;
runtime.connectTimeout = 10_000;
return client.initFaceVerifyWithOptions(request, runtime);
}
}
@@ -1,14 +1,14 @@
package cn.iocoder.yudao.module.member.client.service; package cn.iocoder.yudao.module.member.client.service;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVO;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVO;
public interface TxMapApi { public interface TxMapApi {
/** /**
* 地址逆向解析 * 地址逆向解析
*/ */
TxMapGeocoderRespVo geocoder(TxMapGeocoderReqVo dto); TxMapGeocoderRespVO geocoder(TxMapGeocoderReqVO dto);
} }
@@ -7,9 +7,9 @@ import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.client.tool.TxMapApiTool; import cn.iocoder.yudao.module.member.client.tool.TxMapApiTool;
import cn.iocoder.yudao.module.member.client.vo.txmap.TxMapRespVo; import cn.iocoder.yudao.module.member.client.vo.txmap.TxMapRespVO;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVO;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVO;
import cn.iocoder.yudao.module.member.framework.web.config.TxMapProperties; import cn.iocoder.yudao.module.member.framework.web.config.TxMapProperties;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
@@ -31,7 +31,7 @@ public class TxMapApiImpl implements TxMapApi {
* 地址逆向解析 * 地址逆向解析
*/ */
@Override @Override
public TxMapGeocoderRespVo geocoder(TxMapGeocoderReqVo dto) { public TxMapGeocoderRespVO geocoder(TxMapGeocoderReqVO dto) {
dto.setKey(txMapProperties.getAppKey()); dto.setKey(txMapProperties.getAppKey());
TxMapApiTool.API api = setApiConfig(TxMapApiTool.GEOCODER); TxMapApiTool.API api = setApiConfig(TxMapApiTool.GEOCODER);
try { try {
@@ -41,7 +41,7 @@ public class TxMapApiImpl implements TxMapApi {
log.error("地址逆向解析,res为空"); log.error("地址逆向解析,res为空");
return null; return null;
} }
TxMapRespVo baseRes = JSONUtil.toBean(res, TxMapRespVo.class); TxMapRespVO baseRes = JSONUtil.toBean(res, TxMapRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) { if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("地址逆向解析,返回错误"); log.error("地址逆向解析,返回错误");
return null; return null;
@@ -50,7 +50,7 @@ public class TxMapApiImpl implements TxMapApi {
log.error("地址逆向解析,res.result为空"); log.error("地址逆向解析,res.result为空");
return null; return null;
} }
return JSONUtil.toBean(baseRes.getResult(), TxMapGeocoderRespVo.class); return JSONUtil.toBean(baseRes.getResult(), TxMapGeocoderRespVO.class);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("地址逆向解析,意外的错误", e); log.error("地址逆向解析,意外的错误", e);
@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjUtil;
import lombok.Data; import lombok.Data;
@Data @Data
public class ChatBaseRespVo { public class ChatBaseRespVO {
private Integer code; private Integer code;
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
@Data @Data
@Schema(description = "chat添加好友req") @Schema(description = "chat添加好友req")
public class ChatAddFriendReqVo { public class ChatAddFriendReqVO {
@NotNull(message = "用户id不存在") @NotNull(message = "用户id不存在")
@Schema(description = "用户id") @Schema(description = "用户id")
@@ -2,10 +2,8 @@ package cn.iocoder.yudao.module.member.client.vo.chat.privatemsg;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
@Data @Data
public class ChatPrivateTotalMessageTotalReqVo { public class ChatPrivateTotalMessageTotalReqVO {
/** /**
* 发送人id * 发送人id
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.client.vo.chat.privatemsg;
import lombok.Data; import lombok.Data;
@Data @Data
public class ChatPrivateTotalMessageTotalResVo { public class ChatPrivateTotalMessageTotalResVO {
/** /**
* 发送者id * 发送者id
@@ -5,7 +5,7 @@ import lombok.Data;
@Data @Data
@Schema(description = "third敏感词详情DTO") @Schema(description = "third敏感词详情DTO")
public class ChatSensitiveInfoReqVo { public class ChatSensitiveInfoReqVO {
@Schema(description = "敏感词id") @Schema(description = "敏感词id")
private Long sensitiveId; private Long sensitiveId;
@@ -7,7 +7,7 @@ import java.util.Date;
@Data @Data
@Schema(description = "third敏感词DTO") @Schema(description = "third敏感词DTO")
public class ChatSensitiveReqVo { public class ChatSensitiveReqVO {
@Schema(description = "分页大小") @Schema(description = "分页大小")
private Integer pageSize; private Integer pageSize;
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotEmpty;
@Data @Data
@Schema(description = "third新增或修改DTO") @Schema(description = "third新增或修改DTO")
public class ChatSensitiveSaveReqVo { public class ChatSensitiveSaveReqVO {
@Schema(description = "id") @Schema(description = "id")
private Long id; private Long id;
@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
@Data @Data
@Schema(description = "chat用户注册req") @Schema(description = "chat用户注册req")
public class ChatCreateOrUpdateUserReqVo { public class ChatCreateOrUpdateUserReqVO {
@NotNull(message = "用户id不可为空") @NotNull(message = "用户id不可为空")
@Schema(description = "用户id") @Schema(description = "用户id")
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
@Data @Data
@Schema(description = "chat根据userId查询用户详情") @Schema(description = "chat根据userId查询用户详情")
public class ChatGetUserByUserIdReqVo { public class ChatGetUserByUserIdReqVO {
@NotNull(message = "用户id不能为空") @NotNull(message = "用户id不能为空")
@Schema(description = "用户id") @Schema(description = "用户id")
@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
@Data @Data
@Schema(description = "chat根据userId查询用户详情resp") @Schema(description = "chat根据userId查询用户详情resp")
public class ChatGetUserByUserIdRespVo { public class ChatGetUserByUserIdRespVO {
@NotNull(message = "用户id不能为空") @NotNull(message = "用户id不能为空")
@Schema(description = "id") @Schema(description = "id")
@@ -5,7 +5,7 @@ import lombok.Data;
@Data @Data
@Schema(description = "chat用户登录resp") @Schema(description = "chat用户登录resp")
public class ChatLoginRespVo { public class ChatLoginRespVO {
@Schema(description = "每次请求都必须在header中携带accessToken") @Schema(description = "每次请求都必须在header中携带accessToken")
private String accessToken; private String accessToken;
@@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.member.client.vo.thirdfaceverify;
import lombok.Data;
/**
* 阿里云人脸认证req
*/
@Data
public class ThirdFaceVerifyReqVO {
/**
* 认证订单code(唯一)
*/
private String code;
/**
* 人脸认证图片地址
*/
private String faceVerifyUrl;
/**
* 认证用户id
*/
private Long faceVerifyUserId;
/**
* MetaInfo环境参数,客户端传入
*/
private String metaInfoJson;
}
@@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.member.client.vo.thirdfaceverify;
import lombok.Data;
/**
* 阿里云人脸认证res
*/
@Data
public class ThirdFaceVerifyResVO {
private String certifyId;
private String certifyUrl;
}
@@ -6,7 +6,7 @@ import lombok.Data;
* 腾讯地图响应体 * 腾讯地图响应体
*/ */
@Data @Data
public class TxMapRespVo { public class TxMapRespVO {
private Integer status; private Integer status;
@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class TxMapGeocoderReqVo { public class TxMapGeocoderReqVO {
/** /**
* 开发密钥(Key) * 开发密钥(Key)
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.client.vo.txmap.geocoder;
import lombok.Data; import lombok.Data;
@Data @Data
public class TxMapGeocoderRespVo { public class TxMapGeocoderRespVO {
/** /**
* 以行政区划+道路+门牌号等信息组成的标准格式化地址 * 以行政区划+道路+门牌号等信息组成的标准格式化地址
@@ -29,7 +29,7 @@ public class ChatSensitiveController {
@PostMapping("/page") @PostMapping("/page")
@Operation(summary = "查询敏感词列表", description = "查询敏感词列表") @Operation(summary = "查询敏感词列表", description = "查询敏感词列表")
public CommonResult<PageResult<ChatSensitiveRespVO>> page(@Valid @RequestBody ChatSensitiveReqVo dto) { public CommonResult<PageResult<ChatSensitiveRespVO>> page(@Valid @RequestBody ChatSensitiveReqVO dto) {
ChatTableRespVO<ChatSensitiveRespVO> vo = chatApi.sensitivePage(dto); ChatTableRespVO<ChatSensitiveRespVO> vo = chatApi.sensitivePage(dto);
PageResult pageResult = new PageResult(); PageResult pageResult = new PageResult();
@@ -44,7 +44,7 @@ public class ChatSensitiveController {
@GetMapping("/getById") @GetMapping("/getById")
@Operation(summary = "获取敏感词详细信息", description = "获取敏感词详细信息") @Operation(summary = "获取敏感词详细信息", description = "获取敏感词详细信息")
public CommonResult<ChatSensitiveRespVO> getInfo(@RequestParam("id") Long id) { public CommonResult<ChatSensitiveRespVO> getInfo(@RequestParam("id") Long id) {
ChatSensitiveInfoReqVo dto = new ChatSensitiveInfoReqVo(); ChatSensitiveInfoReqVO dto = new ChatSensitiveInfoReqVO();
dto.setSensitiveId(id); dto.setSensitiveId(id);
ChatSensitiveRespVO vo = chatApi.sensitiveGetInfo(dto); ChatSensitiveRespVO vo = chatApi.sensitiveGetInfo(dto);
return success(vo); return success(vo);
@@ -52,7 +52,7 @@ public class ChatSensitiveController {
@PostMapping("/createOrUpdate") @PostMapping("/createOrUpdate")
@Operation(summary = "创建或者更新敏感词", description = "创建或者更新敏感词") @Operation(summary = "创建或者更新敏感词", description = "创建或者更新敏感词")
public CommonResult<Boolean> createOrUpdate(@Valid @RequestBody ChatSensitiveSaveReqVo dto) { public CommonResult<Boolean> createOrUpdate(@Valid @RequestBody ChatSensitiveSaveReqVO dto) {
return success(chatApi.sensitiveCreateOrUpdate(dto)); return success(chatApi.sensitiveCreateOrUpdate(dto));
} }
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.chat;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.service.ChatApi;
import cn.iocoder.yudao.module.member.client.vo.chat.friend.ChatAddFriendReqVo; import cn.iocoder.yudao.module.member.client.vo.chat.friend.ChatAddFriendReqVO;
import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatPrivateMessageSendReqVO; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatPrivateMessageSendReqVO;
import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatPrivateMessageSendResVO; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatPrivateMessageSendResVO;
import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService;
@@ -43,12 +43,12 @@ public class AppChatController {
public CommonResult<Boolean> createFeedback(@RequestParam("friendUserId") Long friendUserId) { public CommonResult<Boolean> createFeedback(@RequestParam("friendUserId") Long friendUserId) {
Long currentUserId = getLoginUserId(); Long currentUserId = getLoginUserId();
// 相互添加一下好友 // 相互添加一下好友
ChatAddFriendReqVo self = new ChatAddFriendReqVo(); ChatAddFriendReqVO self = new ChatAddFriendReqVO();
self.setUserId(currentUserId); self.setUserId(currentUserId);
self.setTargetUserId(friendUserId); self.setTargetUserId(friendUserId);
chatApi.addFriend(self); chatApi.addFriend(self);
ChatAddFriendReqVo target = new ChatAddFriendReqVo(); ChatAddFriendReqVO target = new ChatAddFriendReqVO();
target.setUserId(friendUserId); target.setUserId(friendUserId);
target.setTargetUserId(currentUserId); target.setTargetUserId(currentUserId);
chatApi.addFriend(target); chatApi.addFriend(target);
@@ -107,6 +107,12 @@ public class AppRecentController {
return success(recentService.evaluatePage(dto)); return success(recentService.evaluatePage(dto));
} }
@PostMapping("/evaluate-detail")
@Operation(summary = "我的评价总分数详情")
public CommonResult<AppEvaluateDetailResVo> evaluateDetail() {
return success(recentService.evaluateDetail(getLoginUserId()));
}
@GetMapping("/getById") @GetMapping("/getById")
@Operation(summary = "根据id查询用户信息") @Operation(summary = "根据id查询用户信息")
public CommonResult<RecentPageResVo> getUserInfoById(@RequestParam("id") Long id) { public CommonResult<RecentPageResVo> getUserInfoById(@RequestParam("id") Long id) {
@@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.controller.app.recent.vo;
import lombok.Data;
/**
* 评价详情
*/
@Data
public class AppEvaluateDetailResVo {
/**
* 身材评分
*/
private Integer scoreSc = 0;
/**
* 耐心评分
*/
private Integer scoreNx = 0;
/**
* 爽快评分
*/
private Integer scoreSk = 0;
/**
* 有趣评分
*/
private Integer scoreYq = 0;
/**
* 综合评分
*/
private Integer avgScore = 0;
/**
* 评价数量
*/
private Integer evaluateCount = 0;
}
@@ -17,6 +17,7 @@ public interface PhotoMapper extends BaseMapperX<PhotoDO> {
default PageResult<PhotoDO> selectPage(PhotoPageReqVO reqVO) { default PageResult<PhotoDO> selectPage(PhotoPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<PhotoDO>() return selectPage(reqVO, new LambdaQueryWrapperX<PhotoDO>()
.eqIfPresent(PhotoDO::getMemberId, reqVO.getMemberId())
.eqIfPresent(PhotoDO::getBizType, reqVO.getBizType()) .eqIfPresent(PhotoDO::getBizType, reqVO.getBizType())
.eqIfPresent(PhotoDO::getAddress, reqVO.getAddress()) .eqIfPresent(PhotoDO::getAddress, reqVO.getAddress())
.eqIfPresent(PhotoDO::getTagJson, reqVO.getTagJson()) .eqIfPresent(PhotoDO::getTagJson, reqVO.getTagJson())
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationPageRe
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO;
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationTotalGroupRecentRespVO; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationTotalGroupRecentRespVO;
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppEvaluateDetailResVo;
import cn.iocoder.yudao.module.member.dal.dataobject.recent.OperationDO; import cn.iocoder.yudao.module.member.dal.dataobject.recent.OperationDO;
import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@@ -47,4 +48,6 @@ public interface OperationMapper extends BaseMapperX<OperationDO> {
List<OperationTotalGroupRecentRespVO> totalGroupRecent(@Param("dto") OperationPageReqVO dto); List<OperationTotalGroupRecentRespVO> totalGroupRecent(@Param("dto") OperationPageReqVO dto);
OperationTotalGroupRecentRespVO totalGroupRecentByUser(@Param("userId") Long userId); OperationTotalGroupRecentRespVO totalGroupRecentByUser(@Param("userId") Long userId);
AppEvaluateDetailResVo evaluateDetail(@Param("userId") Long userid);
} }
@@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.member.framework.web.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 第三方阿里云配置
*/
@Component
@ConfigurationProperties("al-config")
@Data
public class ThirdAlConfig {
/**
* 阿里云 AccessKeyId
*/
private String accessKeyId;
/**
* 阿里云 AccessKeySecret
*/
private String accessKeySecret;
/**
* 阿里云人脸识别回调地址
*/
private String faceVerifyCallbackUrl;
/**
* 阿里云人脸识别回调token
*/
private String faceVerifyCallbackToken;
}
@@ -10,7 +10,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.service.ChatApi;
import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatLoginReqVO; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatLoginReqVO;
import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatLoginRespVo; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatLoginRespVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
@@ -247,7 +247,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
ChatLoginReqVO loginObj = new ChatLoginReqVO(); ChatLoginReqVO loginObj = new ChatLoginReqVO();
loginObj.setTerminal(1); loginObj.setTerminal(1);
loginObj.setUserId(user.getId()); loginObj.setUserId(user.getId());
ChatLoginRespVo login = chatApi.login(loginObj); ChatLoginRespVO login = chatApi.login(loginObj);
if (ObjectUtil.isNotEmpty(login)) { if (ObjectUtil.isNotEmpty(login)) {
serviceToken.setChatToken(BeanUtils.toBean(login, AppAuthLoginRespVO.ChatToken.class)); serviceToken.setChatToken(BeanUtils.toBean(login, AppAuthLoginRespVO.ChatToken.class));
} }
@@ -268,7 +268,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
ChatLoginReqVO loginObj = new ChatLoginReqVO(); ChatLoginReqVO loginObj = new ChatLoginReqVO();
loginObj.setTerminal(1); loginObj.setTerminal(1);
loginObj.setUserId(user.getId()); loginObj.setUserId(user.getId());
ChatLoginRespVo login = chatApi.login(loginObj); ChatLoginRespVO login = chatApi.login(loginObj);
if (ObjectUtil.isNotEmpty(login)) { if (ObjectUtil.isNotEmpty(login)) {
serviceToken.setChatToken(BeanUtils.toBean(login, AppAuthLoginRespVO.ChatToken.class)); serviceToken.setChatToken(BeanUtils.toBean(login, AppAuthLoginRespVO.ChatToken.class));
} }
@@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.member.service.location;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.client.service.TxMapApi; import cn.iocoder.yudao.module.member.client.service.TxMapApi;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVO;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.MemberErrorCode; import cn.iocoder.yudao.module.member.enums.MemberErrorCode;
@@ -22,7 +22,6 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.location.LocationMapper; import cn.iocoder.yudao.module.member.dal.mysql.location.LocationMapper;
import java.lang.reflect.Array;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -48,9 +47,9 @@ public class LocationServiceImpl implements LocationService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createLocation(LocationSaveReqVO dto) { public Long createLocation(LocationSaveReqVO dto) {
if (!ObjectUtil.isAllNotEmpty(dto.getProvince(), dto.getCity(), dto.getDistrict())) { if (!ObjectUtil.isAllNotEmpty(dto.getProvince(), dto.getCity(), dto.getDistrict())) {
TxMapGeocoderRespVo geocoder = txMapApi.geocoder(TxMapGeocoderReqVo.builder().location(dto.getLat() + "," + dto.getLon()).build()); TxMapGeocoderRespVO geocoder = txMapApi.geocoder(TxMapGeocoderReqVO.builder().location(dto.getLat() + "," + dto.getLon()).build());
if (ObjectUtil.isNotEmpty(geocoder) && ObjectUtil.isNotEmpty(geocoder.getAddress_component())) { if (ObjectUtil.isNotEmpty(geocoder) && ObjectUtil.isNotEmpty(geocoder.getAddress_component())) {
TxMapGeocoderRespVo.AddressComponent addressComponent = geocoder.getAddress_component(); TxMapGeocoderRespVO.AddressComponent addressComponent = geocoder.getAddress_component();
dto.setProvince(addressComponent.getProvince()); dto.setProvince(addressComponent.getProvince());
dto.setCity(addressComponent.getCity()); dto.setCity(addressComponent.getCity());
dto.setDistrict(addressComponent.getDistrict()); dto.setDistrict(addressComponent.getDistrict());
@@ -3,13 +3,9 @@ package cn.iocoder.yudao.module.member.service.opentype;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.service.ChatApi;
import cn.iocoder.yudao.module.member.client.vo.chat.ChatTableRespVO; import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateTotalMessageTotalReqVO;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateMessageReqVO; import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateTotalMessageTotalResVO;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateMessageRespVO;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateTotalMessageTotalReqVo;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateTotalMessageTotalResVo;
import cn.iocoder.yudao.module.member.controller.app.opentype.vo.AppPayOpenReqType; import cn.iocoder.yudao.module.member.controller.app.opentype.vo.AppPayOpenReqType;
import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO;
import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeUserDO;
@@ -35,11 +31,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeMapper; import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeMapper;
import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -194,21 +186,21 @@ public class OpenTypeServiceImpl implements OpenTypeService {
LocalDateTime startDate = now.withHour(0).withMinute(0).withSecond(0); LocalDateTime startDate = now.withHour(0).withMinute(0).withSecond(0);
LocalDateTime endDate = now.withHour(23).withMinute(59).withSecond(59); LocalDateTime endDate = now.withHour(23).withMinute(59).withSecond(59);
ChatPrivateTotalMessageTotalReqVo dto = new ChatPrivateTotalMessageTotalReqVo(); ChatPrivateTotalMessageTotalReqVO dto = new ChatPrivateTotalMessageTotalReqVO();
dto.setSendId(sendId); dto.setSendId(sendId);
dto.setTimeRange(new String[]{ dto.setTimeRange(new String[]{
LocalDateTimeUtil.format(startDate, DatePattern.NORM_DATETIME_PATTERN), LocalDateTimeUtil.format(startDate, DatePattern.NORM_DATETIME_PATTERN),
LocalDateTimeUtil.format(endDate, DatePattern.NORM_DATETIME_PATTERN), LocalDateTimeUtil.format(endDate, DatePattern.NORM_DATETIME_PATTERN),
}); });
try { try {
List<ChatPrivateTotalMessageTotalResVo> msgList = chatApi.privateTotal(dto); List<ChatPrivateTotalMessageTotalResVO> msgList = chatApi.privateTotal(dto);
if (ObjectUtil.isEmpty(msgList)) return true; if (ObjectUtil.isEmpty(msgList)) return true;
// 普通用户聊天人数是否超过上限 // 普通用户聊天人数是否超过上限
if (msgList.size() > defaultChatUserCout) { if (msgList.size() > defaultChatUserCout) {
throw exception(MemberErrorCode.CHAT_USER_COUNT_EXCEED); throw exception(MemberErrorCode.CHAT_USER_COUNT_EXCEED);
} }
// 聊天人数已经超过限制 // 聊天人数已经超过限制
ChatPrivateTotalMessageTotalResVo targetCount = msgList.stream().filter(item -> ObjectUtil.equals(item.getSendId(), sendId) && ObjectUtil.equals(item.getReceiveId(), receiveId)).findFirst().orElse(null); ChatPrivateTotalMessageTotalResVO targetCount = msgList.stream().filter(item -> ObjectUtil.equals(item.getSendId(), sendId) && ObjectUtil.equals(item.getReceiveId(), receiveId)).findFirst().orElse(null);
if (ObjectUtil.isEmpty(targetCount)) return true; if (ObjectUtil.isEmpty(targetCount)) return true;
if (targetCount.getMessageTotal() > defaultChatUserMsgCout) { if (targetCount.getMessageTotal() > defaultChatUserMsgCout) {
throw exception(MemberErrorCode.CHAT_MSG_COUNT_EXCEED); throw exception(MemberErrorCode.CHAT_MSG_COUNT_EXCEED);
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.enums.MemberErrorCode; import cn.iocoder.yudao.module.member.enums.MemberErrorCode;
import cn.iocoder.yudao.module.member.enums.photo.PhotoBizTypeEnum; import cn.iocoder.yudao.module.member.enums.photo.PhotoBizTypeEnum;
import cn.iocoder.yudao.module.member.enums.photo.PhotoResourceTypeEnum; import cn.iocoder.yudao.module.member.enums.photo.PhotoResourceTypeEnum;
import cn.iocoder.yudao.module.member.service.thirdauth.ThirdAuthService; import cn.iocoder.yudao.module.member.client.service.ThirdAuthService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -24,8 +24,6 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.photo.PhotoMapper; import cn.iocoder.yudao.module.member.dal.mysql.photo.PhotoMapper;
import java.util.concurrent.CompletableFuture;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/** /**
@@ -5,10 +5,7 @@ import java.util.concurrent.ExecutionException;
import javax.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentLikeReqVo; import cn.iocoder.yudao.module.member.controller.app.recent.vo.*;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentQuickPageVO;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentViewRecordReqVo;
import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -86,6 +83,11 @@ public interface RecentService {
*/ */
PageResult<OperationRespVO> evaluatePage(@Valid AppRecentLikeReqVo dto); PageResult<OperationRespVO> evaluatePage(@Valid AppRecentLikeReqVo dto);
/**
* 我的评价总分数详情
*/
AppEvaluateDetailResVo evaluateDetail(Long userId);
/** /**
* 查询朋友圈用户 * 查询朋友圈用户
*/ */
@@ -95,4 +97,5 @@ public interface RecentService {
* 朋友圈我喜欢的、喜欢我的等总数统计 * 朋友圈我喜欢的、喜欢我的等总数统计
*/ */
OperationTotalGroupRecentRespVO total(Long userId); OperationTotalGroupRecentRespVO total(Long userId);
} }
@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo; import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppEvaluateDetailResVo;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentLikeReqVo; import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentLikeReqVo;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo; import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo;
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentQuickPageVO; import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentQuickPageVO;
@@ -21,7 +22,7 @@ import cn.iocoder.yudao.module.member.enums.MemberRecentOperateEnum;
import cn.iocoder.yudao.module.member.enums.MemberRecentSceneEnum; import cn.iocoder.yudao.module.member.enums.MemberRecentSceneEnum;
import cn.iocoder.yudao.module.member.enums.tag.MemberRecentTagEnum; import cn.iocoder.yudao.module.member.enums.tag.MemberRecentTagEnum;
import cn.iocoder.yudao.module.member.service.location.LocationService; import cn.iocoder.yudao.module.member.service.location.LocationService;
import cn.iocoder.yudao.module.member.service.thirdauth.ThirdAuthService; import cn.iocoder.yudao.module.member.client.service.ThirdAuthService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.module.system.enums.common.SexEnum;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -42,6 +43,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.dal.mysql.recent.RecentMapper; import cn.iocoder.yudao.module.member.dal.mysql.recent.RecentMapper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -415,6 +418,19 @@ public class RecentServiceImpl implements RecentService {
return new PageResult<>(resultList, pageList.getTotal()); return new PageResult<>(resultList, pageList.getTotal());
} }
/**
* 我的评价总分数详情
*/
@Override
public AppEvaluateDetailResVo evaluateDetail(Long userid) {
AppEvaluateDetailResVo total = operationMapper.evaluateDetail(userid);
if (ObjectUtil.isEmpty(total)) return new AppEvaluateDetailResVo();
int allTotal = total.getScoreSc() + total.getScoreNx() + total.getScoreSk() + total.getScoreYq();
int avgScore = new BigDecimal(allTotal).divide(BigDecimal.valueOf(4), 0, RoundingMode.HALF_UP).intValue();
total.setAvgScore(avgScore);
return total;
}
/** /**
* 查询朋友圈用户 * 查询朋友圈用户
*/ */
@@ -9,9 +9,8 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.service.ChatApi;
import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatCreateOrUpdateUserReqVo; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatCreateOrUpdateUserReqVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*; import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
@@ -378,7 +377,7 @@ public class MemberUserServiceImpl implements MemberUserService {
if (ObjectUtil.isEmpty(memberUser)) { if (ObjectUtil.isEmpty(memberUser)) {
return false; return false;
} }
ChatCreateOrUpdateUserReqVo chatUser = new ChatCreateOrUpdateUserReqVo(); ChatCreateOrUpdateUserReqVO chatUser = new ChatCreateOrUpdateUserReqVO();
chatUser.setUserId(memberUser.getId()); chatUser.setUserId(memberUser.getId());
chatUser.setUserName(memberUser.getNickname()); chatUser.setUserName(memberUser.getNickname());
chatUser.setPhone(memberUser.getMobile()); chatUser.setPhone(memberUser.getMobile());
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.member.dal.mysql.recent.OperationMapper"> <mapper namespace="cn.iocoder.yudao.module.member.dal.mysql.recent.OperationMapper">
<sql id="selectA"> <sql id="selectA">
a.deleted = 0 a.deleted = 0
<if test="dto.memberRecentId != null"> <if test="dto.memberRecentId != null">
@@ -58,4 +57,14 @@
and a.operator_member_id != a.member_id and a.operator_member_id != a.member_id
</select> </select>
<select id="evaluateDetail"
resultType="cn.iocoder.yudao.module.member.controller.app.recent.vo.AppEvaluateDetailResVo">
select a.score_sc, a.score_nx, a.score_sk, score_yq, count(0) as evaluateCount
from member_operation a
where a.deleted = 0
and a.biz_type = '7'
and a.member_id = #{userId}
and a.operator_member_id != a.member_id
group by a.member_id
</select>
</mapper> </mapper>
@@ -237,3 +237,9 @@ tx-map:
base-url: https://apis.map.qq.com base-url: https://apis.map.qq.com
app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D
app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m
al-config:
access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D
access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3
face-verify-callback-url: https://rj4jv5rwqs.by.takin.cc
face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc
@@ -259,3 +259,9 @@ tx-map:
base-url: https://apis.map.qq.com base-url: https://apis.map.qq.com
app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D
app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m
al-config:
access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D
access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3
face-verify-callback-url: https://rj4jv5rwqs.by.takin.cc
face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc
@@ -249,3 +249,9 @@ tx-map:
base-url: https://apis.map.qq.com base-url: https://apis.map.qq.com
app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D
app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m
al-config:
access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D
access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3
face-verify-callback-url: https://rj4jv5rwqs.by.takin.cc
face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc