This commit is contained in:
hy001 2026-05-23 19:07:47 +08:00
parent 5359be337d
commit 32543b958c
6 changed files with 37 additions and 75 deletions

View File

@ -106,7 +106,7 @@ public class ProcessCpApplyCmd {
cmd.requireReqSysOrigin(), relationType); cmd.requireReqSysOrigin(), relationType);
} }
sendAutoRejectedNotices(autoRefuseWaitAppliesAfterAgree(cpApply, relationType)); autoRefuseWaitAppliesAfterAgree(cpApply, relationType);
cpRelationshipCacheService.remove(Arrays.asList(cpApply.getSendApplyUserId(), cpApply.getAcceptApplyUserId())); cpRelationshipCacheService.remove(Arrays.asList(cpApply.getSendApplyUserId(), cpApply.getAcceptApplyUserId()));
cpRelationBroadcastMqClient.publish(cmd.requireReqSysOrigin(), cpApply.getId(), cpRelationBroadcastMqClient.publish(cmd.requireReqSysOrigin(), cpApply.getId(),
@ -126,24 +126,12 @@ public class ProcessCpApplyCmd {
imMessageClient.sendCustomMessage(agree imMessageClient.sendCustomMessage(agree
? CpRelationC2cNoticeUtils.buildAccepted(cpApply, senderProfile, acceptProfile) ? CpRelationC2cNoticeUtils.buildAccepted(cpApply, senderProfile, acceptProfile)
: CpRelationC2cNoticeUtils.buildRejected(cpApply, senderProfile, acceptProfile)); : CpRelationC2cNoticeUtils.buildRejected(cpApply, senderProfile, acceptProfile));
imMessageClient.sendCustomMessage(agree
? CpRelationC2cNoticeUtils.buildAcceptedToAcceptUser(cpApply, senderProfile,
acceptProfile)
: CpRelationC2cNoticeUtils.buildRejectedToAcceptUser(cpApply, senderProfile,
acceptProfile));
} catch (Exception ex) { } catch (Exception ex) {
log.warn("[CP] send process c2c notice failed, applyId={}, agree={}, reason={}", log.warn("[CP] send process c2c notice failed, applyId={}, agree={}, reason={}",
cpApply.getId(), agree, ex.getMessage(), ex); cpApply.getId(), agree, ex.getMessage(), ex);
} }
} }
private void sendAutoRejectedNotices(List<CpApply> refusedApplies) {
if (Objects.isNull(refusedApplies) || refusedApplies.isEmpty()) {
return;
}
refusedApplies.forEach(apply -> sendProcessNotice(apply, false));
}
private List<CpApply> autoRefuseWaitAppliesAfterAgree(CpApply cpApply, String relationType) { private List<CpApply> autoRefuseWaitAppliesAfterAgree(CpApply cpApply, String relationType) {
Map<Long, CpApply> refusedApplyMap = new LinkedHashMap<>(); Map<Long, CpApply> refusedApplyMap = new LinkedHashMap<>();
addRefusedApplies(refusedApplyMap, addRefusedApplies(refusedApplyMap,

View File

@ -185,6 +185,9 @@ public class SendCpApplyCmdExe {
CpRelationshipType relationType, String title) { CpRelationshipType relationType, String title) {
imMessageClient.sendCustomMessage(CpRelationC2cNoticeUtils.buildInvitePending(sendUserId, imMessageClient.sendCustomMessage(CpRelationC2cNoticeUtils.buildInvitePending(sendUserId,
acceptUserId, applyId, userProfile, acceptUserProfile, isReconcile, relationType, title)); acceptUserId, applyId, userProfile, acceptUserProfile, isReconcile, relationType, title));
imMessageClient.sendCustomMessage(CpRelationC2cNoticeUtils.buildInvitePendingToSendUser(
sendUserId, acceptUserId, applyId, userProfile, acceptUserProfile, isReconcile, relationType,
title));
} }
private BigDecimal normalizeApplyConsumeGold(BigDecimal applyConsumeGold) { private BigDecimal normalizeApplyConsumeGold(BigDecimal applyConsumeGold) {

View File

@ -25,6 +25,20 @@ public final class CpRelationC2cNoticeUtils {
public static CustomC2cMsgBodyCmd buildInvitePending(Long fromUserId, Long toUserId, public static CustomC2cMsgBodyCmd buildInvitePending(Long fromUserId, Long toUserId,
Long applyId, UserProfileDTO senderProfile, UserProfileDTO acceptProfile, Long applyId, UserProfileDTO senderProfile, UserProfileDTO acceptProfile,
boolean isReconcile, CpRelationshipType relationType, String title) { boolean isReconcile, CpRelationshipType relationType, String title) {
return buildInvitePendingMessage(fromUserId, toUserId, applyId, senderProfile, acceptProfile,
isReconcile, relationType, title);
}
public static CustomC2cMsgBodyCmd buildInvitePendingToSendUser(Long sendUserId, Long acceptUserId,
Long applyId, UserProfileDTO senderProfile, UserProfileDTO acceptProfile,
boolean isReconcile, CpRelationshipType relationType, String title) {
return buildInvitePendingMessage(acceptUserId, sendUserId, applyId, senderProfile,
acceptProfile, isReconcile, relationType, title);
}
private static CustomC2cMsgBodyCmd buildInvitePendingMessage(Long fromUserId, Long toUserId,
Long applyId, UserProfileDTO senderProfile, UserProfileDTO acceptProfile,
boolean isReconcile, CpRelationshipType relationType, String title) {
Map<String, Object> content = senderContent(senderProfile); Map<String, Object> content = senderContent(senderProfile);
content.put("applyType", isReconcile ? "RECONCILE" : "APPLY"); content.put("applyType", isReconcile ? "RECONCILE" : "APPLY");
content.put("relationType", relationType.name()); content.put("relationType", relationType.name());

View File

@ -76,8 +76,6 @@ public class CpApplyListener implements MessageListener {
} }
imMessageClient.sendCustomMessage( imMessageClient.sendCustomMessage(
CpRelationC2cNoticeUtils.buildExpiredToAcceptUser(cpApply, senderProfile, acceptProfile)); CpRelationC2cNoticeUtils.buildExpiredToAcceptUser(cpApply, senderProfile, acceptProfile));
imMessageClient.sendCustomMessage(
CpRelationC2cNoticeUtils.buildExpiredToSendUser(cpApply, senderProfile, acceptProfile));
} catch (Exception ex) { } catch (Exception ex) {
log.warn("[CP] send expired c2c notice failed, applyId={}, reason={}", cpApply.getId(), log.warn("[CP] send expired c2c notice failed, applyId={}, reason={}", cpApply.getId(),
ex.getMessage(), ex); ex.getMessage(), ex);

View File

@ -40,8 +40,8 @@ class ProcessCpApplyCmdTest {
nullable(Long.class), eq("LIKEI"), eq("BROTHER")); nullable(Long.class), eq("LIKEI"), eq("BROTHER"));
verify(fixture.cpRelationBroadcastMqClient).publish("LIKEI", 3001L, 1001L, 2001L, verify(fixture.cpRelationBroadcastMqClient).publish("LIKEI", 3001L, 1001L, 2001L,
"BROTHER"); "BROTHER");
assertProcessMessagesToBothUsers(fixture.sentCustomMessages(2), 0, assertProcessMessage(fixture.sentCustomMessage(),
"RELATION_ESTABLISHED", "ACCEPTED", true, "BROTHER", 3001L, 1001L, 2001L); "RELATION_ESTABLISHED", "ACCEPTED", true, "BROTHER");
} }
@Test @Test
@ -54,8 +54,8 @@ class ProcessCpApplyCmdTest {
nullable(Long.class), eq("LIKEI"), eq("SISTERS")); nullable(Long.class), eq("LIKEI"), eq("SISTERS"));
verify(fixture.cpRelationBroadcastMqClient).publish("LIKEI", 3001L, 1001L, 2001L, verify(fixture.cpRelationBroadcastMqClient).publish("LIKEI", 3001L, 1001L, 2001L,
"SISTERS"); "SISTERS");
assertProcessMessagesToBothUsers(fixture.sentCustomMessages(2), 0, assertProcessMessage(fixture.sentCustomMessage(),
"RELATION_ESTABLISHED", "ACCEPTED", true, "SISTERS", 3001L, 1001L, 2001L); "RELATION_ESTABLISHED", "ACCEPTED", true, "SISTERS");
} }
@Test @Test
@ -64,8 +64,8 @@ class ProcessCpApplyCmdTest {
fixture.exe.execute(processCmd(false)); fixture.exe.execute(processCmd(false));
assertProcessMessagesToBothUsers(fixture.sentCustomMessages(2), 0, assertProcessMessage(fixture.sentCustomMessage(),
"RELATION_REJECTED", "REJECTED", false, "CP", 3001L, 1001L, 2001L); "RELATION_REJECTED", "REJECTED", false, "CP");
} }
@Test @Test
@ -85,7 +85,7 @@ class ProcessCpApplyCmdTest {
} }
@Test @Test
void agreeApplyShouldRejectOtherWaitAppliesBetweenSameUsers() { void agreeApplyShouldAutoRefuseOtherWaitAppliesBetweenSameUsersWithoutRejectedIm() {
Fixture fixture = new Fixture("CP"); Fixture fixture = new Fixture("CP");
when(fixture.cpApplyService.refuseOtherWaitAppliesBetweenUsers(3001L, 1001L, 2001L)) when(fixture.cpApplyService.refuseOtherWaitAppliesBetweenUsers(3001L, 1001L, 2001L))
.thenReturn(List.of(apply(3002L, "BROTHER"), apply(3003L, "SISTERS"))); .thenReturn(List.of(apply(3002L, "BROTHER"), apply(3003L, "SISTERS")));
@ -93,13 +93,8 @@ class ProcessCpApplyCmdTest {
fixture.exe.execute(processCmd(true)); fixture.exe.execute(processCmd(true));
verify(fixture.cpApplyService).refuseOtherWaitAppliesBetweenUsers(3001L, 1001L, 2001L); verify(fixture.cpApplyService).refuseOtherWaitAppliesBetweenUsers(3001L, 1001L, 2001L);
List<CustomC2cMsgBodyCmd> messages = fixture.sentCustomMessages(6); assertProcessMessage(fixture.sentCustomMessage(),
assertProcessMessagesToBothUsers(messages, 0, "RELATION_REJECTED", "REJECTED", false, "RELATION_ESTABLISHED", "ACCEPTED", true, "CP");
"BROTHER", 3002L, 1001L, 2001L);
assertProcessMessagesToBothUsers(messages, 2, "RELATION_REJECTED", "REJECTED", false,
"SISTERS", 3003L, 1001L, 2001L);
assertProcessMessagesToBothUsers(messages, 4, "RELATION_ESTABLISHED", "ACCEPTED", true,
"CP", 3001L, 1001L, 2001L);
} }
@Test @Test
@ -118,17 +113,8 @@ class ProcessCpApplyCmdTest {
fixture.exe.execute(processCmd(true)); fixture.exe.execute(processCmd(true));
List<CustomC2cMsgBodyCmd> messages = fixture.sentCustomMessages(10); assertProcessMessage(fixture.sentCustomMessage(),
assertProcessMessagesToBothUsers(messages, 0, "RELATION_REJECTED", "REJECTED", false, "RELATION_ESTABLISHED", "ACCEPTED", true, "CP");
"BROTHER", 3002L, 1001L, 2001L);
assertProcessMessagesToBothUsers(messages, 2, "RELATION_REJECTED", "REJECTED", false,
"SISTERS", 3003L, 1001L, 2001L);
assertProcessMessagesToBothUsers(messages, 4, "RELATION_REJECTED", "REJECTED", false,
"CP", 3004L, 1001L, 4001L);
assertProcessMessagesToBothUsers(messages, 6, "RELATION_REJECTED", "REJECTED", false,
"CP", 3005L, 1001L, 4002L);
assertProcessMessagesToBothUsers(messages, 8, "RELATION_ESTABLISHED", "ACCEPTED", true,
"CP", 3001L, 1001L, 2001L);
} }
@Test @Test
@ -145,13 +131,8 @@ class ProcessCpApplyCmdTest {
fixture.exe.execute(processCmd(true)); fixture.exe.execute(processCmd(true));
List<CustomC2cMsgBodyCmd> messages = fixture.sentCustomMessages(6); assertProcessMessage(fixture.sentCustomMessage(),
assertProcessMessagesToBothUsers(messages, 0, "RELATION_REJECTED", "REJECTED", false, "RELATION_ESTABLISHED", "ACCEPTED", true, "CP");
"CP", 3002L, 1001L, 4001L);
assertProcessMessagesToBothUsers(messages, 2, "RELATION_REJECTED", "REJECTED", false,
"CP", 3003L, 1001L, 4002L);
assertProcessMessagesToBothUsers(messages, 4, "RELATION_ESTABLISHED", "ACCEPTED", true,
"CP", 3001L, 1001L, 2001L);
} }
@Test @Test
@ -164,8 +145,8 @@ class ProcessCpApplyCmdTest {
verify(fixture.cpApplyService, never()).refuseWaitAppliesByUserAndRelation( verify(fixture.cpApplyService, never()).refuseWaitAppliesByUserAndRelation(
any(Long.class), eq(1001L), eq("BROTHER")); any(Long.class), eq(1001L), eq("BROTHER"));
assertProcessMessagesToBothUsers(fixture.sentCustomMessages(2), 0, assertProcessMessage(fixture.sentCustomMessage(),
"RELATION_ESTABLISHED", "ACCEPTED", true, "BROTHER", 3001L, 1001L, 2001L); "RELATION_ESTABLISHED", "ACCEPTED", true, "BROTHER");
} }
@Test @Test
@ -182,13 +163,8 @@ class ProcessCpApplyCmdTest {
fixture.exe.execute(processCmd(true)); fixture.exe.execute(processCmd(true));
List<CustomC2cMsgBodyCmd> messages = fixture.sentCustomMessages(6); assertProcessMessage(fixture.sentCustomMessage(),
assertProcessMessagesToBothUsers(messages, 0, "RELATION_REJECTED", "REJECTED", false, "RELATION_ESTABLISHED", "ACCEPTED", true, "BROTHER");
"BROTHER", 3002L, 1001L, 4001L);
assertProcessMessagesToBothUsers(messages, 2, "RELATION_REJECTED", "REJECTED", false,
"BROTHER", 3003L, 1001L, 4002L);
assertProcessMessagesToBothUsers(messages, 4, "RELATION_ESTABLISHED", "ACCEPTED", true,
"BROTHER", 3001L, 1001L, 2001L);
} }
private static ProcessApplyCmd processCmd(boolean agree) { private static ProcessApplyCmd processCmd(boolean agree) {
@ -251,15 +227,6 @@ class ProcessCpApplyCmdTest {
.contains("\"relationType\":\"" + relationType + "\"")); .contains("\"relationType\":\"" + relationType + "\""));
} }
private static void assertProcessMessagesToBothUsers(List<CustomC2cMsgBodyCmd> messages,
int startIndex, String action, String status, Boolean agree, String relationType,
Long applyId, Long sendUserId, Long acceptUserId) {
assertProcessMessage(messages.get(startIndex), action, status, agree, relationType, applyId,
String.valueOf(acceptUserId), String.valueOf(sendUserId));
assertProcessMessage(messages.get(startIndex + 1), action, status, agree, relationType,
applyId, String.valueOf(sendUserId), String.valueOf(acceptUserId));
}
private static class Fixture { private static class Fixture {
private final CpApplyService cpApplyService = mock(CpApplyService.class); private final CpApplyService cpApplyService = mock(CpApplyService.class);
@ -306,13 +273,6 @@ class ProcessCpApplyCmdTest {
return captor.getValue(); return captor.getValue();
} }
private List<CustomC2cMsgBodyCmd> sentCustomMessages(int count) {
ArgumentCaptor<CustomC2cMsgBodyCmd> captor = ArgumentCaptor.forClass(
CustomC2cMsgBodyCmd.class);
verify(imMessageClient, org.mockito.Mockito.times(count)).sendCustomMessage(captor.capture());
return captor.getAllValues();
}
private static UserProfile profile(Long userId) { private static UserProfile profile(Long userId) {
UserProfile userProfile = new UserProfile(); UserProfile userProfile = new UserProfile();
userProfile.setId(userId); userProfile.setId(userId);

View File

@ -31,7 +31,7 @@ import org.mockito.ArgumentCaptor;
class CpApplyListenerTest { class CpApplyListenerTest {
@Test @Test
void waitApplyExpiredShouldSendC2cMessageToBothUsers() { void waitApplyExpiredShouldSendOneC2cMessageToConversation() {
CpApplyService cpApplyService = mock(CpApplyService.class); CpApplyService cpApplyService = mock(CpApplyService.class);
ImMessageClient imMessageClient = mock(ImMessageClient.class); ImMessageClient imMessageClient = mock(ImMessageClient.class);
UserProfileGateway userProfileGateway = mock(UserProfileGateway.class); UserProfileGateway userProfileGateway = mock(UserProfileGateway.class);
@ -66,10 +66,9 @@ class CpApplyListenerTest {
ArgumentCaptor<CustomC2cMsgBodyCmd> captor = ArgumentCaptor.forClass( ArgumentCaptor<CustomC2cMsgBodyCmd> captor = ArgumentCaptor.forClass(
CustomC2cMsgBodyCmd.class); CustomC2cMsgBodyCmd.class);
verify(imMessageClient, org.mockito.Mockito.times(2)).sendCustomMessage(captor.capture()); verify(imMessageClient).sendCustomMessage(captor.capture());
List<CustomC2cMsgBodyCmd> messages = captor.getAllValues(); List<CustomC2cMsgBodyCmd> messages = captor.getAllValues();
assertExpiredMessage(messages.get(0), "1001", "2001"); assertExpiredMessage(messages.get(0), "1001", "2001");
assertExpiredMessage(messages.get(1), "2001", "1001");
verify(cpApplyService).changeStatusById(3001L, CpApplyStatus.EXPIRE); verify(cpApplyService).changeStatusById(3001L, CpApplyStatus.EXPIRE);
} }