package com.ruoyi.reportrzs.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ruoyi.NationalRankingUtils;
import com.ruoyi.NationalRankingUtils.Item;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.report.domain.RzlNationalRankingInfo;
import com.ruoyi.reportrzs.domain.RzsNationalRankingInfo;
import com.ruoyi.reportrzs.service.IRzsNationalRankingInfoExcel;
import com.ruoyi.reportrzs.service.IRzsNationalRankingInfoService;

/**
 * 专利授权-全国排名Controller
 *
 * @author ruoyi
 * @date 2023-03-27
 */
@RestController
@RequestMapping("/reportrzs/rzsNationalRankingInfo")
public class RzsNationalRankingInfoController extends BaseController {
    private final IRzsNationalRankingInfoService rzsNationalRankingInfoService;
    
    @Autowired
    private IRzsNationalRankingInfoExcel rzsNationalRankingInfoExcel;

    @Autowired
	private RuoYiConfig ruoYiConfig;
	@Autowired
	private RedisCache redisCache;
	
    public RzsNationalRankingInfoController(IRzsNationalRankingInfoService rzsNationalRankingInfoService) {
        this.rzsNationalRankingInfoService = rzsNationalRankingInfoService;
    }


    @GetMapping("/list")
    public AjaxResult list(RzsNationalRankingInfo rzsNationalRankingInfo) {
//    	createTimeEnd=2023-05-17 23:59:59&createTimeBegin=2023-04-04 00:00:00
//      startPage();
		if (StringUtils.isBlank(rzsNationalRankingInfo.getCreateTimeBegin())
				|| StringUtils.isBlank(rzsNationalRankingInfo.getCreateTimeEnd())) {
			return AjaxResult.error("请指定数据区间");
		}
		String createTimeBegin=rzsNationalRankingInfo.getCreateTimeBegin().trim();
		String createTimeEnd=rzsNationalRankingInfo.getCreateTimeEnd().trim();
		
		rzsNationalRankingInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
		
		createTimeBegin=createTimeBegin.replaceAll("-", "");
		if(createTimeBegin.length()>8) {
			createTimeBegin=createTimeBegin.substring(0, 8);
		}
		
		createTimeEnd=createTimeEnd.replaceAll("-", "");
		if(createTimeEnd.length()>8) {
			createTimeEnd=createTimeEnd.substring(0, 8);
		}
		
		if(createTimeBegin.length()==6) {
//			createTimeBegin=createTimeBegin+"01";
			createTimeBegin=createTimeBegin+"00";
		}
		if(createTimeEnd.length()==6) {
			createTimeEnd=createTimeEnd+"31";
		}
		
//		String timeUpdate = rzsNationalRankingInfo.getYear() + rzsNationalRankingInfo.getMonth() + "01";
		String type = "auth";
		

		List<Item> items = NationalRankingUtils.getRankingList(type, createTimeBegin,createTimeEnd, redisCache,ruoYiConfig,createTimeBegin,createTimeEnd);
		List<RzlNationalRankingInfo> list = new ArrayList<RzlNationalRankingInfo>();
		for(Item item:items) {
			RzlNationalRankingInfo info=new RzlNationalRankingInfo();
			info.setRanking(item.ranking);
			info.setArea(item.province);
			info.setInventionPatentsUmber(item.number);
			list.add(info);
		}
		
		
//		OutputStream out=null;
//      try {
//			out=new FileOutputStream(new File("D:\\temp\\exp.xlsx"));
//			rzsNationalRankingInfoExcel.doExport(out, rzsNationalRankingInfo, list);
//			
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}finally {
//			try {
//				out.close();
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//		}
		
		return AjaxResult.success(list);
	
    }
    
    
    /**
     * 查询专利授权-全国排名列表
     *
     * @param rzsNationalRankingInfo 专利授权-全国排名
     * @return 专利授权-全国排名集合
     * @date 2023-03-27
     */
//    @PreAuthorize("@ss.hasPermi('reportrzs:rzsNationalRankingInfo:list')")
//    @GetMapping("/list")
//    public TableDataInfo list(RzsNationalRankingInfo rzsNationalRankingInfo) {
//        startPage();
//        List<RzsNationalRankingInfo> list = rzsNationalRankingInfoService.queryList(rzsNationalRankingInfo);
//        return getDataTable(list);
//    }


    /**
     * 导出专利授权-全国排名列表
     *
     * @param rzsNationalRankingInfo 专利授权-全国排名
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportrzs:rzsNationalRankingInfo:export')")
    @Log(title = "专利授权-全国排名", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, RzsNationalRankingInfo rzsNationalRankingInfo) {

//    	createTimeEnd=2023-05-17 23:59:59&createTimeBegin=2023-04-04 00:00:00
//      startPage();
		if (StringUtils.isBlank(rzsNationalRankingInfo.getCreateTimeBegin())
				|| StringUtils.isBlank(rzsNationalRankingInfo.getCreateTimeEnd())) {
//			return AjaxResult.error("请指定数据区间");
			throw new RuntimeException("请指定数据区间");
		}
		String createTimeBegin=rzsNationalRankingInfo.getCreateTimeBegin().trim();
		String createTimeEnd=rzsNationalRankingInfo.getCreateTimeEnd().trim();
		
		rzsNationalRankingInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
		
		createTimeBegin=createTimeBegin.replaceAll("-", "");
		if(createTimeBegin.length()>8) {
			createTimeBegin=createTimeBegin.substring(0, 8);
		}
		
		createTimeEnd=createTimeEnd.replaceAll("-", "");
		if(createTimeEnd.length()>8) {
			createTimeEnd=createTimeEnd.substring(0, 8);
		}
		
		if(createTimeBegin.length()==6) {
			createTimeBegin=createTimeBegin+"01";
		}
		if(createTimeEnd.length()==6) {
			createTimeEnd=createTimeEnd+"31";
		}
		
//		String timeUpdate = rzsNationalRankingInfo.getYear() + rzsNationalRankingInfo.getMonth() + "01";
		String type = "auth";
		
		

		List<Item> items = NationalRankingUtils.getRankingList(type, createTimeBegin,createTimeEnd, redisCache,ruoYiConfig,createTimeBegin,createTimeEnd);
		List<RzlNationalRankingInfo> list = new ArrayList<RzlNationalRankingInfo>();
		for(Item item:items) {
			
			RzlNationalRankingInfo info=new RzlNationalRankingInfo();
			info.setRanking(item.ranking);
			info.setArea(item.province);
			info.setInventionPatentsUmber(item.number);
			
			list.add(info);
			
		}
		
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setCharacterEncoding("utf-8");
		
		try {
			rzsNationalRankingInfoExcel.doExport(response.getOutputStream(), new RzsNationalRankingInfo(), list);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			logger.error("导出失败," + e.getMessage(), e);
			throw new RuntimeException("导出失败，请联系管理员", e);
		}
		
	
    
		
    }

    /**
     * 获取专利授权-全国排名详细信息
     *
     * @param id 主键id
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportrzs:rzsNationalRankingInfo:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(rzsNationalRankingInfoService.getById(id));
    }


    /**
     * 新增专利授权-全国排名信息
     *
     * @param rzsNationalRankingInfo 专利授权-全国排名
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportrzs:rzsNationalRankingInfo:add')")
    @Log(title = "专利授权-全国排名", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody RzsNationalRankingInfo rzsNationalRankingInfo) {
        return toAjax(rzsNationalRankingInfoService.save(rzsNationalRankingInfo));
    }


    /**
     * 修改专利授权-全国排名信息
     *
     * @param rzsNationalRankingInfo 专利授权-全国排名
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportrzs:rzsNationalRankingInfo:edit')")
    @Log(title = "专利授权-全国排名", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody RzsNationalRankingInfo rzsNationalRankingInfo) {
        return toAjax(rzsNationalRankingInfoService.updateById(rzsNationalRankingInfo));
    }


    /**
     * 删除专利授权-全国排名信息
     *
     * @param ids 主键ids
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportrzs:rzsNationalRankingInfo:remove')")
    @Log(title = "专利授权-全国排名", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(rzsNationalRankingInfoService.removeByIds(Arrays.asList(ids)));
    }


}
