package org.jeecg.modules.xudiancgcc.service.impl;

import org.jeecg.modules.xudiancgcc.entity.BuZyXdcgccOnline;
import org.jeecg.modules.xudiancgcc.mapper.BuZyXdcgccOnlineMapper;
import org.jeecg.modules.xudiancgcc.service.IBuZyXdcgccOnlineService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;

/**
 * @Description: 在线数据业务实现类 - 支持自定义查询与历史数据管理
 * @Author: auto-generator
 * @Date:   2026-02-06
 * @Version: V1.0
 */
@Service
@Slf4j
public class BuZyXdcgccOnlineServiceImpl extends ServiceImpl<BuZyXdcgccOnlineMapper, BuZyXdcgccOnline> implements IBuZyXdcgccOnlineService {

    /**
     * 自定义分页查询
     *
     * @param page 分页参数
     * @return 分页结果
     */
    @Override
    public IPage<BuZyXdcgccOnline> queryByCustom(Page<BuZyXdcgccOnline> page) {
        log.debug("执行自定义分页查询：{}", page);
        return baseMapper.queryByCustom(page);
    }

    /**
     * 按时间范围查询历史数据
     *
     * @param page      分页对象
     * @param startTime 起始时间（格式：yyyy-MM-dd HH:mm:ss）
     * @param endTime   结束时间（格式：yyyy-MM-dd HH:mm:ss）
     * @return 分页结果
     */
    @Override
    public IPage<BuZyXdcgccOnline> queryHistoryDataByTimeRange(Page<BuZyXdcgccOnline> page, String startTime, String endTime) {
        try {
            // 根据开始时间确定历史表名（按年月分区）
            String month = startTime.substring(0, 7).replace("-", "");
            String tableName = "bu_zy_xdcgcc_history_" + month;
            log.info("查询历史数据 - 表名：{}, 时间范围：{} 至 {}", tableName, startTime, endTime);
            
            // 调用Mapper方法查询历史数据
            return baseMapper.queryHistoryDataByTimeRange(page, tableName, startTime, endTime);
        } catch (Exception e) {
            log.error("查询历史数据异常", e);
            throw new RuntimeException("查询历史数据失败: " + e.getMessage(), e);
        }
    }

    /**
     * 更新指定月份的历史数据
     *
     * @param entity 实体对象（包含更新字段）
     * @param month  月份（格式：yyyy-MM）
     * @return 是否成功
     */
    @Override
    public boolean updateHistoricalData(BuZyXdcgccOnline entity, String month) {
        if (entity == null || month == null || month.trim().isEmpty()) {
            log.warn("更新历史数据失败：参数为空 - entity={}, month={}", entity, month);
            return false;
        }
        try {
            // 构造历史表名
            String tableName = "bu_zy_xdcgcc_history_" + month.replace("-", "");
            log.info("正在更新 {} 表的历史数据，ID: {}", tableName, entity.getId());
            boolean result = baseMapper.updateHistoricalData(entity, tableName);
            if (result) {
                log.info("成功更新 {} 表的历史数据", tableName);
            } else {
                log.warn("未找到匹配记录，未能更新 {} 表的数据", tableName);
            }
            return result;
        } catch (Exception e) {
            log.error("更新历史数据异常", e);
            throw new RuntimeException("更新历史数据失败: " + e.getMessage(), e);
        }
    }
}