|
|
@@ -2,9 +2,9 @@ package com.etotem.cfc.service;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.etotem.cfc.entity.Badge;
|
|
|
-import com.etotem.cfc.entity.ChildBadge;
|
|
|
+import com.etotem.cfc.entity.MemberBadge;
|
|
|
import com.etotem.cfc.mapper.BadgeMapper;
|
|
|
-import com.etotem.cfc.mapper.ChildBadgeMapper;
|
|
|
+import com.etotem.cfc.mapper.MemberBadgeMapper;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
@@ -23,7 +23,7 @@ public class BadgeService {
|
|
|
private BadgeMapper badgeMapper;
|
|
|
|
|
|
@Resource
|
|
|
- private ChildBadgeMapper childBadgeMapper;
|
|
|
+ private MemberBadgeMapper memberBadgeMapper;
|
|
|
|
|
|
// ===== 勋章定义管理 =====
|
|
|
|
|
|
@@ -74,10 +74,10 @@ public class BadgeService {
|
|
|
|
|
|
@Transactional
|
|
|
public void grantBadge(Long memberId, Long badgeId) {
|
|
|
- ChildBadge existing = childBadgeMapper.selectOne(
|
|
|
- new LambdaQueryWrapper<ChildBadge>()
|
|
|
- .eq(ChildBadge::getChildId, memberId)
|
|
|
- .eq(ChildBadge::getBadgeId, badgeId));
|
|
|
+ MemberBadge existing = memberBadgeMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<MemberBadge>()
|
|
|
+ .eq(MemberBadge::getMemberId, memberId)
|
|
|
+ .eq(MemberBadge::getBadgeId, badgeId));
|
|
|
if (existing != null) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -87,7 +87,7 @@ public class BadgeService {
|
|
|
throw new RuntimeException("勋章不存在");
|
|
|
}
|
|
|
|
|
|
- ChildBadge cb = new ChildBadge();
|
|
|
+ MemberBadge cb = new MemberBadge();
|
|
|
cb.setChildId(memberId);
|
|
|
cb.setBadgeId(badgeId);
|
|
|
cb.setEarnedAt(new Date());
|
|
|
@@ -100,62 +100,62 @@ public class BadgeService {
|
|
|
cb.setExpireAt(new Date(System.currentTimeMillis() + badge.getExpireDays() * 86400000L));
|
|
|
}
|
|
|
|
|
|
- childBadgeMapper.insert(cb);
|
|
|
+ memberBadgeMapper.insert(cb);
|
|
|
}
|
|
|
|
|
|
// ===== 家庭成员勋章查询 =====
|
|
|
|
|
|
- public List<ChildBadge> getChildBadges(Long memberId) {
|
|
|
- return childBadgeMapper.selectList(
|
|
|
- new LambdaQueryWrapper<ChildBadge>()
|
|
|
- .eq(ChildBadge::getChildId, memberId)
|
|
|
- .orderByDesc(ChildBadge::getIsFavorite)
|
|
|
- .orderByDesc(ChildBadge::getEarnedAt));
|
|
|
+ public List<MemberBadge> getMemberBadges(Long memberId) {
|
|
|
+ return memberBadgeMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<MemberBadge>()
|
|
|
+ .eq(MemberBadge::getMemberId, memberId)
|
|
|
+ .orderByDesc(MemberBadge::getIsFavorite)
|
|
|
+ .orderByDesc(MemberBadge::getEarnedAt));
|
|
|
}
|
|
|
|
|
|
- public List<ChildBadge> getActiveChildBadges(Long memberId) {
|
|
|
- return childBadgeMapper.selectList(
|
|
|
- new LambdaQueryWrapper<ChildBadge>()
|
|
|
- .eq(ChildBadge::getChildId, memberId)
|
|
|
- .eq(ChildBadge::getStatus, 1)
|
|
|
- .orderByDesc(ChildBadge::getIsFavorite)
|
|
|
- .orderByDesc(ChildBadge::getEarnedAt));
|
|
|
+ public List<MemberBadge> getActiveMemberBadges(Long memberId) {
|
|
|
+ return memberBadgeMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<MemberBadge>()
|
|
|
+ .eq(MemberBadge::getMemberId, memberId)
|
|
|
+ .eq(MemberBadge::getStatus, 1)
|
|
|
+ .orderByDesc(MemberBadge::getIsFavorite)
|
|
|
+ .orderByDesc(MemberBadge::getEarnedAt));
|
|
|
}
|
|
|
|
|
|
- public ChildBadge getChildBadgeDetail(Long memberId, Long badgeId) {
|
|
|
- return childBadgeMapper.selectOne(
|
|
|
- new LambdaQueryWrapper<ChildBadge>()
|
|
|
- .eq(ChildBadge::getChildId, memberId)
|
|
|
- .eq(ChildBadge::getBadgeId, badgeId));
|
|
|
+ public MemberBadge getMemberBadgeDetail(Long memberId, Long badgeId) {
|
|
|
+ return memberBadgeMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<MemberBadge>()
|
|
|
+ .eq(MemberBadge::getMemberId, memberId)
|
|
|
+ .eq(MemberBadge::getBadgeId, badgeId));
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
public void toggleFavorite(Long memberId, Long badgeId) {
|
|
|
- ChildBadge cb = childBadgeMapper.selectOne(
|
|
|
- new LambdaQueryWrapper<ChildBadge>()
|
|
|
- .eq(ChildBadge::getChildId, memberId)
|
|
|
- .eq(ChildBadge::getBadgeId, badgeId));
|
|
|
+ MemberBadge cb = memberBadgeMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<MemberBadge>()
|
|
|
+ .eq(MemberBadge::getMemberId, memberId)
|
|
|
+ .eq(MemberBadge::getBadgeId, badgeId));
|
|
|
if (cb != null) {
|
|
|
cb.setIsFavorite(cb.getIsFavorite() != null && cb.getIsFavorite() ? false : true);
|
|
|
cb.setUpdatedAt(new Date());
|
|
|
- childBadgeMapper.updateById(cb);
|
|
|
+ memberBadgeMapper.updateById(cb);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// ===== 统计与排行 =====
|
|
|
|
|
|
- public Map<String, Object> getChildBadgeStats(Long memberId) {
|
|
|
- List<ChildBadge> all = childBadgeMapper.selectList(
|
|
|
- new LambdaQueryWrapper<ChildBadge>()
|
|
|
- .eq(ChildBadge::getChildId, memberId));
|
|
|
+ public Map<String, Object> getMemberBadgeStats(Long memberId) {
|
|
|
+ List<MemberBadge> all = memberBadgeMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<MemberBadge>()
|
|
|
+ .eq(MemberBadge::getMemberId, memberId));
|
|
|
|
|
|
long total = all.size();
|
|
|
long active = all.stream().filter(cb -> cb.getStatus() != null && cb.getStatus() == 1).count();
|
|
|
long expired = all.stream().filter(cb -> cb.getStatus() != null && cb.getStatus() == 0).count();
|
|
|
long revoked = all.stream().filter(cb -> cb.getStatus() != null && cb.getStatus() == -1).count();
|
|
|
|
|
|
-List<Map<String, Object>> categoryStats = childBadgeMapper.selectCategoryStats(memberId);
|
|
|
- List<Map<String, Object>> levelStats = childBadgeMapper.selectLevelStats(memberId);
|
|
|
+List<Map<String, Object>> categoryStats = memberBadgeMapper.selectCategoryStats(memberId);
|
|
|
+ List<Map<String, Object>> levelStats = memberBadgeMapper.selectLevelStats(memberId);
|
|
|
|
|
|
Map<String, Object> stats = new HashMap<>();
|
|
|
stats.put("total", total);
|
|
|
@@ -168,6 +168,6 @@ List<Map<String, Object>> categoryStats = childBadgeMapper.selectCategoryStats(m
|
|
|
}
|
|
|
|
|
|
public List<Map<String, Object>> getFamilyRanking(Long familyId) {
|
|
|
- return childBadgeMapper.selectFamilyRanking(familyId);
|
|
|
+ return memberBadgeMapper.selectFamilyRanking(familyId);
|
|
|
}
|
|
|
}
|