You've already forked FrameTour-BE
refactor(puzzle): 优化拼图记录查询逻辑
- 移除 BigDecimal 导入并修改拼图数量统计方式 - 使用关联表查询替换直接的数量统计方法 - 更新拼图记录查询逻辑,通过关联表获取数据 - 添加对空值的过滤处理确保数据完整性 - 修改内容页面转换方法,支持免费状态判断 - 删除价格计算相关依赖和服务调用 - 添加 MemberPuzzleEntity 和 FreeStatus 常量支持 - 从关联记录读取免费状态替代价格计算逻辑
This commit is contained in:
@@ -33,7 +33,6 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -62,8 +61,9 @@ public class AppPuzzleController {
|
||||
if (faceId == null) {
|
||||
return ApiResponse.fail("faceId不能为空");
|
||||
}
|
||||
int count = puzzleRepository.countRecordsByFaceId(faceId);
|
||||
return ApiResponse.success(count);
|
||||
// 通过关联表查询数量
|
||||
List<MemberPuzzleEntity> relations = memberPuzzleMapper.listByFaceId(faceId);
|
||||
return ApiResponse.success(relations.size());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,9 +74,17 @@ public class AppPuzzleController {
|
||||
if (faceId == null) {
|
||||
return ApiResponse.fail("faceId不能为空");
|
||||
}
|
||||
List<PuzzleGenerationRecordEntity> records = puzzleRepository.getRecordsByFaceId(faceId);
|
||||
List<ContentPageVO> result = records.stream()
|
||||
.map(this::convertToContentPageVO)
|
||||
// 通过关联表查询,获取关联的拼图记录
|
||||
List<MemberPuzzleEntity> relations = memberPuzzleMapper.listByFaceId(faceId);
|
||||
List<ContentPageVO> result = relations.stream()
|
||||
.map(relation -> {
|
||||
PuzzleGenerationRecordEntity record = puzzleRepository.getRecordById(relation.getRecordId());
|
||||
if (record == null) {
|
||||
return null;
|
||||
}
|
||||
return convertToContentPageVO(record, relation);
|
||||
})
|
||||
.filter(vo -> vo != null)
|
||||
.collect(Collectors.toList());
|
||||
return ApiResponse.success(result);
|
||||
}
|
||||
@@ -93,7 +101,9 @@ public class AppPuzzleController {
|
||||
if (record == null) {
|
||||
return ApiResponse.fail("未找到对应的拼图记录");
|
||||
}
|
||||
ContentPageVO result = convertToContentPageVO(record);
|
||||
// 查询关联记录
|
||||
MemberPuzzleEntity relation = memberPuzzleMapper.getByFaceAndRecord(record.getFaceId(), recordId);
|
||||
ContentPageVO result = convertToContentPageVO(record, relation);
|
||||
return ApiResponse.success(result);
|
||||
}
|
||||
|
||||
@@ -273,8 +283,11 @@ public class AppPuzzleController {
|
||||
|
||||
/**
|
||||
* 将PuzzleGenerationRecordEntity转换为ContentPageVO
|
||||
*
|
||||
* @param record 拼图生成记录
|
||||
* @param relation 会员拼图关联记录,用于获取免费状态
|
||||
*/
|
||||
private ContentPageVO convertToContentPageVO(PuzzleGenerationRecordEntity record) {
|
||||
private ContentPageVO convertToContentPageVO(PuzzleGenerationRecordEntity record, MemberPuzzleEntity relation) {
|
||||
ContentPageVO vo = new ContentPageVO();
|
||||
|
||||
// 内容类型为3(拼图)
|
||||
@@ -310,21 +323,11 @@ public class AppPuzzleController {
|
||||
vo.setIsBuy(1);
|
||||
} else {
|
||||
vo.setIsBuy(0);
|
||||
PriceCalculationRequest calculationRequest = new PriceCalculationRequest();
|
||||
ProductItem productItem = new ProductItem();
|
||||
productItem.setProductType(ProductType.PHOTO_LOG);
|
||||
productItem.setProductId(record.getTemplateId().toString());
|
||||
productItem.setPurchaseCount(1);
|
||||
productItem.setScenicId(face.getScenicId().toString());
|
||||
calculationRequest.setProducts(Collections.singletonList(productItem));
|
||||
calculationRequest.setUserId(face.getMemberId());
|
||||
calculationRequest.setFaceId(record.getFaceId());
|
||||
calculationRequest.setPreviewOnly(true); // 仅查询价格,不实际使用优惠
|
||||
PriceCalculationResult calculationResult = iPriceCalculationService.calculatePrice(calculationRequest);
|
||||
if (calculationResult.getFinalAmount().compareTo(BigDecimal.ZERO) > 0) {
|
||||
vo.setFreeCount(0);
|
||||
} else {
|
||||
// 从关联记录读取免费状态
|
||||
if (relation != null && FreeStatus.isFree(relation.getIsFree())) {
|
||||
vo.setFreeCount(1);
|
||||
} else {
|
||||
vo.setFreeCount(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,13 +47,11 @@ import com.ycwl.basic.model.pc.video.entity.VideoEntity;
|
||||
import com.ycwl.basic.model.repository.TaskUpdateResult;
|
||||
|
||||
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
|
||||
import com.ycwl.basic.pricing.dto.PriceCalculationRequest;
|
||||
import com.ycwl.basic.pricing.dto.PriceCalculationResult;
|
||||
import com.ycwl.basic.pricing.dto.ProductItem;
|
||||
import com.ycwl.basic.pricing.enums.ProductType;
|
||||
import com.ycwl.basic.pricing.service.IPriceCalculationService;
|
||||
import com.ycwl.basic.constant.FreeStatus;
|
||||
import com.ycwl.basic.model.pc.puzzle.entity.MemberPuzzleEntity;
|
||||
import com.ycwl.basic.puzzle.entity.PuzzleGenerationRecordEntity;
|
||||
import com.ycwl.basic.puzzle.entity.PuzzleTemplateEntity;
|
||||
import com.ycwl.basic.puzzle.mapper.MemberPuzzleMapper;
|
||||
import com.ycwl.basic.puzzle.mapper.PuzzleGenerationRecordMapper;
|
||||
import com.ycwl.basic.puzzle.mapper.PuzzleTemplateMapper;
|
||||
import com.ycwl.basic.puzzle.repository.PuzzleRepository;
|
||||
@@ -201,12 +199,12 @@ public class FaceServiceImpl implements FaceService {
|
||||
@Autowired
|
||||
private PuzzleGenerationRecordMapper puzzleGenerationRecordMapper;
|
||||
@Autowired
|
||||
private IPriceCalculationService iPriceCalculationService;
|
||||
@Autowired
|
||||
private PuzzleTemplateMapper puzzleTemplateMapper;
|
||||
@Autowired
|
||||
private PuzzleRepository puzzleRepository;
|
||||
@Autowired
|
||||
private MemberPuzzleMapper memberPuzzleMapper;
|
||||
@Autowired
|
||||
private FaceDetectLogAiCamService faceDetectLogAiCamService;
|
||||
@Autowired
|
||||
private OrderRepository orderRepository;
|
||||
@@ -566,21 +564,16 @@ public class FaceServiceImpl implements FaceService {
|
||||
}
|
||||
}
|
||||
}
|
||||
PriceCalculationRequest calculationRequest = new PriceCalculationRequest();
|
||||
ProductItem productItem = new ProductItem();
|
||||
productItem.setProductType(ProductType.PHOTO_LOG);
|
||||
productItem.setProductId(template.getId().toString());
|
||||
productItem.setPurchaseCount(1);
|
||||
productItem.setScenicId(face.getScenicId().toString());
|
||||
calculationRequest.setProducts(Collections.singletonList(productItem));
|
||||
calculationRequest.setUserId(face.getMemberId());
|
||||
calculationRequest.setFaceId(face.getId());
|
||||
calculationRequest.setPreviewOnly(true); // 仅查询价格,不实际使用优惠
|
||||
PriceCalculationResult calculationResult = iPriceCalculationService.calculatePrice(calculationRequest);
|
||||
if (calculationResult.getFinalAmount().compareTo(BigDecimal.ZERO) > 0) {
|
||||
sfpContent.setFreeCount(0);
|
||||
// 从 member_puzzle 关联记录读取免费状态
|
||||
if (optionalRecord.isPresent()) {
|
||||
MemberPuzzleEntity memberPuzzle = memberPuzzleMapper.getByFaceAndRecord(faceId, optionalRecord.get().getId());
|
||||
if (memberPuzzle != null && FreeStatus.isFree(memberPuzzle.getIsFree())) {
|
||||
sfpContent.setFreeCount(1);
|
||||
} else {
|
||||
sfpContent.setFreeCount(0);
|
||||
}
|
||||
} else {
|
||||
sfpContent.setFreeCount(1);
|
||||
sfpContent.setFreeCount(0);
|
||||
}
|
||||
contentList.add(1, sfpContent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user