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

No files matched your search

@@ -86,12 +86,26 @@
<artifactId>yudao-spring-boot-starter-biz-ip</artifactId>
</dependency>
<!-- 文字、图片风险认证 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>green20220302</artifactId>
<version>3.0.1</version>
</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>
</project>
@@ -1,7 +1,7 @@
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.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.sensitive.*;
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查询用户详情
*/
ChatGetUserByUserIdRespVo getUserByUserId(@Valid ChatGetUserByUserIdReqVo dto);
ChatGetUserByUserIdRespVO getUserByUserId(@Valid ChatGetUserByUserIdReqVO dto);
/**
* 添加好友
*/
boolean addFriend(@Valid ChatAddFriendReqVo dto);
boolean addFriend(@Valid ChatAddFriendReqVO dto);
/* *************************************** 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 *************************************** */
@@ -5,9 +5,9 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
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.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.sensitive.*;
import cn.iocoder.yudao.module.member.client.vo.chat.user.*;
@@ -33,7 +33,7 @@ public class ChatApiImpl implements ChatApi {
* 聊天用户登录
*/
@Override
public ChatLoginRespVo login(ChatLoginReqVO dto) {
public ChatLoginRespVO login(ChatLoginReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.USER_LOGIN);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -43,12 +43,12 @@ public class ChatApiImpl implements ChatApi {
log.error("聊天用户登录,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("聊天用户登录,返回错误");
return null;
}
ChatLoginRespVo vo = JSONUtil.toBean(baseRes.getData(), ChatLoginRespVo.class);
ChatLoginRespVO vo = JSONUtil.toBean(baseRes.getData(), ChatLoginRespVO.class);
if (ObjectUtil.isEmpty(vo)) {
log.error("聊天用户登录,返回json解析错误");
return null;
@@ -65,7 +65,7 @@ public class ChatApiImpl implements ChatApi {
* 创建或者更新聊天用户
*/
@Override
public boolean createOrUpdate(ChatCreateOrUpdateUserReqVo dto) {
public boolean createOrUpdate(ChatCreateOrUpdateUserReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.USER_SAVE_OR_UPDATE);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -75,7 +75,7 @@ public class ChatApiImpl implements ChatApi {
log.error("创建或者更新聊天用户,res为空");
return false;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("创建或者更新聊天用户,返回错误");
return false;
@@ -92,7 +92,7 @@ public class ChatApiImpl implements ChatApi {
* 根据userId查询用户详情
*/
@Override
public ChatGetUserByUserIdRespVo getUserByUserId(ChatGetUserByUserIdReqVo dto) {
public ChatGetUserByUserIdRespVO getUserByUserId(ChatGetUserByUserIdReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.USER_GET);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -102,12 +102,12 @@ public class ChatApiImpl implements ChatApi {
log.error("根据userId查询用户详情,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("根据userId查询用户详情,返回错误");
return null;
}
ChatGetUserByUserIdRespVo vo = JSONUtil.toBean(baseRes.getData(), ChatGetUserByUserIdRespVo.class);
ChatGetUserByUserIdRespVO vo = JSONUtil.toBean(baseRes.getData(), ChatGetUserByUserIdRespVO.class);
if (ObjectUtil.isEmpty(vo)) {
log.error("根据userId查询用户详情,返回json解析错误");
return null;
@@ -124,7 +124,7 @@ public class ChatApiImpl implements ChatApi {
* 添加好友
*/
@Override
public boolean addFriend(ChatAddFriendReqVo dto) {
public boolean addFriend(ChatAddFriendReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.FRIEND_ADD);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -134,7 +134,7 @@ public class ChatApiImpl implements ChatApi {
log.error("添加好友,res为空");
return false;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("添加好友,返回错误");
return false;
@@ -155,7 +155,7 @@ public class ChatApiImpl implements ChatApi {
* 敏感词分页
*/
@Override
public ChatTableRespVO<ChatSensitiveRespVO> sensitivePage(ChatSensitiveReqVo dto) {
public ChatTableRespVO<ChatSensitiveRespVO> sensitivePage(ChatSensitiveReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_PAGE);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -165,7 +165,7 @@ public class ChatApiImpl implements ChatApi {
log.error("敏感词分页,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("敏感词分页,返回错误");
return null;
@@ -192,7 +192,7 @@ public class ChatApiImpl implements ChatApi {
* 敏感词详情
*/
@Override
public ChatSensitiveRespVO sensitiveGetInfo(ChatSensitiveInfoReqVo dto) {
public ChatSensitiveRespVO sensitiveGetInfo(ChatSensitiveInfoReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_INFO);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -202,7 +202,7 @@ public class ChatApiImpl implements ChatApi {
log.error("敏感词详情,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("敏感词详情,返回错误");
return null;
@@ -224,7 +224,7 @@ public class ChatApiImpl implements ChatApi {
* 创建或者更新敏感词
*/
@Override
public boolean sensitiveCreateOrUpdate(ChatSensitiveSaveReqVo dto) {
public boolean sensitiveCreateOrUpdate(ChatSensitiveSaveReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.SENSITIVE_CREATE_OR_UPDATE);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -234,7 +234,7 @@ public class ChatApiImpl implements ChatApi {
log.error("创建或者更新敏感词,res为空");
return false;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("创建或者更新敏感词,返回错误");
return false;
@@ -265,7 +265,7 @@ public class ChatApiImpl implements ChatApi {
log.error("删除敏感词,res为空");
return false;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("删除敏感词,返回错误");
return false;
@@ -301,7 +301,7 @@ public class ChatApiImpl implements ChatApi {
log.error("发私聊送消息,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("发私聊送消息,返回错误");
return null;
@@ -333,7 +333,7 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息分页,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息分页,返回错误");
return null;
@@ -370,7 +370,7 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息详情,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息详情,返回错误");
return null;
@@ -402,7 +402,7 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息统计,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息统计,返回错误");
return null;
@@ -424,7 +424,7 @@ public class ChatApiImpl implements ChatApi {
* 私聊消息发送消息的统计
*/
@Override
public List<ChatPrivateTotalMessageTotalResVo> privateTotal(ChatPrivateTotalMessageTotalReqVo dto) {
public List<ChatPrivateTotalMessageTotalResVO> privateTotal(ChatPrivateTotalMessageTotalReqVO dto) {
ChatApiTool.API api = setApiConfig(ChatApiTool.PRIVATE_MSG_TOTAL);
try {
String body = JSONUtil.toJsonStr(dto);
@@ -434,12 +434,12 @@ public class ChatApiImpl implements ChatApi {
log.error("私聊消息发送消息的统计,res为空");
return null;
}
ChatBaseRespVo baseRes = JSONUtil.toBean(res, ChatBaseRespVo.class);
ChatBaseRespVO baseRes = JSONUtil.toBean(res, ChatBaseRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("私聊消息发送消息的统计,返回错误");
return null;
}
List<ChatPrivateTotalMessageTotalResVo> vo = JSONUtil.toList(baseRes.getData(), ChatPrivateTotalMessageTotalResVo.class);
List<ChatPrivateTotalMessageTotalResVO> vo = JSONUtil.toList(baseRes.getData(), ChatPrivateTotalMessageTotalResVO.class);
if (ObjectUtil.isEmpty(vo)) {
log.error("私聊消息发送消息的统计,返回json解析错误");
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 com.aliyun.green20220302.models.ImageBatchModerationResponseBody;
/**
* @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.json.JSONUtil;
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.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.*;
@@ -12,6 +13,7 @@ import com.aliyun.teautil.models.RuntimeOptions;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;
@@ -23,6 +25,9 @@ import java.util.*;
@Slf4j
public class ThirdAuthServiceImpl implements ThirdAuthService {
@Resource
private ThirdAlConfig thirdAlConfig;
private volatile Client clientInstance;
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;
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.TxMapGeocoderReqVO;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVO;
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.json.JSONUtil;
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.geocoder.TxMapGeocoderReqVo;
import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVo;
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.TxMapGeocoderRespVO;
import cn.iocoder.yudao.module.member.framework.web.config.TxMapProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
@@ -31,7 +31,7 @@ public class TxMapApiImpl implements TxMapApi {
* 地址逆向解析
*/
@Override
public TxMapGeocoderRespVo geocoder(TxMapGeocoderReqVo dto) {
public TxMapGeocoderRespVO geocoder(TxMapGeocoderReqVO dto) {
dto.setKey(txMapProperties.getAppKey());
TxMapApiTool.API api = setApiConfig(TxMapApiTool.GEOCODER);
try {
@@ -41,7 +41,7 @@ public class TxMapApiImpl implements TxMapApi {
log.error("地址逆向解析,res为空");
return null;
}
TxMapRespVo baseRes = JSONUtil.toBean(res, TxMapRespVo.class);
TxMapRespVO baseRes = JSONUtil.toBean(res, TxMapRespVO.class);
if (ObjectUtil.isEmpty(baseRes) || !baseRes.isSuccess()) {
log.error("地址逆向解析,返回错误");
return null;
@@ -50,7 +50,7 @@ public class TxMapApiImpl implements TxMapApi {
log.error("地址逆向解析,res.result为空");
return null;
}
return JSONUtil.toBean(baseRes.getResult(), TxMapGeocoderRespVo.class);
return JSONUtil.toBean(baseRes.getResult(), TxMapGeocoderRespVO.class);
} catch (Exception e) {
e.printStackTrace();
log.error("地址逆向解析,意外的错误", e);
@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjUtil;
import lombok.Data;
@Data
public class ChatBaseRespVo {
public class ChatBaseRespVO {
private Integer code;
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
@Data
@Schema(description = "chat添加好友req")
public class ChatAddFriendReqVo {
public class ChatAddFriendReqVO {
@NotNull(message = "用户id不存在")
@Schema(description = "用户id")
@@ -2,10 +2,8 @@ package cn.iocoder.yudao.module.member.client.vo.chat.privatemsg;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class ChatPrivateTotalMessageTotalReqVo {
public class ChatPrivateTotalMessageTotalReqVO {
/**
* 发送人id
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.client.vo.chat.privatemsg;
import lombok.Data;
@Data
public class ChatPrivateTotalMessageTotalResVo {
public class ChatPrivateTotalMessageTotalResVO {
/**
* 发送者id
@@ -5,7 +5,7 @@ import lombok.Data;
@Data
@Schema(description = "third敏感词详情DTO")
public class ChatSensitiveInfoReqVo {
public class ChatSensitiveInfoReqVO {
@Schema(description = "敏感词id")
private Long sensitiveId;
@@ -7,7 +7,7 @@ import java.util.Date;
@Data
@Schema(description = "third敏感词DTO")
public class ChatSensitiveReqVo {
public class ChatSensitiveReqVO {
@Schema(description = "分页大小")
private Integer pageSize;
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotEmpty;
@Data
@Schema(description = "third新增或修改DTO")
public class ChatSensitiveSaveReqVo {
public class ChatSensitiveSaveReqVO {
@Schema(description = "id")
private Long id;
@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
@Data
@Schema(description = "chat用户注册req")
public class ChatCreateOrUpdateUserReqVo {
public class ChatCreateOrUpdateUserReqVO {
@NotNull(message = "用户id不可为空")
@Schema(description = "用户id")
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
@Data
@Schema(description = "chat根据userId查询用户详情")
public class ChatGetUserByUserIdReqVo {
public class ChatGetUserByUserIdReqVO {
@NotNull(message = "用户id不能为空")
@Schema(description = "用户id")
@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
@Data
@Schema(description = "chat根据userId查询用户详情resp")
public class ChatGetUserByUserIdRespVo {
public class ChatGetUserByUserIdRespVO {
@NotNull(message = "用户id不能为空")
@Schema(description = "id")
@@ -5,7 +5,7 @@ import lombok.Data;
@Data
@Schema(description = "chat用户登录resp")
public class ChatLoginRespVo {
public class ChatLoginRespVO {
@Schema(description = "每次请求都必须在header中携带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
public class TxMapRespVo {
public class TxMapRespVO {
private Integer status;
@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TxMapGeocoderReqVo {
public class TxMapGeocoderReqVO {
/**
* 开发密钥(Key)
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.client.vo.txmap.geocoder;
import lombok.Data;
@Data
public class TxMapGeocoderRespVo {
public class TxMapGeocoderRespVO {
/**
* 以行政区划+道路+门牌号等信息组成的标准格式化地址
@@ -29,7 +29,7 @@ public class ChatSensitiveController {
@PostMapping("/page")
@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);
PageResult pageResult = new PageResult();
@@ -44,7 +44,7 @@ public class ChatSensitiveController {
@GetMapping("/getById")
@Operation(summary = "获取敏感词详细信息", description = "获取敏感词详细信息")
public CommonResult<ChatSensitiveRespVO> getInfo(@RequestParam("id") Long id) {
ChatSensitiveInfoReqVo dto = new ChatSensitiveInfoReqVo();
ChatSensitiveInfoReqVO dto = new ChatSensitiveInfoReqVO();
dto.setSensitiveId(id);
ChatSensitiveRespVO vo = chatApi.sensitiveGetInfo(dto);
return success(vo);
@@ -52,7 +52,7 @@ public class ChatSensitiveController {
@PostMapping("/createOrUpdate")
@Operation(summary = "创建或者更新敏感词", description = "创建或者更新敏感词")
public CommonResult<Boolean> createOrUpdate(@Valid @RequestBody ChatSensitiveSaveReqVo dto) {
public CommonResult<Boolean> createOrUpdate(@Valid @RequestBody ChatSensitiveSaveReqVO 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.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.ChatPrivateMessageSendResVO;
import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService;
@@ -43,12 +43,12 @@ public class AppChatController {
public CommonResult<Boolean> createFeedback(@RequestParam("friendUserId") Long friendUserId) {
Long currentUserId = getLoginUserId();
// 相互添加一下好友
ChatAddFriendReqVo self = new ChatAddFriendReqVo();
ChatAddFriendReqVO self = new ChatAddFriendReqVO();
self.setUserId(currentUserId);
self.setTargetUserId(friendUserId);
chatApi.addFriend(self);
ChatAddFriendReqVo target = new ChatAddFriendReqVo();
ChatAddFriendReqVO target = new ChatAddFriendReqVO();
target.setUserId(friendUserId);
target.setTargetUserId(currentUserId);
chatApi.addFriend(target);
@@ -107,6 +107,12 @@ public class AppRecentController {
return success(recentService.evaluatePage(dto));
}
@PostMapping("/evaluate-detail")
@Operation(summary = "我的评价总分数详情")
public CommonResult<AppEvaluateDetailResVo> evaluateDetail() {
return success(recentService.evaluateDetail(getLoginUserId()));
}
@GetMapping("/getById")
@Operation(summary = "根据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) {
return selectPage(reqVO, new LambdaQueryWrapperX<PhotoDO>()
.eqIfPresent(PhotoDO::getMemberId, reqVO.getMemberId())
.eqIfPresent(PhotoDO::getBizType, reqVO.getBizType())
.eqIfPresent(PhotoDO::getAddress, reqVO.getAddress())
.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.OperationTotalGroupRecentRespVO;
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.RecentDO;
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);
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.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.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.app.auth.vo.*;
import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
@@ -247,7 +247,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
ChatLoginReqVO loginObj = new ChatLoginReqVO();
loginObj.setTerminal(1);
loginObj.setUserId(user.getId());
ChatLoginRespVo login = chatApi.login(loginObj);
ChatLoginRespVO login = chatApi.login(loginObj);
if (ObjectUtil.isNotEmpty(login)) {
serviceToken.setChatToken(BeanUtils.toBean(login, AppAuthLoginRespVO.ChatToken.class));
}
@@ -268,7 +268,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
ChatLoginReqVO loginObj = new ChatLoginReqVO();
loginObj.setTerminal(1);
loginObj.setUserId(user.getId());
ChatLoginRespVo login = chatApi.login(loginObj);
ChatLoginRespVO login = chatApi.login(loginObj);
if (ObjectUtil.isNotEmpty(login)) {
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.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
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.TxMapGeocoderRespVo;
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.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
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 java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
@@ -48,9 +47,9 @@ public class LocationServiceImpl implements LocationService {
@Transactional(rollbackFor = Exception.class)
public Long createLocation(LocationSaveReqVO dto) {
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())) {
TxMapGeocoderRespVo.AddressComponent addressComponent = geocoder.getAddress_component();
TxMapGeocoderRespVO.AddressComponent addressComponent = geocoder.getAddress_component();
dto.setProvince(addressComponent.getProvince());
dto.setCity(addressComponent.getCity());
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.LocalDateTimeUtil;
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.vo.chat.ChatTableRespVO;
import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateMessageReqVO;
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.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.dal.dataobject.config.MemberConfigDO;
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 java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
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 endDate = now.withHour(23).withMinute(59).withSecond(59);
ChatPrivateTotalMessageTotalReqVo dto = new ChatPrivateTotalMessageTotalReqVo();
ChatPrivateTotalMessageTotalReqVO dto = new ChatPrivateTotalMessageTotalReqVO();
dto.setSendId(sendId);
dto.setTimeRange(new String[]{
LocalDateTimeUtil.format(startDate, DatePattern.NORM_DATETIME_PATTERN),
LocalDateTimeUtil.format(endDate, DatePattern.NORM_DATETIME_PATTERN),
});
try {
List<ChatPrivateTotalMessageTotalResVo> msgList = chatApi.privateTotal(dto);
List<ChatPrivateTotalMessageTotalResVO> msgList = chatApi.privateTotal(dto);
if (ObjectUtil.isEmpty(msgList)) return true;
// 普通用户聊天人数是否超过上限
if (msgList.size() > defaultChatUserCout) {
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 (targetCount.getMessageTotal() > defaultChatUserMsgCout) {
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.photo.PhotoBizTypeEnum;
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 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 java.util.concurrent.CompletableFuture;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
@@ -5,10 +5,7 @@ import java.util.concurrent.ExecutionException;
import javax.validation.*;
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.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.controller.app.recent.vo.*;
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.PageParam;
@@ -86,6 +83,11 @@ public interface RecentService {
*/
PageResult<OperationRespVO> evaluatePage(@Valid AppRecentLikeReqVo dto);
/**
* 我的评价总分数详情
*/
AppEvaluateDetailResVo evaluateDetail(Long userId);
/**
* 查询朋友圈用户
*/
@@ -95,4 +97,5 @@ public interface RecentService {
* 朋友圈我喜欢的、喜欢我的等总数统计
*/
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.mybatis.core.query.LambdaQueryWrapperX;
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.AppRecentOperateReqVo;
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.tag.MemberRecentTagEnum;
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.system.enums.common.SexEnum;
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 java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@@ -415,6 +418,19 @@ public class RecentServiceImpl implements RecentService {
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.util.object.BeanUtils;
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.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.MemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
@@ -378,7 +377,7 @@ public class MemberUserServiceImpl implements MemberUserService {
if (ObjectUtil.isEmpty(memberUser)) {
return false;
}
ChatCreateOrUpdateUserReqVo chatUser = new ChatCreateOrUpdateUserReqVo();
ChatCreateOrUpdateUserReqVO chatUser = new ChatCreateOrUpdateUserReqVO();
chatUser.setUserId(memberUser.getId());
chatUser.setUserName(memberUser.getNickname());
chatUser.setPhone(memberUser.getMobile());
@@ -1,7 +1,6 @@
<?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">
<mapper namespace="cn.iocoder.yudao.module.member.dal.mysql.recent.OperationMapper">
<sql id="selectA">
a.deleted = 0
<if test="dto.memberRecentId != null">
@@ -58,4 +57,14 @@
and a.operator_member_id != a.member_id
</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>
@@ -236,4 +236,10 @@ chat:
tx-map:
base-url: https://apis.map.qq.com
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
@@ -258,4 +258,10 @@ chat:
tx-map:
base-url: https://apis.map.qq.com
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
@@ -248,4 +248,10 @@ chat:
tx-map:
base-url: https://apis.map.qq.com
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