|
|
@@ -43,11 +43,11 @@ public class PpointService {
|
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
|
- // Check product_ppoint table for a date-valid record
|
|
|
+ // Check product_ppoint table for a date-valid record (startDate <= now AND (endDate is null OR endDate >= now))
|
|
|
LambdaQueryWrapper<ProductPpoint> wrapper = new LambdaQueryWrapper<ProductPpoint>()
|
|
|
.eq(ProductPpoint::getProductId, productId)
|
|
|
.le(ProductPpoint::getStartDate, now)
|
|
|
- .ge(ProductPpoint::getEndDate, now)
|
|
|
+ .and(w -> w.isNull(ProductPpoint::getEndDate).or().ge(ProductPpoint::getEndDate, now))
|
|
|
.orderByDesc(ProductPpoint::getStartDate)
|
|
|
.last("LIMIT 1");
|
|
|
ProductPpoint record = productPpointMapper.selectOne(wrapper);
|
|
|
@@ -56,10 +56,9 @@ public class PpointService {
|
|
|
return record.getPpoint();
|
|
|
}
|
|
|
|
|
|
- // Fallback to Product.profitRate
|
|
|
+ // Fallback to Product.profitRate (千分比 → 基点: *100)
|
|
|
Product product = productMapper.selectById(productId);
|
|
|
if (product != null && product.getProfitRate() != null) {
|
|
|
- // Convert profitRate (percentage-based, e.g. 10 = 10%) to basis points (1000 = 10%)
|
|
|
return product.getProfitRate() * 100;
|
|
|
}
|
|
|
|
|
|
@@ -126,6 +125,27 @@ public class PpointService {
|
|
|
Page<ProductPpoint> page = productPpointMapper.selectPage(pageParam, wrapper);
|
|
|
List<ProductPpoint> records = page.getRecords();
|
|
|
|
|
|
+ // Filter by keyword (product name) in memory
|
|
|
+ if (keyword != null && !keyword.trim().isEmpty()) {
|
|
|
+ String kw = keyword.trim().toLowerCase();
|
|
|
+ List<Long> matchedIds = records.stream()
|
|
|
+ .map(ProductPpoint::getProductId)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (!matchedIds.isEmpty()) {
|
|
|
+ List<Product> products = productMapper.selectBatchIds(matchedIds);
|
|
|
+ List<Long> filterIds = products.stream()
|
|
|
+ .filter(p -> p.getName() != null && p.getName().toLowerCase().contains(kw))
|
|
|
+ .map(Product::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ records = records.stream()
|
|
|
+ .filter(r -> filterIds.contains(r.getProductId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ } else {
|
|
|
+ records = new java.util.ArrayList<>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
Map<Long, Product> productMap = new HashMap<>();
|
|
|
if (!records.isEmpty()) {
|
|
|
List<Long> productIds = records.stream()
|