package com.ruoyi.reportpub.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.reportpub.domain.RzgApplicantRankingInfo;
import com.ruoyi.reportpub.service.IRzgApplicantRankingInfoExcel;
import com.ruoyi.reportpub.service.IRzgApplicantRankingInfoService;

/**
 * 专利公开-申请人排名Controller
 *
 * @author ruoyi
 * @date 2023-03-27
 */
@RestController
@RequestMapping("/reportpub/rzgApplicantRankingInfo")
public class RzgApplicantRankingInfoController extends BaseController {
    private final IRzgApplicantRankingInfoService rzgApplicantRankingInfoService;
    
    @Autowired
    private IRzgApplicantRankingInfoExcel rzgApplicantRankingInfoExcel;

    public RzgApplicantRankingInfoController(IRzgApplicantRankingInfoService rzgApplicantRankingInfoService) {
        this.rzgApplicantRankingInfoService = rzgApplicantRankingInfoService;
    }


    
    @PreAuthorize("@ss.hasPermi('report:rzlApplicantRankingInfo:list')")
	@GetMapping("/list")
	public TableDataInfo list(RzgApplicantRankingInfo rzgApplicantRankingInfo) {

    	String createTimeBegin=rzgApplicantRankingInfo.getCreateTimeBegin();
    	String createTimeEnd=rzgApplicantRankingInfo.getCreateTimeEnd();
    	if(StringUtils.isNotBlank(createTimeBegin) && StringUtils.isNotBlank(createTimeEnd) ) {
    		rzgApplicantRankingInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
    	}
    	if(StringUtils.isNotBlank(createTimeBegin)) {
    		createTimeBegin=createTimeBegin.replace("-", "").trim();
    		if(createTimeBegin.length()>=8) {
    			createTimeBegin = createTimeBegin.substring(0,8);
    		}
    		if(createTimeBegin.length()==6) {
        		createTimeBegin=createTimeBegin+"01";
        	}
    	}
    	
    	
    	rzgApplicantRankingInfo.setCreateTimeBegin(createTimeBegin);
    	
    	
    	if(StringUtils.isNotBlank(createTimeEnd)) {
    		createTimeEnd=createTimeEnd.replace("-", "").trim();
    		if(createTimeEnd.length()>=8) {
    			createTimeEnd = createTimeEnd.substring(0,8);
    		}
    		if(createTimeEnd.length()==6) {
        		createTimeEnd=createTimeEnd+"30";
        	}
    	}
    	
    	
    	
    	rzgApplicantRankingInfo.setCreateTimeEnd(createTimeEnd);
    	
    	
    	
//    	patentTypes
		if (StringUtils.isBlank(rzgApplicantRankingInfo.getPatentTypes())) {
			rzgApplicantRankingInfo.setPatentTypes("1,2,3");
		}
		
		 if(StringUtils.isNotBlank(rzgApplicantRankingInfo.getApplicantTypes())) {
			   List<String>patentTypesList=new ArrayList<String>();
			   String[]patentTypes=rzgApplicantRankingInfo.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());
					   }
				   }
			   }
			   rzgApplicantRankingInfo.setApplicantTypesList(patentTypesList);
		   }
		 
		 
		String[] patentTypes = rzgApplicantRankingInfo.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())) {
					rzgApplicantRankingInfo.setInventQ("1");
				}
				if (PatentType.MODEL_UTILITY.getTypeId().equals(patentType.getTypeId())) {
					rzgApplicantRankingInfo.setUtilityModelQ("1");
				}
				if (PatentType.APPEARANCE_PATENT.getTypeId().equals(patentType.getTypeId())) {
					rzgApplicantRankingInfo.setAppearanceDesignQ("1");
				}
			}
		}
		startPage();
		List<RzgApplicantRankingInfo> list = rzgApplicantRankingInfoService.listByReport(rzgApplicantRankingInfo);
		
