|
@@ -161,6 +161,47 @@ public class MembershipService implements MembershipServiceInterface {
|
|
|
return level != null ? toLevelDTO(level) : null;
|
|
return level != null ? toLevelDTO(level) : null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将原家庭的活跃付费会员合并到目标家庭(成员被邀请走时调用)
|
|
|
|
|
+ * 规则:
|
|
|
|
|
+ * - 原家庭存在活跃付费会员(paymentStatus=paid 且未过期)时,把该会员记录转移到目标家庭
|
|
|
|
|
+ * - 若目标家庭已有到期日晚于原家庭会员的活跃付费会员,则跳过(目标家庭权益不低于原家庭)
|
|
|
|
|
+ * @return 是否发生了合并
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean mergeMembershipToTargetFamily(Long oldFamilyId, Long targetFamilyId) {
|
|
|
|
|
+ if (oldFamilyId == null || targetFamilyId == null || oldFamilyId.equals(targetFamilyId)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ FamilyMembership oldMembership = membershipMapper.selectOne(
|
|
|
|
|
+ new LambdaQueryWrapper<FamilyMembership>()
|
|
|
|
|
+ .eq(FamilyMembership::getFamilyId, oldFamilyId)
|
|
|
|
|
+ .eq(FamilyMembership::getPaymentStatus, "paid")
|
|
|
|
|
+ .gt(FamilyMembership::getEndDate, now)
|
|
|
|
|
+ .orderByDesc(FamilyMembership::getEndDate)
|
|
|
|
|
+ .last("LIMIT 1"));
|
|
|
|
|
+ if (oldMembership == null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 目标家庭已有更晚到期的活跃会员则不覆盖
|
|
|
|
|
+ FamilyMembership targetMembership = membershipMapper.selectOne(
|
|
|
|
|
+ new LambdaQueryWrapper<FamilyMembership>()
|
|
|
|
|
+ .eq(FamilyMembership::getFamilyId, targetFamilyId)
|
|
|
|
|
+ .eq(FamilyMembership::getPaymentStatus, "paid")
|
|
|
|
|
+ .gt(FamilyMembership::getEndDate, now)
|
|
|
|
|
+ .orderByDesc(FamilyMembership::getEndDate)
|
|
|
|
|
+ .last("LIMIT 1"));
|
|
|
|
|
+ if (targetMembership != null && targetMembership.getEndDate().after(oldMembership.getEndDate())) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ oldMembership.setFamilyId(targetFamilyId);
|
|
|
|
|
+ oldMembership.setUpdatedAt(now);
|
|
|
|
|
+ membershipMapper.updateById(oldMembership);
|
|
|
|
|
+ log.info("会员合并: 原家庭{}的{}会员(至{})合并到目标家庭{}",
|
|
|
|
|
+ oldFamilyId, oldMembership.getLevelCode(), oldMembership.getEndDate(), targetFamilyId);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 检查功能权限
|
|
* 检查功能权限
|
|
|
*/
|
|
*/
|