Commit 763a9228 by NaoiAyato

Merge branch 'upay-test' into 'upay-prod'

Upay test->upay pro

See merge request !32
parents 33ade855 907ea87f
package com.wecloud.im.controller.serverapi; package com.wecloud.im.controller.serverapi;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.param.add.ImConversationRestApiCreate;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.MyConversationListVo; import com.wecloud.im.vo.MyConversationListVo;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
...@@ -12,6 +14,8 @@ import io.swagger.annotations.ApiOperation; ...@@ -12,6 +14,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
...@@ -35,6 +39,31 @@ public class ApiImConversationController extends BaseController { ...@@ -35,6 +39,31 @@ public class ApiImConversationController extends BaseController {
@Autowired @Autowired
private ImApplicationService imApplicationService; private ImApplicationService imApplicationService;
/**
* 服务端创建会话
*/
@PostMapping("/create")
@ApiOperation(value = "服务端创建会话", notes = "后台可配置:两个客户端如果已经创建过会话,是否重复创建会话")
public ApiResult<ImConversationCreateVo> createImConversation(@RequestBody ImConversationRestApiCreate imConversationRestApiCreate
, @RequestHeader String appkey, @RequestHeader String appSecret) throws Exception {
// 根据appKey从数据库查询密钥
ImApplication imApplication = imApplicationService.getOneByAppKey(appkey);
if (imApplication == null) {
return ApiResult.result(ApiCode.FAIL, null);
}
// 校验appkey 和appSecret
if (!imApplication.getAppSecret().equals(appSecret)) {
return ApiResult.result(ApiCode.FAIL, null);
}
return imConversationService.createImConversationRestApi(imConversationRestApiCreate, appkey, appSecret);
}
/** /**
* 获取会话表详情 * 获取会话表详情
*/ */
......
package com.wecloud.im.param.add;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.HashMap;
import java.util.List;
/**
* 服务端创建会话
*
* @author wei
* @since 2022年06月21日11:36:38
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "ImConversationCreate")
public class ImConversationRestApiCreate extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("可选 对话的名字,可为群组命名。")
private String name;
@ApiModelProperty("json格式,可选 自定义属性,供开发者扩展使用。")
private HashMap attributes;
@ApiModelProperty("可选 邀请加入会话的客户端,如创建单聊,则填入对方的clientId")
private List<String> clientIds;
@ApiModelProperty("创建者")
private String creator;
}
...@@ -10,6 +10,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate; ...@@ -10,6 +10,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate; import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate; import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate; import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.param.add.ImConversationRestApiCreate;
import com.wecloud.im.vo.ImConversationCreateVo; import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.MyConversationListVo; import com.wecloud.im.vo.MyConversationListVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
...@@ -44,6 +45,8 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -44,6 +45,8 @@ public interface ImConversationService extends BaseService<ImConversation> {
*/ */
ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) throws JsonProcessingException; ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) throws JsonProcessingException;
ApiResult<ImConversationCreateVo> createImConversationRestApi(ImConversationRestApiCreate imConversationRestApiCreate, String appkey, String appSecret) throws JsonProcessingException;
/** /**
* 将用户添加进会话 * 将用户添加进会话
......
...@@ -22,6 +22,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate; ...@@ -22,6 +22,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate; import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate; import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate; import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.param.add.ImConversationRestApiCreate;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
...@@ -224,6 +225,137 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -224,6 +225,137 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
} }
@Override @Override
public ApiResult<ImConversationCreateVo> createImConversationRestApi(ImConversationRestApiCreate imConversationRestApiCreate, String appkey, String appSecret) throws JsonProcessingException {
if (imConversationRestApiCreate.getClientIds().size() == 0) {
log.info("没有成员");
return ApiResult.result(ApiCode.CLIENT_NOT_FOUNT, null);
}
// 根据appKey查询appid
ImApplication imApplication = imApplicationService.getOneByAppKey(appkey);
// 创建者
ImClient createClient = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, imConversationRestApiCreate.getCreator()));
if (createClient == null) {
log.info("没有创建者");
return ApiResult.result(ApiCode.CLIENT_NOT_FOUNT, null);
}
// 成员不存在,不能创建会话
for (String id : imConversationRestApiCreate.getClientIds()) {
ImClient imClient = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.select(ImClient::getId)
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, id));
if (imClient == null) {
log.info("成员不存在,不能创建会话 client2 == null");
return ApiResult.result(ApiCode.CLIENT_NOT_FOUNT, null);
}
}
// 该应用 是否允许创建重复一对一会话 0不允许 1允许
if (imApplication.getRepeatSessionStatus() != null && imApplication.getRepeatSessionStatus() == 0) {
// 判断是否已经存在一对一会话
// size() == 1 为单聊不允许重复创建 两个用户如果已经创建过会话,不能重复创建会话
if (imConversationRestApiCreate.getClientIds().size() == 1) {
ImClient client2 = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, createClient.getFkAppid())
.eq(ImClient::getClientId, imConversationRestApiCreate.getClientIds().get(0)));
// 是否存在重复一对一会话
Integer repetitionConversation = getRepetitionConversation(createClient.getId(), client2.getId());
if (repetitionConversation != 0) {
log.info("repetitionConversation != 0");
// 返回已存在的一对一会话id
ImConversation repetitionConversationInfo = imConversationMapper.getRepetitionConversationInfo(createClient.getId(), client2.getId());
ImConversationCreateVo createVo = new ImConversationCreateVo();
createVo.setId(repetitionConversationInfo.getId());
return ApiResult.ok(createVo);
}
}
} else {
//创建重复一对一会话时对比扩展字段 1是
if (imApplication.getContrastExtendedFieldStatus() == 1) {
// 被邀请client
ImClient inviteClient = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, createClient.getFkAppid())
.eq(ImClient::getClientId, imConversationRestApiCreate.getClientIds().get(0)));
JsonMapper jsonMapper = new JsonMapper();
String asString = jsonMapper.writeValueAsString(imConversationRestApiCreate.getAttributes());
log.info("RequestAttributes:" + asString);
Long repetitionConversation = getRepetitionConversationAttributes(createClient.getId(), inviteClient.getId(), asString);
// 存在重复会话
if (repetitionConversation != null) {
log.info("出现Attributes重复");
ImConversationCreateVo createVo = new ImConversationCreateVo();
createVo.setId(repetitionConversation);
// 为重复
return ApiResult.ok(createVo);
}
}
}
// 会话id
Long imConversationId = SnowflakeUtil.getId();
// 创建者
Long creator = createClient.getId();
// 创建会话
ImConversation imConversation = new ImConversation();
imConversation.setId(imConversationId);
imConversation.setCreateTime(new Date());
imConversation.setLastMessage(null);
imConversation.setFkAppid(createClient.getFkAppid());
imConversation.setCreator(creator);
imConversation.setName(imConversationRestApiCreate.getName());
imConversation.setSystem(false);
JsonMapper jsonMapper = new JsonMapper();
// 拓展数据
String writeValueAsString = jsonMapper.writeValueAsString(imConversationRestApiCreate.getAttributes());
imConversation.setAttributes(writeValueAsString);
imConversationService.save(imConversation);
// 将创建者自己添加到会话
Long imConversationMembersId = SnowflakeUtil.getId();
ImConversationMembers imConversationMembers = new ImConversationMembers();
imConversationMembers.setId(imConversationMembersId);
imConversationMembers.setCreateTime(new Date());
imConversationMembers.setFkAppid(createClient.getFkAppid());
imConversationMembers.setFkConversationId(imConversationId);
imConversationMembers.setFkClientId(creator);
imConversationMembersService.save(imConversationMembers);
// 将他人添加到会话
for (String id : imConversationRestApiCreate.getClientIds()) {
ImClient client2 = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, createClient.getFkAppid())
.eq(ImClient::getClientId, id));
Long imConversationMembersId2 = SnowflakeUtil.getId();
ImConversationMembers imConversationMembers2 = new ImConversationMembers();
imConversationMembers2.setId(imConversationMembersId2);
imConversationMembers2.setCreateTime(new Date());
imConversationMembers2.setFkAppid(createClient.getFkAppid());
imConversationMembers2.setFkConversationId(imConversationId);
imConversationMembers2.setFkClientId(client2.getId());
imConversationMembersService.save(imConversationMembers2);
}
ImConversationCreateVo createVo = new ImConversationCreateVo();
createVo.setId(imConversationId);
return ApiResult.ok(createVo);
}
@Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> addClientToConversation(ImClientToConversation imClientToConversation) { public ApiResult<Boolean> addClientToConversation(ImClientToConversation imClientToConversation) {
...@@ -321,11 +453,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -321,11 +453,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
String imApplicationAppKey = imApplication.getAppKey(); String imApplicationAppKey = imApplication.getAppKey();
sendEventMsg(messageId, (HashMap) content, fkConversationId, clientId, toClientId, imApplicationAppKey); sendEventMsg(messageId, (HashMap) content, fkConversationId, clientId, toClientId, imApplicationAppKey);
// 遍历发送 // 遍历发送
for (ImConversationMembers conversationMembers : membersList) { for (ImConversationMembers conversationMembers : membersList) {
// 查询接收方 // 查询接收方
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda() ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId()) .eq(ImClient::getFkAppid, imApplication.getId())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment