1 lass PatentAnalysisExportExcelResult(requestContext: RequestContext,
2 patentAnalysisResult: PatentAnalysisResult) extends ActionResult(requestContext) with Disposable {
3 val fieldMap = Map[String, String](("ad_year", "申请日"),
4 ("pd_year", "公开公告日"),
5 ("paid", "申请人"),
6 ("inid", "发明人"),
7 ("ic_subclass", "IPC小类"),
8 ("ic_supergroup", "IPC大组"),
9 ("ic", "IPC小组"),
10 ("co", "专利所属国家地区"),
11 ("pac", "申请人所在国家地区"),
12 ("pcid_1", "一级技术分类"),
13 ("pcid_2", "二级技术分类"))
14 val idSet = Set[String]("ad_year", "pd_year", "ic_subclass", "ic_supergroup", "ic")
15
16 def execute = {
17 response.setContentType("application/excel")
18 response.setCharacterEncoding("utf-8")
19
20 patentAnalysisResult.patentAnalysisResultParam.analysisType match {
21 case "s" => {
22 response.addHeader("Content-Disposition", "attachment; filename=" + "patent-analysis-tableexport-" + patentAnalysisResult.patentAnalysisResultParam.analysisFieldOne + "-" + patentAnalysisResult.patentAnalysisResultParam.analysisFieldTwo + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls")
23 writeDoubleFieldFacet(patentAnalysisResult.DoubleFieldCounts, patentAnalysisResult.patentAnalysisResultParam.analysisFieldOne, patentAnalysisResult.patentAnalysisResultParam.analysisFieldTwo)
24 }
25 case _ => {
26 response.addHeader("Content-Disposition", "attachment; filename=" + "patent-analysis-tableexport-" + patentAnalysisResult.patentAnalysisResultParam.analysisField + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls")
27
28 patentAnalysisResult.patentAnalysisResultParam.analysisField match {
29 case "ad_year" => writeFieldFacet(patentAnalysisResult.applicationDateCounts, "申请日分析表格", "申请年", "id")
30 case "pd_year" => writeFieldFacet(patentAnalysisResult.publicationDateCounts, "公开公告日分析表格", "公开公告年", "id")
31 case "paid" => writeFieldFacet(patentAnalysisResult.applicantCounts, "申请人分析表格", "申请人", "name")
32 case "inid" => writeFieldFacet(patentAnalysisResult.inventorCounts, "发明人分析表格", "发明人", "name")
33 case "ic_subclass" => writeFieldFacet(patentAnalysisResult.ipcSubClassCounts, "IPC小类分析表格", "IPC小类", "id")
34 case "ic_supergroup" => writeFieldFacet(patentAnalysisResult.ipcSuperGroupCounts, "IPC大组分析表格", "IPC大组", "id")
35 case "ic" => writeFieldFacet(patentAnalysisResult.ipcCounts, "IPC小类分析表格", "IPC小类", "id")
36 case "cb" => writeFieldFacet(patentAnalysisResult.citationCounts, "引用专利分析表格", "公开公告号", "id")
37 case "cf" => writeFieldFacet(patentAnalysisResult.cocitationCounts, "被引专利分析表格", "公开公告号", "id")
38 case "fm" => writeFieldFacet(patentAnalysisResult.familyStatsCounts, "专利族分析表格", "公开公告号", "id")
39 case "co" => writeFieldFacet(patentAnalysisResult.countryCounts, "申请人所在国家地区分析表格", "国家地区", "name")
40 case "pac" => writeFieldFacet(patentAnalysisResult.applicantCountryCounts, "申请人所在国家地区分析表格", "国家地区", "name")
41 case "pcid_1" => writeFieldFacet(patentAnalysisResult.categoryOneCounts, "一级技术分类分析表格", "分类名称", "name")
42 case "pcid_2" => writeFieldFacet(patentAnalysisResult.categoryTwoCounts, "二级技术分类分析表格", "分类名称", "name")
43 }
44 }
45 }
46 }
47
48 private def writeFieldFacet(list: Array[FacetCount[IdNameEntity]], title: String, columnName: String, t: String) = {
49 val hwb = new HSSFWorkbook()
50 val sheet = hwb.createSheet(title)
51 val firstrow = sheet.createRow(0)
52 val names = Array[String]("排名", columnName, "专利数量")
53
54 for (i <- 0 until names.length) {
55 val cell = firstrow.createCell(i)
56 cell.setCellValue(new HSSFRichTextString(names(i)))
57 }
58
59 for (i <- 0 until list.length) {
60 val row = sheet.createRow(i + 1)
61 val xlsDto = list(i)
62
63 for (j <- 0 until 3) {
64 val sortCell = row.createCell(0)
65
66 sortCell.setCellValue(i + 1)
67
68 val nameCell = row.createCell(1)
69
70 if (t == "id") nameCell.setCellValue(xlsDto.t.id.toString)
71 else nameCell.setCellValue(xlsDto.t.name)
72
73 val countCell = row.createCell(2)
74
75 countCell.setCellValue(xlsDto.count)
76 }
77 }
78
79 using(responseOutputStream) { out =>
80 {
81 hwb.write(out)
82 }
83 }
84 }
85
86 private def writeDoubleFieldFacet(list: Array[DoubleFacetFiled], fieldOne: String, fieldTwo: String) = {
87 val hwb = new HSSFWorkbook()
88 val sheet = hwb.createSheet(fieldMap.getOrElse(fieldOne, "") + "-" + fieldMap.getOrElse(fieldTwo, "") + "表格")
89 val firstrow = sheet.createRow(0)
90 val names = Array[String]("") ++ { if (idSet.contains(fieldOne)) list.map(_.field.id.toString) else list.map(_.field.name) }
91
92 for (i <- 0 until names.length) {
93 val cell = firstrow.createCell(i)
94
95 cell.setCellValue(new HSSFRichTextString(names(i)))
96 }
97
98 val len = list(0).fields.length
99
100 for (i <- 0 until len) {
101 val row = sheet.createRow(i + 1)
102
103 for (j <- 0 to list.length) {
104 if (j == 0) {
105 val cell = row.createCell(0)
106 val field = list(j).fields(i)
107
108 cell.setCellValue(if (idSet.contains(fieldTwo)) field.t.id.toString else field.t.name)
109 } else {
110 val cell = row.createCell(j)
111 val field = list(j-1).fields(i)
112
113 cell.setCellValue(field.count)
114 }
115 }
116 }
117
118 using(responseOutputStream) { out =>
119 {
120 hwb.write(out)
121 }
122 }
123 }
124 }