徽章增加manager类型

This commit is contained in:
tianfeng 2025-11-21 19:19:27 +08:00
parent 7d4ab3e68a
commit 1630fc9383
5 changed files with 377 additions and 30 deletions

View File

@ -12,6 +12,8 @@ import com.red.circle.console.inner.error.ConsoleErrorCode;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.framework.core.response.CommonErrorCode;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.other.inner.endpoint.team.bd.BdTeamInfoClient;
import com.red.circle.other.inner.endpoint.team.bd.BdTeamMemberClient;
import com.red.circle.other.inner.endpoint.user.user.UserGoldCoinRechargeClient;
@ -19,6 +21,7 @@ import com.red.circle.other.inner.endpoint.user.user.UserInviteUserClient;
import com.red.circle.other.inner.endpoint.team.logs.TeamImportanceLogClient;
import com.red.circle.other.inner.endpoint.team.logs.TeamProcessApprovalClient;
import com.red.circle.other.inner.endpoint.team.target.UserHistoryIdentityClient;
import com.red.circle.other.inner.enums.material.BadgeKeyEnum;
import com.red.circle.other.inner.model.cmd.team.bd.BdTeamPageQryCmd;
import com.red.circle.other.inner.model.cmd.team.bd.BdTeamUpdateOpsCmd;
import com.red.circle.other.inner.model.cmd.team.bd.BdTeamWorkStatisticsQryCmd;
@ -71,6 +74,7 @@ public class TeamBDInfoServiceImpl implements TeamBDInfoService {
private final TeamImportanceLogClient teamImportanceLogClient;
private final TeamProcessApprovalClient teamProcessApprovalClient;
private final UserHistoryIdentityClient userHistoryIdentityClient;
private final UserMqMessageService userMqMessageService;
private final UserGoldCoinRechargeClient userGoldCoinRechargeClient;
@ -343,6 +347,8 @@ public class TeamBDInfoServiceImpl implements TeamBDInfoService {
);
userHistoryIdentityClient.saveBd(userProfile.getId());
userMqMessageService.sendBadgeOperateEvent(userProfile.getId(), BadgeKeyEnum.BD.name(), BadgeOperateEvent.OperationType.WEAR.name());
}
@Override
@ -373,6 +379,8 @@ public class TeamBDInfoServiceImpl implements TeamBDInfoService {
.setCreateUserOrigin(1)
);
userMqMessageService.sendBadgeOperateEvent(db.getUserId(), BadgeKeyEnum.BD.name(), BadgeOperateEvent.OperationType.REMOVE.name());
// 获得需要被移除的成员
List<BdTeamMemberDTO> teamList = bdTeamMemberClient
.listByUserId(db.getUserId()).getBody();

View File

@ -152,6 +152,9 @@ public class TeamLeaderBDServiceImpl implements TeamLeaderBDService {
userHistoryIdentityClient.saveBd(cmd.getUserId());
userMqMessageService.sendBadgeOperateEvent(cmd.getUserId(), BadgeKeyEnum.BD.name(), BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(cmd.getUserId(), BadgeKeyEnum.BD_LEADER.name(), BadgeOperateEvent.OperationType.WEAR.name());
if (Objects.nonNull(bd)) {
bd.setUpdateUser(cmd.getUpdateUser());
bd.setBdLeadUserId(cmd.getUserId());
@ -171,8 +174,6 @@ public class TeamLeaderBDServiceImpl implements TeamLeaderBDService {
.setBdLeadUserId(cmd.getUserId())
);
userMqMessageService.sendBadgeOperateEvent(cmd.getUserId(), BadgeKeyEnum.BD.name(), BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(cmd.getUserId(), BadgeKeyEnum.BD_LEADER.name(), BadgeOperateEvent.OperationType.WEAR.name());
}
@Override

View File

@ -125,6 +125,7 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic
}
administratorService.removeById(id);
userMqMessageService.sendBadgeOperateEvent(sysAdministrator.getUserId(), BadgeKeyEnum.MANAGER.name(), BadgeOperateEvent.OperationType.REMOVE.name());
userMqMessageService.sendBadgeOperateEvent(sysAdministrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name());
userMqMessageService.sendBadgeOperateEvent(sysAdministrator.getUserId(), BadgeKeyEnum.ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name());
userProfileGateway.removeCache(sysAdministrator.getUserId());
@ -148,17 +149,11 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic
}
if (param.isDisable()) {
if (Arrays.asList(RoomRolesEnum.SUPER_ADMIN.name(),
RoomRolesEnum.MANAGER.name()).contains(administrator.getRoles())) {
userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name());
}
userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name());
userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.MANAGER.name(), BadgeOperateEvent.OperationType.REMOVE.name());
userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name());
}else {
if (Arrays.asList(RoomRolesEnum.SUPER_ADMIN.name(),
RoomRolesEnum.MANAGER.name()).contains(administrator.getRoles())) {
userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.WEAR.name());
}
userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.ADMIN.name(), BadgeOperateEvent.OperationType.WEAR.name());
changeBadge(administrator.getRoles(), administrator.getUserId());
}
userProfileGateway.removeCache(administrator.getUserId());
@ -182,24 +177,34 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic
Long userId = administrator.getUserId();
if (RoomRolesEnum.ADMIN.name().equals(roles)) {
// 发送ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
// 清除SUPER_ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.REMOVE.name());
} else if (RoomRolesEnum.SUPER_ADMIN.name().equals(roles)) {
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
} else if (RoomRolesEnum.MANAGER.name().equals(roles)) {
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
}
changeBadge(roles, userId);
}
private void changeBadge(String roles, Long userId) {
if (RoomRolesEnum.ADMIN.name().equals(roles)) {
// 发送ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
// 清除SUPER_ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.REMOVE.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.MANAGER.name(),
BadgeOperateEvent.OperationType.REMOVE.name());
} else if (RoomRolesEnum.SUPER_ADMIN.name().equals(roles)) {
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.MANAGER.name(),
BadgeOperateEvent.OperationType.REMOVE.name());
} else if (RoomRolesEnum.MANAGER.name().equals(roles)) {
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.MANAGER.name(),
BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name());
}
}
}

