package com.github.qinyou.system.controller;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.github.qinyou.common.annotation.RequirePermission;
import com.github.qinyou.common.constant.Constant;
import com.github.qinyou.common.interceptor.SearchSql;
import com.github.qinyou.common.interceptor.VisitLogInterceptor;
import com.github.qinyou.common.render.ExcelRender;
import com.github.qinyou.common.utils.StringUtils;
import com.github.qinyou.common.utils.WebUtils;
import com.github.qinyou.common.validator.IdsRequired;
import com.github.qinyou.common.web.BaseController;
import com.github.qinyou.system.model.SysVisitLog;
import com.github.qinyou.system.service.SysNoticeService;
import com.jfinal.aop.Before;
import com.jfinal.aop.Clear;
import com.jfinal.aop.Duang;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.DateTime;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 访问日志
 */
@Clear(VisitLogInterceptor.class)
@RequirePermission("sysVisitLog")
public class SysVisitLogController extends BaseController {

    public void index() {
        render("system/sysVisitLog.ftl");
    }


    /**
     * datagrid 数据
     */
    @Before(SearchSql.class)
    public void query() {
        int pageNumber = getAttr("pageNumber");
        int pageSize = getAttr("pageSize");
        String where = getAttr(Constant.SEARCH_SQL);
        Page<SysVisitLog> sysVisitLogPage = SysVisitLog.dao.page(pageNumber, pageSize, where);
        renderDatagrid(sysVisitLogPage);
    }


    /**
     * 批量删除
     */
    @RequirePermission("sysVisitLog:delete")
    @Before(IdsRequired.class)
    public void deleteAction() {
        String ids = getPara("ids").replaceAll(",", "','");
        String sql = "delete from sys_visit_log where  id in ('" + ids + "')";
        int number = Db.update(sql);

        // 发送系统通知
        String noticeTypeCode = "delVisitLog";
        Map<String, Object> params = new HashMap<>();
        params.put("username", WebUtils.getSessionUsername(this));
        params.put("datetime", new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
        params.put("number", number);
        SysNoticeService service = Duang.duang(SysNoticeService.class);
        service.sendNotice(noticeTypeCode, params);

        renderSuccess(DELETE_SUCCESS);
    }


    /**
     * 查看按钮
     */
    public void view() {
        String id = getPara("id");
        if (StringUtils.notEmpty(id)) {
            SysVisitLog sysVisitLog = SysVisitLog.dao.findById(id);
            setAttr("sysVisitLog", sysVisitLog);
        }
        render("system/sysVisitLog_view.ftl");
    }

    /**
     * 导出excel
     */
    @RequirePermission("sysVisitLog:export")
    @Before(SearchSql.class)
    public void exportExcel() {
        String where = getAttr(Constant.SEARCH_SQL);
        if (SysVisitLog.dao.findCountByWhere(where) > 50000) {
            setAttr("msg", "一次导出数据不可大于 5W 条,请修改查询条件。");
            render("common/card.ftl");
            return;
        }

        // 测试大数据量导出
        List<SysVisitLog> list = SysVisitLog.dao.findByWhere(where);

        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("访问日志", "访问日志"),
                SysVisitLog.class, list);
        render(ExcelRender.me(workbook).fileName("访问日志.xls"));
    }
}