package com.ruoyi.reportpub.controller;

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

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.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.report.vo.IpcStatisticsInfo;
import com.ruoyi.report.vo.IpcStatisticsInfoVo;
import com.ruoyi.reportpub.domain.RzgIpcStatisticsInfo;
import com.ruoyi.reportpub.service.IRzgIpcStatisticsInfoExcel;
import com.ruoyi.reportpub.service.IRzgIpcStatisticsInfoService;

/**
 * 专利公开-主IPC统计Controller
 *
 * @author ruoyi
 * @date 2023-03-27
 */
@RestController
@RequestMapping("/reportpub/rzgIpcStatisticsInfo")
public class RzgIpcStatisticsInfoController extends BaseController {
    private final IRzgIpcStatisticsInfoService rzgIpcStatisticsInfoService;
    
    @Autowired
    private IRzgIpcStatisticsInfoExcel rzgIpcStatisticsInfoExcel;

    public RzgIpcStatisticsInfoController(IRzgIpcStatisticsInfoService rzgIpcStatisticsInfoService) {
        this.rzgIpcStatisticsInfoService = rzgIpcStatisticsInfoService;
    }

    public static void main(String[] args) {
		String str="2022-06 00:00:00";
		str=str.replace("-", "").trim();
		str=str.substring(0,6);
		System.out.println(str);
	}
    
    @PreAuthorize("@ss.hasPermi('report:rzlIpcStatisticsInfo:list')")
	@GetMapping("/list")
	public TableDataInfo list(RzgIpcStatisticsInfo rzgIpcStatisticsInfo) {
//        startPage();
//        List<RzlIpcStatisticsInfo> list = rzlIpcStatisticsInfoService.queryList(rzlIpcStatisticsInfo);
    	
    	String createTimeBegin=rzgIpcStatisticsInfo.getCreateTimeBegin();
    	String createTimeEnd=rzgIpcStatisticsInfo.getCreateTimeEnd();
    	if(StringUtils.isNotBlank(createTimeBegin) && StringUtils.isNotBlank(createTimeEnd)) {
    		rzgIpcStatisticsInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
    	}
    	if(StringUtils.isNotBlank(createTimeBegin)) {
    		createTimeBegin=createTimeBegin.replace("-", "").trim();
    		if(createTimeBegin.length()>=6) {
    			createTimeBegin = createTimeBegin.substring(0,6);
    		}
    	}
    	
    	
    	if(StringUtils.isNotBlank(createTimeEnd)) {
    		createTimeEnd=createTimeEnd.replace("-", "").trim();
    		if(createTimeEnd.length()>=6) {
    			createTimeEnd = createTimeEnd.substring(0,6);
    		}
    	}
    	
    	
    	if ("ipc".equals(rzgIpcStatisticsInfo.getQueryIpc())) {
    		rzgIpcStatisticsInfo.setCreateTimeBegin(createTimeBegin);
    		rzgIpcStatisticsInfo.setCreateTimeEnd(createTimeEnd);
    	}else {
    		rzgIpcStatisticsInfo.setCreateTimeBegin(null);
    		rzgIpcStatisticsInfo.setCreateTimeEnd(null);
    	}
    	
		List<IpcStatisticsInfoVo> list = rzgIpcStatisticsInfoService.listByReport(rzgIpcStatisticsInfo);
//		&createTimeBegin=2022-06 00:00:00&createTimeEnd=2022-06 23:59:59
		
		
		if (null != list && list.size() > 0) {
			IpcStatisticsInfoVo sum = new IpcStatisticsInfoVo();
			sum.setType("-");
			if ("ipc".equals(rzgIpcStatisticsInfo.getQueryIpc()) && "ipc".equals(rzgIpcStatisticsInfo.getQueryData())) {
				sum.setTypeName("A-H总计");
			} else {
				sum.setTypeName("总计");
			}
			sum.setDatas(new HashMap<String, IpcStatisticsInfo>());
			
			for (IpcStatisticsInfoVo vo : list) {
				if (vo.getDatas() == null || vo.getDatas().isEmpty()) {
					continue;
				}

				for (Map.Entry<String, IpcStatisticsInfo> ent : vo.getDatas().entrySet()) {
					IpcStatisticsInfo data=ent.getValue();
					String type = ent.getKey();
					if (sum.getDatas().containsKey(type)) {
						IpcStatisticsInfo sumData = sum.getDatas().get(type);
						sumData.setNumber(sumData.getNumber() + data.getNumber());
						sumData.setProportion( "100%");
						sumData.setHigherSchool(sumData.getHigherSchool()+data.getHigherSchool());
						sumData.setResearchInstitute(sumData.getResearchInstitute()+data.getResearchInstitute());
						sumData.setEnterprise(sumData.getEnterprise()+data.getEnterprise());
						sumData.setInstitutions(sumData.getInstitutions()+data.getInstitutions());
						sumData.setIndividual(sumData.getIndividual()+data.getIndividual());
						
					} else {
						IpcStatisticsInfo sumData = new IpcStatisticsInfo();
						sum.getDatas().put(type, sumData);
						sumData.setNumber(data.getNumber());
						sumData.setProportion( "100%");
						sumData.setHigherSchool(data.getHigherSchool());
						sumData.setResearchInstitute(data.getResearchInstitute());
						sumData.setEnterprise(data.getEnterprise());
						sumData.setInstitutions(data.getInstitutions());
						sumData.setIndividual(data.getIndividual());
						
					}
					
					
				}
			}
			
			for (IpcStatisticsInfoVo vo : list) {
				if (vo.getDatas() == null || vo.getDatas().isEmpty()) {
					continue;
				}
				for (Map.Entry<String, IpcStatisticsInfo> ent : vo.getDatas().entrySet()) {
					String type = ent.getKey();
					long total=sum.getDatas().get(type).getNumber();
					if(total>0) {
						 double prop = (ent.getValue().getNumber() * 100 + 0.0) / total;
			             ent.getValue().setProportion(String.format("%.2f", prop) + "%");
					}else {
						ent.getValue().setProportion("--");
					}
					
					
				}
				
			}

			list.add(sum);

		}

		
		
//		OutputStream out = null;
//		try {
//			out = new FileOutputStream(new File("D:\\temp\\exp.xlsx"));
//			rzgIpcStatisticsInfoExcel.doExport(out, rzgIpcStatisticsInfo,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);
	}

