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.common.annotation.Log;
import com.ruoyi.common.constant.ApplicantType;
import com.ruoyi.common.constant.PatentType;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.reportrzs.domain.RzsApplicantRankingInfo;
import com.ruoyi.reportrzs.service.IRzsApplicantRankingInfoExcel;
import com.ruoyi.reportrzs.service.IRzsApplicantRankingInfoService;

/**
 * 专利授权-申请人排名Controller
 *
 * @author ruoyi
 * @date 2023-03-27
 */
@RestController
@RequestMapping("/reportrzs/rzsApplicantRankingInfo")
public class RzsApplicantRankingInfoController extends BaseController {
    private final IRzsApplicantRankingInfoService rzsApplicantRankingInfoService;
    
    @Autowired
    private IRzsApplicantRankingInfoExcel rzsApplicantRankingInfoExcel;

    public RzsApplicantRankingInfoController(IRzsApplicantRankingInfoService rzsApplicantRankingInfoService) {
        this.rzsApplicantRankingInfoService = rzsApplicantRankingInfoService;
    }


    /**
     * 查询专利授权-申请人排名列表
     *
     * @param rzsApplicantRankingInfo 专利授权-申请人排名
     * @return 专利授权-申请人排名集合
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportrzs:rzsApplicantRankingInfo:list')")
    @GetMapping("/list")
    public TableDataInfo list(RzsApplicantRankingInfo rzsApplicantRankingInfo) {
    	
    	if (StringUtils.isBlank(rzsApplicantRankingInfo.getPatentTypes())) {
    		rzsApplicantRankingInfo.setPatentTypes("1,2,3");
		}
    	
    	
    	String createTimeBegin = rzsApplicantRankingInfo.getCreateTimeBegin();
		String createTimeEnd = rzsApplicantRankingInfo.getCreateTimeEnd();
		if (StringUtils.isNotBlank(createTimeBegin) && StringUtils.isNotBlank(createTimeEnd)
				&& createTimeBegin.trim().length() >= 6 && createTimeEnd.trim().length() >= 6
//    			&& createTimeBegin.trim().substring(0, 6).equals(createTimeEnd.trim().substring(0, 6))
		) {// 单选一个月
			rzsApplicantRankingInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
//    		createTimeBegin=createTimeBegin.trim().substring(0, 6)+"00";
//    		createTimeEnd=createTimeEnd.trim().substring(0, 6)+"00";
			createTimeBegin=createTimeBegin.trim().replace("-", "");
			createTimeEnd=createTimeEnd.trim().replace("-", "");
			rzsApplicantRankingInfo.setCreateTimeBegin(createTimeBegin.trim().substring(0, 6));
			rzsApplicantRankingInfo.setCreateTimeEnd(createTimeEnd.trim().substring(0, 6));

		}
		
    	
    	 if(StringUtils.isNotBlank(rzsApplicantRankingInfo.getApplicantTypes())) {
			   List<String>patentTypesList=new ArrayList<String>();
			   String[]patentTypes=rzsApplicantRankingInfo.getApplicantTypes().split(",");
			   for(String pt:patentTypes) {
				   if(StringUtils.isNotBlank(pt)) {
					   ApplicantType patentType =ApplicantType.valueOf(pt.trim());
					   if(patentType!=null) {
//						   patentTypesList.add(patentType.getTypeCode());
						   patentTypesList.add(patentType.getTypeName());
					   }
				   }
			   }
			   rzsApplicantRankingInfo.setApplicantTypesList(patentTypesList);
		   }
    	 
		String[] patentTypes = rzsApplicantRankingInfo.getPatentTypes().split(",");
		for (String pt : patentTypes) {
			if (StringUtils.isBlank(pt)) {
				continue;
			}
			PatentType patentType = PatentType.valueOf(pt.trim());
			if (patentType != null) {
				if (PatentType.INVENTION_PATENT.getTypeId().equals(patentType.getTypeId())) {
					rzsApplicantRankingInfo.setInventQ("1");
				}
				if (PatentType.MODEL_UTILITY.getTypeId().equals(patentType.getTypeId())) {
					rzsApplicantRankingInfo.setUtilityModelQ("1");
				}
				if (PatentType.APPEARANCE_PATENT.getTypeId().equals(patentType.getTypeId())) {
					rzsApplicantRankingInfo.setAppearanceDesignQ("1");
				}
			}
		}
		
        startPage();
        
        
        List<RzsApplicantRankingInfo> list = rzsApplicantRankingInfoService.listByReport(rzsApplicantRankingInfo);
        
        
//		OutputStream out=null;
//      try {
//			out=new FileOutputStream(new File("D:\\temp\\exp.xlsx"));
////			rzsIpcStatisticsInfoExcel.doExport(out, rzsIpcStatisticsInfo, list);
//			rzsApplicantRankingInfoExcel.doExport(out, rzsApplicantRankingInfo, 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 getDataTable(list);
    }


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

    	
    	if (StringUtils.isBlank(rzsApplicantRankingInfo.getPatentTypes())) {
    		rzsApplicantRankingInfo.setPatentTypes("1,2,3");
		}
    	
    	String createTimeBegin = rzsApplicantRankingInfo.getCreateTimeBegin();
		String createTimeEnd = rzsApplicantRankingInfo.getCreateTimeEnd();
		if (StringUtils.isNotBlank(createTimeBegin) && StringUtils.isNotBlank(createTimeEnd)
				&& createTimeBegin.trim().length() >= 6 && createTimeEnd.trim().length() >= 6
//    			&& createTimeBegin.trim().substring(0, 6).equals(createTimeEnd.trim().substring(0, 6))
		) {// 单选一个月
			rzsApplicantRankingInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
//    		createTimeBegin=createTimeBegin.trim().substring(0, 6)+"00";
//    		createTimeEnd=createTimeEnd.trim().substring(0, 6)+"00";
			createTimeBegin=createTimeBegin.trim().replace("-", "");
			createTimeEnd=createTimeEnd.trim().replace("-", "");
			rzsApplicantRankingInfo.setCreateTimeBegin(createTimeBegin.trim().substring(0, 6));
			rzsApplicantRankingInfo.setCreateTimeEnd(createTimeEnd.trim().substring(0, 6));

		}
    	
    	 if(StringUtils.isNotBlank(rzsApplicantRankingInfo.getApplicantTypes())) {
			   List<String>patentTypesList=new ArrayList<String>();
			   String[]patentTypes=rzsApplicantRankingInfo.getApplicantTypes().split(",");
			   for(String pt:patentTypes) {
				   if(StringUtils.isNotBlank(pt)) {
					   ApplicantType patentType =ApplicantType.valueOf(pt.trim());
					   if(patentType!=null) {
//						   patentTypesList.add(patentType.getTypeCode());
						   patentTypesList.add(patentType.getTypeName());
					   }
				   }
			   }
			   rzsApplicantRankingInfo.setApplicantTypesList(patentTypesList);
		   }
    	 
		String[] patentTypes = rzsApplicantRankingInfo.getPatentTypes().split(",");
		for (String pt : patentTypes) {
			if (StringUtils.isBlank(pt)) {
				continue;
			}
			PatentType patentType = PatentType.valueOf(pt.trim());
			if (patentType != null) {
				if (PatentType.INVENTION_PATENT.getTypeId().equals(patentType.getTypeId())) {
					rzsApplicantRankingInfo.setInventQ("1");
				}
				if (PatentType.MODEL_UTILITY.getTypeId().equals(patentType.getTypeId())) {
					rzsApplicantRankingInfo.setUtilityModelQ("1");
				}
				if (PatentType.APPEARANCE_PATENT.getTypeId().equals(patentType.getTypeId())) {
					rzsApplicantRankingInfo.setAppearanceDesignQ("1");
				}
			}
		}
		
        startPage();
        
        List<RzsApplicantRankingInfo> list = rzsApplicantRankingInfoService.listByReport(rzsApplicantRankingInfo);
//        return getDataTable(list);
        
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setCharacterEncoding("utf-8");
    	try {
    		   rzsApplicantRankingInfoExcel.doExport(response.getOutputStream(), rzsApplicantRankingInfo, 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:rzsApplicantRankingInfo:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(rzsApplicantRankingInfoService.getById(id));
    }


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


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


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


}