//		OutputStream out=null;
//      try {
//			out=new FileOutputStream(new File("D:\\temp\\exp.xlsx"));
////			rzsIpcStatisticsInfoExcel.doExport(out, rzsIpcStatisticsInfo, list);
//			rzgApplicantRankingInfoExcel.doExport(out, rzgApplicantRankingInfo, 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 rzgApplicantRankingInfo 专利公开-申请人排名
     * @return 专利公开-申请人排名集合
     * @date 2023-03-27
     */
//    @PreAuthorize("@ss.hasPermi('reportpub:rzgApplicantRankingInfo:list')")
//    @GetMapping("/list")
//    public TableDataInfo list(RzgApplicantRankingInfo rzgApplicantRankingInfo) {
//        startPage();
//        List<RzgApplicantRankingInfo> list = rzgApplicantRankingInfoService.queryList(rzgApplicantRankingInfo);
//        return getDataTable(list);
//    }


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


    	String createTimeBegin=rzgApplicantRankingInfo.getCreateTimeBegin();
    	String createTimeEnd=rzgApplicantRankingInfo.getCreateTimeEnd();
    	if(StringUtils.isNotBlank(createTimeBegin) && StringUtils.isNotBlank(createTimeEnd) ) {
    		rzgApplicantRankingInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
    	}
    	
    	
    	if(StringUtils.isNotBlank(createTimeBegin)) {
    		createTimeBegin=createTimeBegin.replace("-", "").trim();
    		if(createTimeBegin.length()>=8) {
    			createTimeBegin = createTimeBegin.substring(0,8);
    		}
    		if(createTimeBegin.length()==6) {
        		createTimeBegin=createTimeBegin+"01";
        	}
    	}
    	
    	
    	rzgApplicantRankingInfo.setCreateTimeBegin(createTimeBegin);
    	
    	if(StringUtils.isNotBlank(createTimeEnd)) {
    		createTimeEnd=createTimeEnd.replace("-", "").trim();
    		if(createTimeEnd.length()>=8) {
    			createTimeEnd = createTimeEnd.substring(0,8);
    		}
    		if(createTimeEnd.length()==6) {
        		createTimeEnd=createTimeEnd+"30";
        	}
    	}
    	
    	
    	
    	rzgApplicantRankingInfo.setCreateTimeEnd(createTimeEnd);
    	
    	
    	
//    	patentTypes
		if (StringUtils.isBlank(rzgApplicantRankingInfo.getPatentTypes())) {
			rzgApplicantRankingInfo.setPatentTypes("1,2,3");
		}
		
		 if(StringUtils.isNotBlank(rzgApplicantRankingInfo.getApplicantTypes())) {
			   List<String>patentTypesList=new ArrayList<String>();
			   String[]patentTypes=rzgApplicantRankingInfo.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());
					   }
				   }
			   }
			   rzgApplicantRankingInfo.setApplicantTypesList(patentTypesList);
		   }
		 
		 
		String[] patentTypes = rzgApplicantRankingInfo.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())) {
					rzgApplicantRankingInfo.setInventQ("1");
				}
				if (PatentType.MODEL_UTILITY.getTypeId().equals(patentType.getTypeId())) {
					rzgApplicantRankingInfo.setUtilityModelQ("1");
				}
				if (PatentType.APPEARANCE_PATENT.getTypeId().equals(patentType.getTypeId())) {
					rzgApplicantRankingInfo.setAppearanceDesignQ("1");
				}
			}
		}
		startPage();
		List<RzgApplicantRankingInfo> list = rzgApplicantRankingInfoService.listByReport(rzgApplicantRankingInfo);
		
		 
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setCharacterEncoding("utf-8");
    	try {
    		rzgApplicantRankingInfoExcel.doExport(response.getOutputStream(), rzgApplicantRankingInfo,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('reportpub:rzgApplicantRankingInfo:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(rzgApplicantRankingInfoService.getById(id));
    }


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


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


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


}