    /**
     * 查询专利公开-主IPC统计列表
     *
     * @param rzgIpcStatisticsInfo 专利公开-主IPC统计
     * @return 专利公开-主IPC统计集合
     * @date 2023-03-27
     */
//    @PreAuthorize("@ss.hasPermi('reportpub:rzgIpcStatisticsInfo:list')")
//    @GetMapping("/list")
//    public TableDataInfo list(RzgIpcStatisticsInfo rzgIpcStatisticsInfo) {
//        startPage();
//        List<RzgIpcStatisticsInfo> list = rzgIpcStatisticsInfoService.queryList(rzgIpcStatisticsInfo);
//        return getDataTable(list);
//    }


    /**
     * 导出专利公开-主IPC统计列表
     *
     * @param rzgIpcStatisticsInfo 专利公开-主IPC统计
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportpub:rzgIpcStatisticsInfo:export')")
    @Log(title = "专利公开-主IPC统计", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, RzgIpcStatisticsInfo rzgIpcStatisticsInfo) {

//      startPage();
//      List<RzlIpcStatisticsInfo> list = rzlIpcStatisticsInfoService.queryList(rzlIpcStatisticsInfo);
  	
    	String createTimeBegin=rzgIpcStatisticsInfo.getCreateTimeBegin();
    	String createTimeEnd=rzgIpcStatisticsInfo.getCreateTimeEnd();
    	if(StringUtils.isNotBlank(createTimeBegin) && StringUtils.isNotBlank(createTimeEnd)) {
    		rzgIpcStatisticsInfo.setCountTimeStr(createTimeBegin+"至"+createTimeEnd);
    	}
    	if(StringUtils.isNotBlank(createTimeBegin)) {
    		createTimeBegin=createTimeBegin.replace("-", "").trim();
    		if(createTimeBegin.length()>=6) {
    			createTimeBegin = createTimeBegin.substring(0,6);
    		}
    	}
    	
    	
    	if(StringUtils.isNotBlank(createTimeEnd)) {
    		createTimeEnd=createTimeEnd.replace("-", "").trim();
    		if(createTimeEnd.length()>=6) {
    			createTimeEnd = createTimeEnd.substring(0,6);
    		}
    	}
    	
  	
  	
  	if ("ipc".equals(rzgIpcStatisticsInfo.getQueryIpc())) {
  		rzgIpcStatisticsInfo.setCreateTimeBegin(createTimeBegin);
  		rzgIpcStatisticsInfo.setCreateTimeEnd(createTimeEnd);
  	}else {
  		rzgIpcStatisticsInfo.setCreateTimeBegin(null);
  		rzgIpcStatisticsInfo.setCreateTimeEnd(null);
  	}
  	
		List<IpcStatisticsInfoVo> list = rzgIpcStatisticsInfoService.listByReport(rzgIpcStatisticsInfo);
//		&createTimeBegin=2022-06 00:00:00&createTimeEnd=2022-06 23:59:59
		
		
		if (null != list && list.size() > 0) {
			IpcStatisticsInfoVo sum = new IpcStatisticsInfoVo();
			sum.setType("-");
			if ("ipc".equals(rzgIpcStatisticsInfo.getQueryIpc()) && "ipc".equals(rzgIpcStatisticsInfo.getQueryData())) {
				sum.setTypeName("A-H总计");
			} else {
				sum.setTypeName("总计");
			}
			sum.setDatas(new HashMap<String, IpcStatisticsInfo>());
			
			for (IpcStatisticsInfoVo vo : list) {
				if (vo.getDatas() == null || vo.getDatas().isEmpty()) {
					continue;
				}

				for (Map.Entry<String, IpcStatisticsInfo> ent : vo.getDatas().entrySet()) {
					IpcStatisticsInfo data=ent.getValue();
					String type = ent.getKey();
					if (sum.getDatas().containsKey(type)) {
						IpcStatisticsInfo sumData = sum.getDatas().get(type);
						sumData.setNumber(sumData.getNumber() + data.getNumber());
						sumData.setProportion( "100%");
						sumData.setHigherSchool(sumData.getHigherSchool()+data.getHigherSchool());
						sumData.setResearchInstitute(sumData.getResearchInstitute()+data.getResearchInstitute());
						sumData.setEnterprise(sumData.getEnterprise()+data.getEnterprise());
						sumData.setInstitutions(sumData.getInstitutions()+data.getInstitutions());
						sumData.setIndividual(sumData.getIndividual()+data.getIndividual());
						
					} else {
						IpcStatisticsInfo sumData = new IpcStatisticsInfo();
						sum.getDatas().put(type, sumData);
						sumData.setNumber(data.getNumber());
						sumData.setProportion( "100%");
						sumData.setHigherSchool(data.getHigherSchool());
						sumData.setResearchInstitute(data.getResearchInstitute());
						sumData.setEnterprise(data.getEnterprise());
						sumData.setInstitutions(data.getInstitutions());
						sumData.setIndividual(data.getIndividual());
						
					}
					
					
				}
			}
			
			for (IpcStatisticsInfoVo vo : list) {
				if (vo.getDatas() == null || vo.getDatas().isEmpty()) {
					continue;
				}
				for (Map.Entry<String, IpcStatisticsInfo> ent : vo.getDatas().entrySet()) {
					String type = ent.getKey();
					long total=sum.getDatas().get(type).getNumber();
					if(total>0) {
						 double prop = (ent.getValue().getNumber() * 100 + 0.0) / total;
			             ent.getValue().setProportion(String.format("%.2f", prop) + "%");
					}else {
						ent.getValue().setProportion("--");
					}
					
					
				}
				
			}

			list.add(sum);

		}
		
		

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setCharacterEncoding("utf-8");
    	try {
    		rzgIpcStatisticsInfoExcel.doExport(response.getOutputStream(), rzgIpcStatisticsInfo,list);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			logger.error("导出失败," + e.getMessage(), e);
			throw new RuntimeException("导出失败，请联系管理员", e);
		}
    	
    	

	
		
		
    }

    /**
     * 获取专利公开-主IPC统计详细信息
     *
     * @param id 主键id
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportpub:rzgIpcStatisticsInfo:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(rzgIpcStatisticsInfoService.getById(id));
    }


    /**
     * 新增专利公开-主IPC统计信息
     *
     * @param rzgIpcStatisticsInfo 专利公开-主IPC统计
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportpub:rzgIpcStatisticsInfo:add')")
    @Log(title = "专利公开-主IPC统计", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody RzgIpcStatisticsInfo rzgIpcStatisticsInfo) {
        return toAjax(rzgIpcStatisticsInfoService.save(rzgIpcStatisticsInfo));
    }


    /**
     * 修改专利公开-主IPC统计信息
     *
     * @param rzgIpcStatisticsInfo 专利公开-主IPC统计
     * @return 结果
     * @date 2023-03-27
     */
    @PreAuthorize("@ss.hasPermi('reportpub:rzgIpcStatisticsInfo:edit')")
    @Log(title = "专利公开-主IPC统计", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody RzgIpcStatisticsInfo rzgIpcStatisticsInfo) {
        return toAjax(rzgIpcStatisticsInfoService.updateById(rzgIpcStatisticsInfo));
    }


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


}
