|
|
@@ -35,6 +35,7 @@ import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -243,13 +244,16 @@ public class PosStoreController extends BaseController {
|
|
|
.filter(idVal -> idVal != null)
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
+ Map<Long, List<PosReview>> reviewMap = Collections.emptyMap();
|
|
|
+ Map<Long, Long> orderCountMap = Collections.emptyMap();
|
|
|
+ List<OperatingHours> hourslist=new ArrayList<>();
|
|
|
if (!mdIds.isEmpty()) {
|
|
|
// 1. 计算各门店评分
|
|
|
QueryWrapper<PosReview> reviewWrapper = new QueryWrapper<>();
|
|
|
reviewWrapper.in("md_id", mdIds);
|
|
|
List<PosReview> reviews = posReviewService.list(reviewWrapper);
|
|
|
|
|
|
- Map<Long, List<PosReview>> reviewMap = reviews.stream()
|
|
|
+ reviewMap = reviews.stream()
|
|
|
.collect(Collectors.groupingBy(PosReview::getMdId));
|
|
|
|
|
|
// 2. 统计各门店本月订单数(按 cretim 当前月份)
|
|
|
@@ -257,36 +261,49 @@ public class PosStoreController extends BaseController {
|
|
|
orderWrapper.in("md_id", mdIds);
|
|
|
orderWrapper.apply("DATE_FORMAT(cretim,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')");
|
|
|
List<PosOrder> orders = posOrderService.list(orderWrapper);
|
|
|
- Map<Long, Long> orderCountMap = orders.stream()
|
|
|
+ orderCountMap = orders.stream()
|
|
|
.collect(Collectors.groupingBy(PosOrder::getMdId, Collectors.counting()));
|
|
|
+ QueryWrapper<OperatingHours> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.in("md_id", mdIds);
|
|
|
+ hourslist = operatingHoursService.list(wrapper);
|
|
|
|
|
|
- for (PosStore store : list) {
|
|
|
- Long mdId = store.getId() == null ? null : store.getId().longValue();
|
|
|
- List<PosReview> storeReviews = mdId == null ? null : reviewMap.get(mdId);
|
|
|
-
|
|
|
- double score;
|
|
|
- if (storeReviews == null || storeReviews.isEmpty()) {
|
|
|
- score = 4.5d;
|
|
|
- } else {
|
|
|
- double avg = storeReviews.stream()
|
|
|
- .mapToLong(PosReview::getScore)
|
|
|
- .average()
|
|
|
- .orElse(4.5d);
|
|
|
- // 平均分按 0.5 分粒度四舍五入,例如 3, 3.5, 4, 4.5
|
|
|
- score = Math.round(avg * 2.0d) / 2.0d;
|
|
|
+ }
|
|
|
+ DateUtil dateUtil = new DateUtil();
|
|
|
+ // 统一循环设置评分与月售(mdIds 为空时使用默认值)
|
|
|
+ for (PosStore store : list) {
|
|
|
+ Long mdId = store.getId() == null ? null : store.getId().longValue();
|
|
|
+ List<PosReview> storeReviews = (mdId == null || reviewMap.isEmpty()) ? null : reviewMap.get(mdId);
|
|
|
+
|
|
|
+ double score;
|
|
|
+ if (storeReviews == null || storeReviews.isEmpty()) {
|
|
|
+ score = 4.5d;
|
|
|
+ } else {
|
|
|
+ double avg = storeReviews.stream()
|
|
|
+ .mapToLong(PosReview::getScore)
|
|
|
+ .average()
|
|
|
+ .orElse(4.5d);
|
|
|
+ // 平均分按 0.5 分粒度四舍五入,例如 3, 3.5, 4, 4.5
|
|
|
+ score = Math.round(avg * 2.0d) / 2.0d;
|
|
|
+ }
|
|
|
+ store.setPingf(score);
|
|
|
+
|
|
|
+ // 设置本月售出订单数量(ddsl)
|
|
|
+ long monthCount = (mdId == null || orderCountMap.isEmpty()) ? 0L : orderCountMap.getOrDefault(mdId, 0L);
|
|
|
+ store.setDdsl(monthCount);
|
|
|
+
|
|
|
+ Boolean dayang = false;
|
|
|
+ List<OperatingHours> mdHours=hourslist.stream().filter(x-> store.getId().equals(x.getMdId().intValue())).collect(Collectors.toList());
|
|
|
+ //在营业时间范围内返回true
|
|
|
+ for (int i = 0; i < mdHours.size(); i++) {
|
|
|
+ Boolean sbsj = dateUtil.isLegalTime(mdHours.get(i).getStartTime(), mdHours.get(i).getEndTime());
|
|
|
+ if (sbsj == true) {
|
|
|
+ dayang = true;
|
|
|
}
|
|
|
- store.setPingf(score);
|
|
|
-
|
|
|
- // 设置本月售出订单数量(ddsl)
|
|
|
- long monthCount = (mdId == null) ? 0L : orderCountMap.getOrDefault(mdId, 0L);
|
|
|
- store.setDdsl(monthCount);
|
|
|
}
|
|
|
- } else {
|
|
|
- // 没有有效门店 ID,全部按默认评分与 0 月售
|
|
|
- list.forEach(store -> {
|
|
|
- store.setPingf(4.5d);
|
|
|
- store.setDdsl(0L);
|
|
|
- });
|
|
|
+ //不在时间范围内标识为打烊
|
|
|
+ if (dayang == false) {
|
|
|
+ store.setState(1L);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|