package thyyxxk.webserver.service.reports;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import thyyxxk.webserver.config.exception.ExceptionEnum;
import thyyxxk.webserver.constants.Capacity;
import thyyxxk.webserver.dao.his.reports.InquiryOfConsultationFeeDao;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.querydata.InquiryOfConsultationFee;
import thyyxxk.webserver.utils.DateUtil;
import thyyxxk.webserver.utils.ExcelUtil;
import thyyxxk.webserver.utils.ResultVoUtil;
import thyyxxk.webserver.utils.TokenUtil;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 肖
 * @description: 查询会诊费用
 */
@Service
@Slf4j
public class InquiryOfConsultationFeeService {
    private final InquiryOfConsultationFeeDao dao;

    @Autowired
    public InquiryOfConsultationFeeService(InquiryOfConsultationFeeDao dao) {
        this.dao = dao;
    }

    /**
     * 查询会诊的费用
     * 根据的日期区间查询 并分页查询
     *
     * @param param 查询条件
     *              data中包含 分页条件 current 页数 size 条数
     *              以及查询的数据的条件 startTime 开始时间 endTime结束时间
     * @return 返回一个map的集合 包含的分页的数据以及总的条数
     */
    public ResultVo<Map<String, Object>> inquiryOfConsultationFee(InquiryOfConsultationFee param) {
        IPage<InquiryOfConsultationFee> page = queryPage(param);
        Map<String, Object> map = new HashMap<>(Capacity.TWO);
        log.info("查询会诊费用 --> 操作人员：{}，开始时间：{}，结束时间：{},页码：{}，条数{}",
                TokenUtil.getInstance().getTokenUserId(), param.getStartTime(), param.getEndTime(),
                param.getCurrentPage(), param.getPageSize());
        map.put("total", page.getTotal());
        map.put("data", page.getRecords());
        if (page.getTotal() > 0 || page.getRecords().size() > 0) {
            return ResultVoUtil.success(map);
        }
        return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
    }

    /**
     * 查询会诊的费用
     * 根据的日期区间查询
     *
     * @param param 查询条件
     *              data中包含 分页条件 current 页数 size 条数
     *              以及查询的数据的条件 startTime 开始时间 endTime结束时间
     * @return 返回一个 IPage 对象里面
     */
    public IPage<InquiryOfConsultationFee> queryPage(InquiryOfConsultationFee param) {
        IPage<InquiryOfConsultationFee> page = new Page<>(param.getCurrentPage(), param.getPageSize());
        return dao.inquiryOfConsultationFee(page, param.getStartTime(), param.getEndTime(), param.getDept());
    }

    /**
     * 把查询到的数据 生成excel表格 并返回给前端
     *
     * @param response 向客户端返回数据的
     * @param param    查询条件
     *                 data中包含 分页条件 current 页数 size 条数
     *                 以及查询的数据的条件 startTime 开始时间 endTime结束时间
     */
    public void exportExcel(HttpServletResponse response, InquiryOfConsultationFee param) {
        log.info("导出会诊费用excel --> {}", JSON.toJSONString(param));
        List<InquiryOfConsultationFee> list = queryPage(param).getRecords();
        String[] title = {"住院号", "住院次数", "科室", "收费日期", "医生", "会诊级别", "费用"};
        String[][] content = new String[list.size()][];
        for (int i = 0; i < list.size(); i++) {
            content[i] = new String[title.length];
            InquiryOfConsultationFee pojo = list.get(i);
            content[i][0] = pojo.getInpatientNo();
            content[i][1] = String.valueOf(pojo.getAdmissTimes());
            content[i][2] = pojo.getDept();
            content[i][3] = DateUtil.formatDatetime(pojo.getInputDate());
            content[i][4] = pojo.getDoctor();
            content[i][5] = pojo.getPosition();
            content[i][6] = pojo.getChargeFee() + " ￥";
        }
        //传三个参数 一个是 固定的 response ，excel的头部信息，excel的内容
        ExcelUtil.exportExcel(response, title, content);
    }
}
