Просмотр исходного кода

Merge branch 'sit-new-checkstand' of http://8.152.195.41:3000/alien/alien_cloud into sit-new-checkstand

lutong 2 недель назад
Родитель
Сommit
b9e2d658bd

+ 19 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/TurnoverDetailByDateVO.java

@@ -0,0 +1,19 @@
+package shop.alien.entity.store.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "TurnoverDetailByDateVO", description = "营业额对账-按日期分组明细")
+public class TurnoverDetailByDateVO {
+
+	@ApiModelProperty("日期(yyyy-MM-dd)")
+	private String date;
+
+	@ApiModelProperty("该日期下的明细列表")
+	private List<TurnoverDetailItemVO> items;
+}
+

+ 9 - 9
alien-store/src/main/java/shop/alien/store/controller/StoreTurnoverController.java

@@ -49,16 +49,16 @@ public class StoreTurnoverController {
 		@ApiImplicitParam(name = "pageSize", value = "页大小", dataType = "Integer", paramType = "query")
 	})
 	@GetMapping("/details")
-	public R<IPage<TurnoverDetailItemVO>> details(@RequestParam Integer storeId,
-	                                              @RequestParam(required = false) Integer payType,
-	                                              @RequestParam(required = false) Integer paymentMethod,
-	                                              @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
-	                                              @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime,
-	                                              @RequestParam(defaultValue = "1") Integer pageNum,
-	                                              @RequestParam(defaultValue = "10") Integer pageSize) {
-		log.info("StoreTurnoverController.details storeId={}, payType={}, paymentMethod={}, start={}, end={}, pageNum={}, pageSize={}",
+	public R<java.util.List<shop.alien.entity.store.vo.TurnoverDetailByDateVO>> details(@RequestParam Integer storeId,
+	                                                                                    @RequestParam(required = false) Integer payType,
+	                                                                                    @RequestParam(required = false) Integer paymentMethod,
+	                                                                                    @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
+	                                                                                    @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime,
+	                                                                                    @RequestParam(defaultValue = "1") Integer pageNum,
+	                                                                                    @RequestParam(defaultValue = "10") Integer pageSize) {
+		log.info("StoreTurnoverController.details(storeId={}, payType={}, paymentMethod={}, start={}, end={}, pageNum={}, pageSize={})",
 			storeId, payType, paymentMethod, startTime, endTime, pageNum, pageSize);
-		return storeTurnoverService.details(storeId, payType, paymentMethod, startTime, endTime, pageNum, pageSize);
+		return storeTurnoverService.detailsByDate(storeId, payType, paymentMethod, startTime, endTime, pageNum, pageSize);
 	}
 }
 

+ 11 - 0
alien-store/src/main/java/shop/alien/store/service/StoreTurnoverService.java

@@ -4,14 +4,25 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.vo.TurnoverDetailItemVO;
 import shop.alien.entity.store.vo.TurnoverSummaryVO;
+import shop.alien.entity.store.vo.TurnoverDetailByDateVO;
 
 import java.util.Date;
+import java.util.List;
 
 public interface StoreTurnoverService {
 
 	R<TurnoverSummaryVO> summary(Integer storeId, Date startTime, Date endTime);
 
+	/**
+	 * 原分页明细(保留以便需要纯列表时使用)
+	 */
 	R<IPage<TurnoverDetailItemVO>> details(Integer storeId, Integer payType, Integer paymentMethod,
 	                                       Date startTime, Date endTime, Integer pageNum, Integer pageSize);
+
+	/**
+	 * 按日期分组的明细(用于前端分组展示)
+	 */
+	R<List<TurnoverDetailByDateVO>> detailsByDate(Integer storeId, Integer payType, Integer paymentMethod,
+	                                              Date startTime, Date endTime, Integer pageNum, Integer pageSize);
 }
 

+ 38 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreTurnoverServiceImpl.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreOrder;
 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.TurnoverSummaryVO;
 import shop.alien.mapper.StoreOrderMapper;
@@ -110,6 +111,43 @@ public class StoreTurnoverServiceImpl implements StoreTurnoverService {
 		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) {
 		LambdaQueryWrapper<StoreOrder> qw = new LambdaQueryWrapper<>();
 		qw.eq(StoreOrder::getStoreId, storeId)