package com.ruoyi.system.domain.house.vo;

import lombok.Data;

import java.util.List;

/**
 * 时间窗内的新增 / 修改 / 删除汇总。数据来源于 {@code data_change_record}。
 *
 * <h3>房源（HOUSE_RESOURCE）维度</h3>
 * <ul>
 *     <li>{@link #houseResourceInsert} / {@link #houseResourceUpdate} / {@link #houseResourceDelete}：
 *         按 {@code house_resource.type} 分组，固定补齐 type = 1/4/5/6/7 五档；</li>
 *     <li>{@code insert} / {@code update} 桶的每个档位会带上 {@code ids} 列表，
 *         前端可以直接把这组 id 传给 {@code /api/house/page} 的 {@code ids} 参数做 drilldown，
 *         计数和列表天然一致；</li>
 *     <li>{@code delete} 桶**只给 count 不给 ids**：drilldown 列表本身会过滤掉逻辑删除的
 *         房源，所以给 id 也没法展示，只保留数量用于汇总展示。</li>
 * </ul>
 *
 * <h3>经营主体（BUSINESS_ENTITY_INFO）维度</h3>
 * <ul>
 *     <li>{@link #businessEntityInsert} / {@link #businessEntityUpdate} / {@link #businessEntityDelete}：
 *         结构与房源三桶一致，按关联房源的 {@code house_resource.type} 分组，补齐 type = 1/4/5/6/7 五档；
 *         一个经营主体若关联到多种 type 的房源，会在对应的多个 type 桶里各出现一次。</li>
 *     <li>{@code insert} / {@code update} 桶的每个档位带 {@code ids} 列表，前端 drilldown 时应同时传
 *         {@code businessEntityInfoIds} + {@code wgType = type}，以和档位计数保持一致；</li>
 *     <li>{@code delete} 桶同样只给 count 不给 ids。</li>
 * </ul>
 *
 * <h3>计数口径</h3>
 * <p>insert / update 桶要求 JOIN 链路 entity / mapping / house 均 {@code delete_flag = 0}，保证
 * 和 pageHouseResources 的 drilldown 列表能一一对上；delete 桶只要求 entity 历史上至少关联过某个房源，
 * 不限 mapping / house 的 {@code delete_flag}。</p>
 */
@Data
public class HouseResourceDataCollection {

    private List<HouseResourceDataCollectionSimpleObject> houseResourceInsert;

    private List<HouseResourceDataCollectionSimpleObject> houseResourceUpdate;

    private List<HouseResourceDataCollectionSimpleObject> houseResourceDelete;

    private List<HouseResourceDataCollectionSimpleObject> businessEntityInsert;

    private List<HouseResourceDataCollectionSimpleObject> businessEntityUpdate;

    private List<HouseResourceDataCollectionSimpleObject> businessEntityDelete;
}
