cp空间分手中数据处理

(cherry picked from commit 2a6ec19d59c4e0bced1e18ec93fe27a54316a090)
This commit is contained in:
tianfeng 2026-04-29 19:19:47 +08:00
parent 16c82d32b4
commit 43ccad87ce

View File

@ -6,17 +6,26 @@ import com.red.circle.other.app.dto.cmd.user.relation.cp.CoupleSpaceQryCmd;
import com.red.circle.other.infra.database.cache.service.cp.CpRelationshipCacheService;
import com.red.circle.other.infra.database.rds.entity.props.CpRingBackpack;
import com.red.circle.other.infra.database.rds.entity.props.PropsSourceRecord;
import com.red.circle.other.infra.database.rds.entity.user.user.BaseInfo;
import com.red.circle.other.infra.database.rds.entity.user.user.CpLevelConfig;
import com.red.circle.other.infra.database.rds.entity.user.user.CpRelationship;
import com.red.circle.other.infra.database.rds.service.props.CpRingBackpackService;
import com.red.circle.other.infra.database.rds.service.props.PropsSourceRecordService;
import com.red.circle.other.infra.database.rds.service.user.user.BaseInfoService;
import com.red.circle.other.infra.database.rds.service.user.user.CpRelationshipService;
import com.red.circle.other.infra.database.rds.service.user.user.CpValueService;
import com.red.circle.other.inner.asserts.user.UserErrorCode;
import com.red.circle.other.inner.enums.material.PropsCommodityType;
import com.red.circle.other.inner.model.dto.material.props.PropsResources;
import com.red.circle.other.inner.model.dto.material.props.UserBackpackProps;
import com.red.circle.other.inner.model.dto.user.CpSimpleUserProfileCO;
import com.red.circle.tool.core.collection.CollectionUtils;
import com.red.circle.tool.core.date.DateUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@ -30,6 +39,9 @@ import java.util.stream.Collectors;
public class CoupleSpaceQryExe {
private final CpRelationshipCacheService cpRelationshipCacheService;
private final CpRelationshipService cpRelationshipService;
private final BaseInfoService baseInfoService;
private final CpValueService cpValueService;
private final CpRingBackpackService cpRingBackpackService;
private final PropsSourceRecordService propsSourceRecordService;
@ -40,6 +52,11 @@ public class CoupleSpaceQryExe {
.filter(cp -> cp.getCpUserId().equals(cmd.getCpUserId()))
.findFirst()
.orElse(null);
if (cpInfo == null) {
cpInfo = buildDismissingCpInfo(cmd.requiredReqUserId(), cmd.getCpUserId());
}
ResponseAssert.notNull(UserErrorCode.USER_INFO_NOT_FOUND, cpInfo);
CoupleSpaceCO co = new CoupleSpaceCO();
@ -73,6 +90,49 @@ public class CoupleSpaceQryExe {
return co;
}
private CpSimpleUserProfileCO buildDismissingCpInfo(Long userId, Long cpUserId) {
CpRelationship dismissing = cpRelationshipService.getDismissingCp(userId, cpUserId);
if (dismissing == null) {
return null;
}
BaseInfo meInfo = baseInfoService.getById(userId);
BaseInfo cpUser = baseInfoService.getById(cpUserId);
if (meInfo == null || cpUser == null) {
return null;
}
BigDecimal cpValue = cpValueService.mapCpVal(Set.of(dismissing.getCpValId()))
.getOrDefault(dismissing.getCpValId(), BigDecimal.ZERO);
Long days = DateUtils.toDurationDays(dismissing.getCreateTime(), DateUtils.now());
String firstDay = dismissing.getCreateTime().toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate().toString();
CpLevelConfig levelConfig = CpLevelConfig.of(cpValue);
return new CpSimpleUserProfileCO()
.setMeUserId(meInfo.getId())
.setMeAccount(meInfo.getAccount())
.setMeUserAvatar(meInfo.getUserAvatar())
.setMeUserNickname(meInfo.getUserNickname())
.setCpUserId(cpUser.getId())
.setCpAccount(cpUser.getAccount())
.setCpUserAvatar(cpUser.getUserAvatar())
.setCpUserNickname(cpUser.getUserNickname())
.setStatus(dismissing.getStatus())
.setCpValId(dismissing.getCpValId())
.setCpValue(cpValue)
.setDays(days)
.setFirstDay(firstDay)
.setCreateTime(dismissing.getCreateTime())
.setCpLevel(levelConfig.getLevel())
.setNextLevelExp(levelConfig.nextExpThreshold())
.setLoveHeartLevel(levelConfig.getLoveHeartLevel())
.setMicEffectLevel(levelConfig.getMicEffectLevel())
.setProfileCardLevel(levelConfig.getProfileCardLevel())
.setGiftWindowLevel(levelConfig.getGiftWindowLevel())
.setHasNonMicEffect(levelConfig.isHasNonMicEffect());
}
private List<UserBackpackProps> buildSharedRingBackpack(Long meUserId, Long cpUserId) {
List<CpRingBackpack> meRings = cpRingBackpackService.listNotExpired(meUserId, cpUserId);
if (CollectionUtils.isEmpty(meRings)) {