|
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
|
|
|
import shop.alien.entity.result.R;
|
|
import shop.alien.entity.result.R;
|
|
|
import shop.alien.entity.store.StoreOrder;
|
|
import shop.alien.entity.store.StoreOrder;
|
|
|
import shop.alien.entity.store.vo.TurnoverBreakdownItemVO;
|
|
import shop.alien.entity.store.vo.TurnoverBreakdownItemVO;
|
|
|
|
|
+import shop.alien.entity.store.vo.TurnoverDetailByDateVO;
|
|
|
import shop.alien.entity.store.vo.TurnoverDetailItemVO;
|
|
import shop.alien.entity.store.vo.TurnoverDetailItemVO;
|
|
|
import shop.alien.entity.store.vo.TurnoverSummaryVO;
|
|
import shop.alien.entity.store.vo.TurnoverSummaryVO;
|
|
|
import shop.alien.mapper.StoreOrderMapper;
|
|
import shop.alien.mapper.StoreOrderMapper;
|
|
@@ -110,6 +111,43 @@ public class StoreTurnoverServiceImpl implements StoreTurnoverService {
|
|
|
return R.data(result);
|
|
return R.data(result);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R<List<TurnoverDetailByDateVO>> detailsByDate(Integer storeId, Integer payType, Integer paymentMethod,
|
|
|
|
|
+ Date startTime, Date endTime, Integer pageNum, Integer pageSize) {
|
|
|
|
|
+ R<IPage<TurnoverDetailItemVO>> plain = details(storeId, payType, paymentMethod, startTime, endTime, pageNum, pageSize);
|
|
|
|
|
+ IPage<TurnoverDetailItemVO> page = plain.getData();
|
|
|
|
|
+
|
|
|
|
|
+ // 按 yyyy-MM-dd 分组并按日期倒序
|
|
|
|
|
+ Map<String, List<TurnoverDetailItemVO>> grouped = page.getRecords().stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(item -> {
|
|
|
|
|
+ Date t = item.getPayTime();
|
|
|
|
|
+ if (t == null) return "-";
|
|
|
|
|
+ java.time.LocalDate d = t.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate();
|
|
|
|
|
+ return d.toString();
|
|
|
|
|
+ }));
|
|
|
|
|
+
|
|
|
|
|
+ List<TurnoverDetailByDateVO> groups = grouped.entrySet().stream()
|
|
|
|
|
+ .sorted((a, b) -> b.getKey().compareTo(a.getKey()))
|
|
|
|
|
+ .map(e -> {
|
|
|
|
|
+ TurnoverDetailByDateVO g = new TurnoverDetailByDateVO();
|
|
|
|
|
+ g.setDate(e.getKey());
|
|
|
|
|
+ // 同一天内按时间倒序
|
|
|
|
|
+ List<TurnoverDetailItemVO> items = new ArrayList<>(e.getValue());
|
|
|
|
|
+ items.sort((x, y) -> {
|
|
|
|
|
+ Date dx = x.getPayTime();
|
|
|
|
|
+ Date dy = y.getPayTime();
|
|
|
|
|
+ if (dx == null && dy == null) return 0;
|
|
|
|
|
+ if (dx == null) return 1;
|
|
|
|
|
+ if (dy == null) return -1;
|
|
|
|
|
+ return dy.compareTo(dx);
|
|
|
|
|
+ });
|
|
|
|
|
+ g.setItems(items);
|
|
|
|
|
+ return g;
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ return R.data(groups);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private LambdaQueryWrapper<StoreOrder> basePaidQuery(Integer storeId, Date startTime, Date endTime) {
|
|
private LambdaQueryWrapper<StoreOrder> basePaidQuery(Integer storeId, Date startTime, Date endTime) {
|
|
|
LambdaQueryWrapper<StoreOrder> qw = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<StoreOrder> qw = new LambdaQueryWrapper<>();
|
|
|
qw.eq(StoreOrder::getStoreId, storeId)
|
|
qw.eq(StoreOrder::getStoreId, storeId)
|