View File

@ -14,7 +14,7 @@ public class ApiTest {
@Test
public void testPassword() {
System.out.println(new BCryptPasswordEncoder().encode("aa1234567890"));
System.out.println(new BCryptPasswordEncoder().encode("123456"));
}
@Test

View File

@ -0,0 +1,333 @@
package badge;
import com.red.circle.OtherServiceApplication;
import com.red.circle.framework.dto.PageQuery;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMember;
import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberService;
import com.red.circle.other.infra.database.rds.entity.sys.Administrator;
import com.red.circle.other.infra.database.rds.entity.team.BusinessDevelopmentBaseInfo;
import com.red.circle.other.infra.database.rds.entity.team.RoomBdLead;
import com.red.circle.other.infra.database.rds.service.sys.AdministratorService;
import com.red.circle.other.infra.database.rds.service.team.BusinessDevelopmentBaseInfoService;
import com.red.circle.other.infra.database.rds.service.team.RoomBdLeadService;
import com.red.circle.other.inner.enums.material.BadgeKeyEnum;
import com.red.circle.other.inner.enums.team.TeamMemberRole;
import com.red.circle.wallet.inner.endpoint.freight.FreightGoldClient;
import com.red.circle.wallet.inner.model.cmd.UserFreightBalancePageQryCmd;
import com.red.circle.wallet.inner.model.dto.UserFreightBalanceDTO;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@SpringBootTest(classes = OtherServiceApplication.class)
@RunWith(SpringRunner.class)
public class BatchSendBadgeTest {
@Autowired
private TeamMemberService teamMemberService;
@Autowired
private UserMqMessageService userMqMessageService;
@Autowired
private BusinessDevelopmentBaseInfoService businessDevelopmentBaseInfoService;
@Autowired
private RoomBdLeadService roomBdLeadService;
@Autowired
private AdministratorService administratorService;
@Autowired
private FreightGoldClient freightGoldClient;
// 线程池大小
private static final int THREAD_POOL_SIZE = 10;
// 每批次处理间隔毫秒
private static final long BATCH_INTERVAL_MS = 200;
@Test
public void batchSendBadgeTest() throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
try {
// 1. 批量发放代理主播勋章 (HOST + AGENCY)
// sendHostAndAgencyBadges(executor);
// 2. 批量发放BD LEADER勋章
// sendBdLeaderBadges(executor);
// 3. 批量发放BD勋章
// sendBdBadges(executor);
// 4. 批量发放管理员勋章
// sendAdminBadges(executor);
// 5. 批量发放金币代理勋章
sendRechargeAgencyBadges(executor);
} finally {
executor.shutdown();
executor.awaitTermination(1, TimeUnit.HOURS);
log.info("所有勋章发放任务完成");
}
}
/**
* 发放代理主播勋章.
*/
private void sendHostAndAgencyBadges(ExecutorService executor) {
List<TeamMember> list = teamMemberService.list();
log.info("开始发放代理主播勋章,总数: {}", list.size());
AtomicInteger counter = new AtomicInteger(0);
list.forEach(teamMember -> {
executor.submit(() -> {
try {
Long userId = teamMember.getMemberId();
// 发放主播勋章
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.HOST.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
if (teamMember.getRole() == TeamMemberRole.OWN) {
// 发放代理勋章
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.AGENCY.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
}
int count = counter.incrementAndGet();
if (count % 100 == 0) {
log.info("代理主播勋章发放进度: {}/{}", count, list.size());
}
// 控制发送速率
Thread.sleep(BATCH_INTERVAL_MS);
} catch (Exception e) {
log.error("发放代理主播勋章失败, userId: {}", teamMember.getMemberId(), e);
}
});
});
log.info("代理主播勋章发放任务提交完成");
}
/**
* 发放BD Leader勋章.
*/
private void sendBdLeaderBadges(ExecutorService executor) {
List<RoomBdLead> list = roomBdLeadService.list();
log.info("开始发放BD Leader勋章总数: {}", list.size());
AtomicInteger counter = new AtomicInteger(0);
list.forEach(bdLead -> {
executor.submit(() -> {
try {
Long userId = bdLead.getUserId();
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.BD_LEADER.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
int count = counter.incrementAndGet();
if (count % 100 == 0) {
log.info("BD Leader勋章发放进度: {}/{}", count, list.size());
}
Thread.sleep(BATCH_INTERVAL_MS);
} catch (Exception e) {
log.error("发放BD Leader勋章失败, userId: {}", bdLead.getUserId(), e);
}
});
});
log.info("BD Leader勋章发放任务提交完成");
}
/**
* 发放BD勋章.
*/
private void sendBdBadges(ExecutorService executor) {
List<BusinessDevelopmentBaseInfo> list = businessDevelopmentBaseInfoService.listAll();
log.info("开始发放BD勋章总数: {}", list.size());
AtomicInteger counter = new AtomicInteger(0);
list.forEach(bd -> {
executor.submit(() -> {
try {
Long userId = bd.getUserId();
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.BD.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
int count = counter.incrementAndGet();
if (count % 100 == 0) {
log.info("BD勋章发放进度: {}/{}", count, list.size());
}
Thread.sleep(BATCH_INTERVAL_MS);
} catch (Exception e) {
log.error("发放BD勋章失败, userId: {}", bd.getUserId(), e);
}
});
});
log.info("BD勋章发放任务提交完成");
}
/**
* 发放管理员勋章.
*/
private void sendAdminBadges(ExecutorService executor) {
List<Administrator> list = administratorService.list();
log.info("开始发放管理员勋章,总数: {}", list.size());
AtomicInteger counter = new AtomicInteger(0);
list.forEach(admin -> {
executor.submit(() -> {
try {
Long userId = admin.getUserId();
String roles = admin.getRoles();
if (!Boolean.TRUE.equals(admin.getStatus())) {
return;
}
if ("ADMIN".equals(roles)) {
// ADMIN角色只发ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
} else if ("SUPER_ADMIN".equals(roles)) {
// SUPER_ADMIN角色发SUPER_ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
} else if ("MANAGER".equals(roles)) {
// MANAGER角色发SUPER_ADMIN和ADMIN勋章
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.ADMIN.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
}
int count = counter.incrementAndGet();
if (count % 100 == 0) {
log.info("管理员勋章发放进度: {}/{}", count, list.size());
}
Thread.sleep(BATCH_INTERVAL_MS);
} catch (Exception e) {
log.error("发放管理员勋章失败, userId: {}", admin.getUserId(), e);
}
});
});
log.info("管理员勋章发放任务提交完成");
}
/**
* 发放充值代理勋章.
*/
private void sendRechargeAgencyBadges(ExecutorService executor) {
log.info("开始发放充值代理勋章");
AtomicInteger totalCounter = new AtomicInteger(0);
int cursor = 1;
boolean hasMore = true;
while (hasMore) {
PageQuery pageQuery = new PageQuery();
pageQuery.setCursor(cursor);
pageQuery.setLimit(500);
pageQuery.setSearchCount(true);
UserFreightBalancePageQryCmd cmd = new UserFreightBalancePageQryCmd();
cmd.setClose(false);
cmd.setPageQuery(pageQuery);
try {
PageResult<UserFreightBalanceDTO> freightPageResult =
freightGoldClient.pageFreight(cmd).getBody();
Collection<UserFreightBalanceDTO> records = freightPageResult.getRecords();
if (records == null || records.isEmpty()) {
hasMore = false;
break;
}
log.info("充值代理勋章发放,当前页: {}, 本页数量: {}", cursor, records.size());
records.forEach(freight -> {
executor.submit(() -> {
try {
Long userId = freight.getUserId();
if (freight.getClose()) {
return;
}
userMqMessageService.sendBadgeOperateEvent(
userId,
BadgeKeyEnum.RECHARGE_AGENCY.name(),
BadgeOperateEvent.OperationType.WEAR.name()
);
int count = totalCounter.incrementAndGet();
if (count % 100 == 0) {
log.info("充值代理勋章发放进度: {}", count);
}
Thread.sleep(BATCH_INTERVAL_MS);
} catch (Exception e) {
log.error("发放充值代理勋章失败, userId: {}", freight.getUserId(), e);
}
});
});
cursor++;
// 检查是否还有下一页
hasMore = freightPageResult.getTotal() > cursor * 500;
} catch (Exception e) {
log.error("查询充值代理列表失败, cursor: {}", cursor, e);
hasMore = false;
}
}
log.info("充值代理勋章发放任务提交完成,总数: {}", totalCounter.get());
}
}