package com.ruoyi.system.service.impl;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//import com.alibaba.excel.EasyExcel;
//import com.alibaba.excel.ExcelWriter;
//import com.alibaba.excel.write.metadata.WriteSheet;
//import com.alibaba.excel.write.metadata.fill.FillConfig;
//import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.ruoyi.common.utils.SnowFlakeUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.vo.UrPatentValidStaticVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.mapper.UrValidShowDataMapper;
import com.ruoyi.system.domain.UrValidShowData;
import com.ruoyi.system.service.IUrValidShowDataService;
import org.springframework.ui.freemarker.SpringTemplateLoader;

import javax.servlet.http.HttpServletResponse;

/**
 * 有效概览成品Service业务层处理
 * 
 * @author dm
 * @date 2023-02-14
 */
@Service
@Transactional
public class UrValidShowDataServiceImpl implements IUrValidShowDataService 
{
    @Autowired
    private UrValidShowDataMapper urValidShowDataMapper;

    /**
     * 查询有效概览成品
     * 
     * @param id 有效概览成品主键
     * @return 有效概览成品
     */
    @Override
    public UrValidShowData selectUrValidShowDataById(Long id)
    {
        return urValidShowDataMapper.selectUrValidShowDataById(id);
    }

    /**
     * 查询有效概览成品列表
     * 
     * @param urValidShowData 有效概览成品
     * @return 有效概览成品
     */
    @Override
    public List<UrPatentValidStaticVo> selectUrValidShowDataList(UrValidShowData urValidShowData)
    {
        List<UrPatentValidStaticVo> resultList = new ArrayList<>();
        try{
            List<UrValidShowData> list = urValidShowDataMapper.selectUrValidShowDataList(urValidShowData);
            for(UrValidShowData data : list) {
                UrPatentValidStaticVo vo = new UrPatentValidStaticVo();
                List<String> staticList = new ArrayList<>();
                staticList.add(data.getRegionName());
                staticList.add(data.getType());

                Class clazz = UrValidShowData.class;
                for(int j = 0; j < 60; j++) {
                    Method method = clazz.getMethod("getV" + (j+1));
                    Object invoke = method.invoke(data);
                    String value = (String)invoke;
                    staticList.add(value);
                }
                vo.setDatas(staticList);
                resultList.add(vo);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return resultList;
    }

    /**
     * 新增有效概览成品
     * 
     * @param urValidShowData 有效概览成品
     * @return 结果
     */
    @Override
    public int insertUrValidShowData(UrValidShowData urValidShowData)
    {
        if(urValidShowData.getId()==null){
        urValidShowData.setId(SnowFlakeUtils.snowFlakeId());
    }
        return urValidShowDataMapper.insertUrValidShowData(urValidShowData);
    }

    /**
     * 修改有效概览成品
     * 
     * @param urValidShowData 有效概览成品
     * @return 结果
     */
    @Override
    public int updateUrValidShowData(UrValidShowData urValidShowData)
    {
        return urValidShowDataMapper.updateUrValidShowData(urValidShowData);
    }

    /**
     * 批量删除有效概览成品
     * 
     * @param ids 需要删除的有效概览成品主键
     * @return 结果
     */
    @Override
    public int deleteUrValidShowDataByIds(Long[] ids)
    {
        return urValidShowDataMapper.deleteUrValidShowDataByIds(ids);
    }

    /**
     * 删除有效概览成品信息
     * 
     * @param id 有效概览成品主键
     * @return 结果
     */
    @Override
    public int deleteUrValidShowDataById(Long id)
    {
        return urValidShowDataMapper.deleteUrValidShowDataById(id);
    }

    /**
     * 批量---逻辑删除
     *
     * @param ids 需要删除的有效概览成品ID
     * @return 结果
     */
    @Override
    public int setDeleteByIds(Long[] ids)
    {
        Long userId = SecurityUtils.getUserId();
        String userNickName = SecurityUtils.getUserNickName();
        return urValidShowDataMapper.setDeleteByIds(ids,userId,userNickName);
    }

    /**
     * 删除---逻辑删除
     *
     * @param id 有效概览成品ID
     * @return 结果
     */
    @Override
    public int setDeleteById(Long id)
    {
        Long userId = SecurityUtils.getUserId();
        String userNickName = SecurityUtils.getUserNickName();
        return urValidShowDataMapper.setDeleteById(id,userId,userNickName);
    }

    /**
     * 下载excel
     *
     * @param response
     */
    @Override
    public void export(UrValidShowData vo, HttpServletResponse response) {
        try {
            // 使用模板填充表格，这里将表格预制到代码resources下面了，可以根据需求预制到其他地方，绝对路径和相对路径都可。
//            Resource resource = new ClassPathResource("templates/valid_template.xlsx");
//            String templateFileName = resource.getFile().getPath();
//            // 根据模板写入数据，如果目标文件不存在，则自动创建文件
//            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileName).build();
//            //WriteSheet将该sheet内容写入excel中
//            WriteSheet writeSheet = EasyExcel.writerSheet(0, "有效概览").build();
//            FillConfig fillConfig = FillConfig.builder().build();
//
//            // 获取数据
//            List<UrValidShowData> list = this.selectList(vo);
//            Map<String, List<UrValidShowData>> params = new HashMap<>();
//            params.put("data", list);
//            params.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet));

            // 结束写入
//            excelWriter.finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 查询列表
     *
     * @param urValidShowData 有效概览成品
     * @return 有效概览成品
     */
    public List<UrValidShowData> selectList(UrValidShowData urValidShowData) {
        return urValidShowDataMapper.selectUrValidShowDataList(urValidShowData);
    }

}
