summary_rs/parse/
assign.rs1use crate::parse::regex::match_project_no;
2use crate::types::SummaryModelDocx;
3use std::collections::HashMap;
4
5pub fn parse_docx_table(content: Vec<String>) -> SummaryModelDocx {
6 let mut summary = SummaryModelDocx::default();
7 for (index, item) in content.iter().enumerate() {
8 if item.contains("概要") && item.contains("Test Summary")
10 {
11 summary.title = item.clone().split("项目编号").next().unwrap().to_string();
12 }
13 if item.contains("项目编号")
15 {
16 summary.project_no = match_project_no(&item);
17 }
18 if item.contains("测试标准")
20 {
21 summary.base.test_date = content[index - 1].clone();
22 }
23 let field_mappings = HashMap::from([
24 ("委托单位", &mut summary.base.consignor),
25 ("生产单位", &mut summary.base.manufacturer),
26 ("测试单位", &mut summary.base.test_lab),
27 ("名称", &mut summary.base.cn_name),
28 ("电芯类别", &mut summary.base.classification),
29 ("型号", &mut summary.base.model),
30 ("商标", &mut summary.base.trademark),
31 ("额定电压", &mut summary.base.voltage),
32 ("额定容量", &mut summary.base.capacity),
33 ("额定能量", &mut summary.base.watt),
34 ("外观", &mut summary.base.shape),
35 ("质量", &mut summary.base.mass),
36 ("锂含量", &mut summary.base.li_content),
37 ("测试报告编号", &mut summary.base.test_report_no),
38 ("测试标准", &mut summary.base.test_manual),
39 ("高度模拟", &mut summary.base.test1),
40 ("温度试验", &mut summary.base.test2),
41 ("振动", &mut summary.base.test3),
42 ("冲击", &mut summary.base.test4),
43 ("外部短路", &mut summary.base.test5),
44 ("撞击/挤压", &mut summary.base.test6),
45 ("过度充电", &mut summary.base.test7),
46 ("强制放电", &mut summary.base.test8),
47 ("UN38.3.3.1(f)", &mut summary.base.un38_f),
48 ("UN38.3.3.1(g)", &mut summary.base.un38_g),
49 ("备注", &mut summary.base.note),
50 ]);
51
52 for (key, field) in field_mappings {
53 if item.contains(key) {
54 *field = content[index + 1].clone();
55 }
56 }
57 }
58 summary.issue_date = content[content.len() - 1].clone();
60 summary
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66 use crate::{parse::read::parse_docx_text, reader::read_docx_content};
67
68 #[test]
69 fn test_parse_docx() {
70 let text = read_docx_content(
71 r"C:\Users\29115\Downloads\PEKGZ202412167637 概要.docx",
73 vec!["word/document.xml".to_string()],
74 );
75 let content = parse_docx_text(&text.unwrap()[0].clone());
76 println!("{}", content.clone().join("\n"));
77 let summary = parse_docx_table(content);
78 std::fs::write("test2.json", serde_json::to_string(&summary).unwrap()).unwrap();
79 }
80}