feat(staff): 修改员工入职服务接口增加用户添加标识参数
- 在IStaffOnJobService接口的add方法中增加isAddUser参数
- 修改StaffOnJobServiceImpl实现类中的add方法逻辑,根据isAddUser参数控制员工编号重复时的行为
- 更新StaffOnJobController中调用add方法时传入true参数
- 在批量导入员工时循环处理每个员工记录并设置合同年限计算逻辑
- 批量导入时调用add方法传入false参数以避免重复检查异常
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.util; |
| | | |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.TemplateExceptionHandler; |
| | | |
| | | import java.io.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | public class ProjectPlanDocGenerator { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | // çæé¡¹ç®è®¡åææ¡£ |
| | | generateProjectPlan(); |
| | | } |
| | | |
| | | public static void generateProjectPlan() throws Exception { |
| | | Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); |
| | | cfg.setClassForTemplateLoading(ProjectPlanDocGenerator.class, "/static"); |
| | | cfg.setDefaultEncoding("UTF-8"); |
| | | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); |
| | | |
| | | // å夿°æ® |
| | | Map<String, Object> data = new HashMap<>(); |
| | | |
| | | // 项ç®åºæ¬ä¿¡æ¯ |
| | | data.put("projectName", "产ååºå管çç³»ç»"); |
| | | data.put("projectVersion", "V1.0"); |
| | | data.put("docDate", "2026å¹´6æ"); |
| | | |
| | | // éç¨ç¢å表 |
| | | List<Map<String, String>> milestones = new ArrayList<>(); |
| | | milestones.add(createMilestone("M1", "éæ±åæ", "ä¸å¡è°ç ãéæ±ææ¡£ç¼å", "第1-2å¨", "éæ±è§æ ¼è¯´æä¹¦")); |
| | | milestones.add(createMilestone("M2", "ç³»ç»è®¾è®¡", "æ¶æè®¾è®¡ãæ°æ®åºè®¾è®¡ãæ¥å£è®¾è®¡", "第3-4å¨", "è®¾è®¡ææ¡£ãæ°æ®åºèæ¬")); |
| | | milestones.add(createMilestone("M3", "åºç¡æ¨¡å", "ç¨æ·æéãé¨é¨å²ä½ãç³»ç»é
ç½®", "第5-6å¨", "åºç¡æ¨¡åå¯è¿è¡çæ¬")); |
| | | milestones.add(createMilestone("M4", "åºå管ç", "å
¥åºãåºåºãåºåçç¹ãæ¹å·ç®¡ç", "第7-9å¨", "åºå模åå¯è¿è¡çæ¬")); |
| | | milestones.add(createMilestone("M5", "éè´éå®", "éè´å°è´¦ãé宿¥ä»·ãå货管ç", "第10-12å¨", "éè´é宿¨¡å")); |
| | | milestones.add(createMilestone("M6", "è´¨æ£è®¾å¤", "è´¨éæ£éªã设å¤ä¿å
»ã计éå¨å
·", "第13-15å¨", "è´¨æ£è®¾å¤æ¨¡å")); |
| | | milestones.add(createMilestone("M7", "人äºåå", "å工管çãåå管çãå®¡æ¹æµç¨", "第16-18å¨", "人äºå忍¡å")); |
| | | milestones.add(createMilestone("M8", "ç³»ç»éæ", "模åèè°ãæ¥å£å¯¹æ¥ãæ°æ®è¿ç§»", "第19-20å¨", "éææµè¯æ¥å")); |
| | | milestones.add(createMilestone("M9", "ä¸çº¿é¨ç½²", "ç产ç¯å¢é¨ç½²ãç¨æ·å¹è®", "第21-22å¨", "æ£å¼ä¸çº¿è¿è¡")); |
| | | data.put("milestones", milestones); |
| | | |
| | | // 人å宿 |
| | | List<Map<String, String>> team = new ArrayList<>(); |
| | | team.add(createTeamMember("项ç®ç»ç", "å¼ XX", "项ç®ç»ç¹ãè¿åº¦ææ§ãé£é©ç®¡ç")); |
| | | team.add(createTeamMember("产åç»ç", "æXX", "éæ±æ¢³çãåå设计ãéªæ¶æµè¯")); |
| | | team.add(createTeamMember("å端å¼å", "çXX", "åç«¯æ¶æãæ ¸å¿æ¨¡åå¼å")); |
| | | team.add(createTeamMember("å端å¼å", "èµµXX", "ä¸å¡æ¨¡åå¼åãæ¥å£å¯¹æ¥")); |
| | | team.add(createTeamMember("å端å¼å", "éXX", "å端页é¢ã交äºå®ç°")); |
| | | team.add(createTeamMember("æµè¯å·¥ç¨å¸", "åXX", "æµè¯ç¨ä¾ãåè½æµè¯ãå彿µè¯")); |
| | | team.add(createTeamMember("è¿ç»´å·¥ç¨å¸", "å¨XX", "ç¯å¢é¨ç½²ãæå¡å¨ç»´æ¤")); |
| | | data.put("team", team); |
| | | |
| | | // è¯å®¡ç»è®º |
| | | List<Map<String, String>> reviewResults = new ArrayList<>(); |
| | | reviewResults.add(createReviewResult("鿱宿´æ§", "éè¿", "æ ¸å¿åè½å·²æç¡®")); |
| | | reviewResults.add(createReviewResult("ææ¯å¯è¡æ§", "éè¿", "ææ¯æ æç稳å®")); |
| | | reviewResults.add(createReviewResult("è¿åº¦åçæ§", "éè¿", "éç¨ç¢å忏
æ°")); |
| | | reviewResults.add(createReviewResult("èµæºé
ç½®", "éè¿", "人ååå·¥æç¡®")); |
| | | data.put("reviewResults", reviewResults); |
| | | |
| | | // å¾
åäºé¡¹ |
| | | List<Map<String, String>> actionItems = new ArrayList<>(); |
| | | actionItems.add(createActionItem("1", "å®åéè´æ¨¡åå®¡æ¹æµç¨", "çXX", "XæXæ¥")); |
| | | actionItems.add(createActionItem("2", "确认åºåé¢è¦éå¼é
ç½®", "æXX", "XæXæ¥")); |
| | | actionItems.add(createActionItem("3", "è¡¥å
设å¤ä¿å
»å®æ¶ä»»å¡éæ±", "èµµXX", "XæXæ¥")); |
| | | data.put("actionItems", actionItems); |
| | | |
| | | // å 载模æ¿å¹¶çæ |
| | | Template template = cfg.getTemplate("项ç®è®¡å书.xml"); |
| | | StringWriter out = new StringWriter(); |
| | | template.process(data, out); |
| | | |
| | | // ä¿å为docx |
| | | String outputPath = "D:/ç马/ææ¡£/project_plan.docx"; |
| | | File outputFile = new File(outputPath); |
| | | try (FileOutputStream fos = new FileOutputStream(outputFile); |
| | | OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { |
| | | osw.write(out.toString()); |
| | | } |
| | | |
| | | System.out.println("ææ¡£çææå: " + outputPath); |
| | | } |
| | | |
| | | private static Map<String, String> createMilestone(String id, String name, String content, String time, String deliverable) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("id", id); |
| | | map.put("name", name); |
| | | map.put("content", content); |
| | | map.put("time", time); |
| | | map.put("deliverable", deliverable); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createTeamMember(String role, String name, String duty) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("role", role); |
| | | map.put("name", name); |
| | | map.put("duty", duty); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createReviewResult(String item, String result, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("item", item); |
| | | map.put("result", result); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("content", content); |
| | | map.put("owner", owner); |
| | | map.put("deadline", deadline); |
| | | return map; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.util; |
| | | |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.TemplateExceptionHandler; |
| | | |
| | | import java.io.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | public class RequirementDocGenerator { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | generateRequirementDoc(); |
| | | } |
| | | |
| | | public static void generateRequirementDoc() throws Exception { |
| | | Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); |
| | | cfg.setClassForTemplateLoading(RequirementDocGenerator.class, "/static"); |
| | | cfg.setDefaultEncoding("UTF-8"); |
| | | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); |
| | | |
| | | Map<String, Object> data = new HashMap<>(); |
| | | |
| | | // 项ç®åºæ¬ä¿¡æ¯ |
| | | data.put("projectName", "产ååºå管çç³»ç»"); |
| | | data.put("projectVersion", "V1.0"); |
| | | data.put("docDate", "2026å¹´6æ"); |
| | | |
| | | // åºå管çåè½ |
| | | List<Map<String, String>> inventoryFeatures = new ArrayList<>(); |
| | | inventoryFeatures.add(createFeature("INV-001", "å
¥åºç®¡ç", "æ¯æéè´å
¥åºãç产å
¥åºãéè´§å
¥åºçå¤ç§å
¥åºæ¹å¼ï¼èªå¨çæå
¥åºåå·ï¼æ¯ææ¹å·ç®¡ç")); |
| | | inventoryFeatures.add(createFeature("INV-002", "åºåºç®¡ç", "æ¯æéå®åºåºãçäº§é¢æãè°æ¨åºåºçï¼æ¯æå
è¿å
åºãæ¹æ¬¡åºåºçç¥")); |
| | | inventoryFeatures.add(createFeature("INV-003", "åºåçç¹", "æ¯æå®æçç¹ã卿çç¹ï¼èªå¨çæçç¹å·®å¼æ¥å")); |
| | | inventoryFeatures.add(createFeature("INV-004", "åºåé¢è¦", "æ¯æåºåä¸ä¸éé¢è¦ãææé¢è¦ãåæ»åºåé¢è¦")); |
| | | inventoryFeatures.add(createFeature("INV-005", "åºåæ¥è¯¢", "æ¯æå¤ç»´åº¦åºåæ¥è¯¢ï¼å®æ¶åºåãåå²åºåãæ¹æ¬¡åºå")); |
| | | data.put("inventoryFeatures", inventoryFeatures); |
| | | |
| | | // éè´éå®åè½ |
| | | List<Map<String, String>> purchaseFeatures = new ArrayList<>(); |
| | | purchaseFeatures.add(createFeature("PUR-001", "éè´å°è´¦", "éè´ç³è¯·ã询价æ¯ä»·ãéè´è®¢åãå°è´§éªæ¶å
¨æµç¨ç®¡ç")); |
| | | purchaseFeatures.add(createFeature("PUR-002", "ä¾åºå管ç", "ä¾åºåæ¡£æ¡ãèµè´¨ç®¡çãè¯ä¼°èæ ¸")); |
| | | purchaseFeatures.add(createFeature("PUR-003", "é宿¥ä»·", "客æ·ç®¡çãæ¥ä»·åãéå®è®¢å管ç")); |
| | | purchaseFeatures.add(createFeature("PUR-004", "å货管ç", "åè´§åãç©æµè·è¸ªãç¾æ¶ç¡®è®¤")); |
| | | purchaseFeatures.add(createFeature("PUR-005", "å®å管ç", "éæ¢è´§å¤çãå®åæå¡è®°å½")); |
| | | data.put("purchaseFeatures", purchaseFeatures); |
| | | |
| | | // è´¨æ£è®¾å¤åè½ |
| | | List<Map<String, String>> qualityFeatures = new ArrayList<>(); |
| | | qualityFeatures.add(createFeature("QA-001", "è´¨éæ£éª", "æ¥ææ£éªãè¿ç¨æ£éªãæåæ£éªï¼æ¯ææ£éªé¡¹ç®é
ç½®")); |
| | | qualityFeatures.add(createFeature("QA-002", "ä¸åæ ¼å¤ç", "ä¸åæ ¼åç»è®°ãå¤çæµç¨ãåå åæ")); |
| | | qualityFeatures.add(createFeature("QA-003", "设å¤å°è´¦", "è®¾å¤æ¡£æ¡ãææ¯åæ°ãé件管ç")); |
| | | qualityFeatures.add(createFeature("QA-004", "设å¤ä¿å
»", "ä¿å
»è®¡åãä¿å
»ä»»å¡ãä¿å
»è®°å½ãéªæ¶ç¡®è®¤")); |
| | | qualityFeatures.add(createFeature("QA-005", "计éå¨å
·", "计éå¨å
·å°è´¦ãæ£å®è®¡åãæ£å®è®°å½")); |
| | | data.put("qualityFeatures", qualityFeatures); |
| | | |
| | | // 人äºåååè½ |
| | | List<Map<String, String>> staffFeatures = new ArrayList<>(); |
| | | staffFeatures.add(createFeature("HR-001", "å工管ç", "å工档æ¡ãå
¥è离èãåå管ç")); |
| | | staffFeatures.add(createFeature("HR-002", "èå¤ç®¡ç", "æå¡è®°å½ã请å审æ¹ãå ç管ç")); |
| | | staffFeatures.add(createFeature("HR-003", "å®¡æ¹æµç¨", "èªå®ä¹å®¡æ¹æµç¨ãå¾
åæéãæµç¨è¿½æº¯")); |
| | | staffFeatures.add(createFeature("HR-004", "ä¼è®®å®¤ç®¡ç", "ä¼è®®å®¤é¢çº¦ãä¼è®®çºªè¦ãéç¥å
Œ")); |
| | | staffFeatures.add(createFeature("HR-005", "è§ç« å¶åº¦", "å¶åº¦åå¸ãé
读确认ãæä»¶å½æ¡£")); |
| | | data.put("staffFeatures", staffFeatures); |
| | | |
| | | // AIæºè½ååè½ |
| | | List<Map<String, String>> aiFeatures = new ArrayList<>(); |
| | | aiFeatures.add(createFeature("AI-001", "æºè½å®¢æ", "åºäºå¤§è¯è¨æ¨¡åçæºè½é®çï¼7x24å°æ¶å¨çº¿æå¡")); |
| | | aiFeatures.add(createFeature("AI-002", "åºå颿µ", "åºäºå岿°æ®çåºå鿱颿µï¼æºè½è¡¥è´§å»ºè®®")); |
| | | aiFeatures.add(createFeature("AI-003", "éå®é¢æµ", "æºå¨å¦ä¹ 驱å¨çéå®è¶å¿åæï¼è¾
å©å³ç")); |
| | | aiFeatures.add(createFeature("AI-004", "å¼å¸¸æ£æµ", "èªå¨è¯å«å¼å¸¸äº¤æãå¼å¸¸åºååå¨")); |
| | | aiFeatures.add(createFeature("AI-005", "æºè½ææ¡£", "OCRè¯å«éè´åãåè´§åï¼èªå¨å½å
¥ç³»ç»")); |
| | | aiFeatures.add(createFeature("AI-006", "è¯é³å½å
¥", "è¯é³è½¬æåï¼å¿«éå½å
¥è®¢åååºåä¿¡æ¯")); |
| | | data.put("aiFeatures", aiFeatures); |
| | | |
| | | // ç¨æ·è§è² |
| | | List<Map<String, String>> userRoles = new ArrayList<>(); |
| | | userRoles.add(createRole("ç³»ç»ç®¡çå", "ç³»ç»ç»´æ¤åé
ç½®", "ç³»ç»é
ç½®ãç¨æ·ç®¡çãæéåé
")); |
| | | userRoles.add(createRole("ä»åºç®¡çå", "åºåæ¥å¸¸ç®¡ç", "å
¥åºãåºåºãçç¹ãåºåæ¥è¯¢")); |
| | | userRoles.add(createRole("éè´å", "éè´ä¸å¡å¤ç", "éè´ç³è¯·ã订å管çãä¾åºå管ç")); |
| | | userRoles.add(createRole("éå®å", "éå®ä¸å¡å¤ç", "æ¥ä»·ã订åãåè´§ãå®å")); |
| | | userRoles.add(createRole("è´¨æ£å", "è´¨éæ£éªå·¥ä½", "æ£éªä»»å¡ãæ£éªè®°å½ãä¸åæ ¼å¤ç")); |
| | | userRoles.add(createRole("设å¤ç®¡çå", "设å¤ç»´æ¤ç®¡ç", "设å¤å°è´¦ãä¿å
»è®¡åãä¿å
»æ§è¡")); |
| | | userRoles.add(createRole("人äºä¸å", "人äºè¡æ¿ç®¡ç", "å工档æ¡ãèå¤ãå®¡æ¹æµç¨")); |
| | | data.put("userRoles", userRoles); |
| | | |
| | | // éªæ¶æ å |
| | | List<Map<String, String>> acceptCriteria = new ArrayList<>(); |
| | | acceptCriteria.add(createCriteria("1", "åè½å®æ´æ§", "ææéæ±åè½å¼å宿并éè¿æµè¯")); |
| | | acceptCriteria.add(createCriteria("2", "æ§è½è¾¾æ ", "ååºæ¶é´ãå¹¶åæ°æ»¡è¶³æ§è½éæ±")); |
| | | acceptCriteria.add(createCriteria("3", "å®å
¨åè§", "éè¿å®å
¨æµè¯ï¼ç¬¦åæ°æ®å®å
¨è§è")); |
| | | acceptCriteria.add(createCriteria("4", "ææ¡£é½å
¨", "ç¨æ·æåãè¿ç»´æåãAPIææ¡£å®æ´")); |
| | | acceptCriteria.add(createCriteria("5", "å¹è®å®æ", "å®æç¨æ·å¹è®å¹¶éè¿èæ ¸")); |
| | | acceptCriteria.add(createCriteria("6", "æ°æ®è¿ç§»", "å岿°æ®æåè¿ç§»å¹¶éªè¯åç¡®")); |
| | | data.put("acceptCriteria", acceptCriteria); |
| | | |
| | | // å 载模æ¿å¹¶çæ |
| | | Template template = cfg.getTemplate("éæ±è¯´æä¹¦.xml"); |
| | | StringWriter out = new StringWriter(); |
| | | template.process(data, out); |
| | | |
| | | // ä¿å为docx |
| | | String outputPath = "D:/ç马/ææ¡£/éæ±è¯´æä¹¦.docx"; |
| | | File outputFile = new File(outputPath); |
| | | outputFile.getParentFile().mkdirs(); |
| | | try (FileOutputStream fos = new FileOutputStream(outputFile); |
| | | OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { |
| | | osw.write(out.toString()); |
| | | } |
| | | |
| | | System.out.println("éæ±è¯´æä¹¦çææå: " + outputPath); |
| | | } |
| | | |
| | | private static Map<String, String> createFeature(String id, String name, String desc) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("id", id); |
| | | map.put("name", name); |
| | | map.put("desc", desc); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createRole(String name, String desc, String permission) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("name", name); |
| | | map.put("desc", desc); |
| | | map.put("permission", permission); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createCriteria(String no, String item, String criteria) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("item", item); |
| | | map.put("criteria", criteria); |
| | | return map; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.util; |
| | | |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.TemplateExceptionHandler; |
| | | |
| | | import java.io.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | public class ServerOpsDocGenerator { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | generateServerOpsDoc(); |
| | | } |
| | | |
| | | public static void generateServerOpsDoc() throws Exception { |
| | | Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); |
| | | cfg.setClassForTemplateLoading(ServerOpsDocGenerator.class, "/static"); |
| | | cfg.setDefaultEncoding("UTF-8"); |
| | | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); |
| | | |
| | | Map<String, Object> data = new HashMap<>(); |
| | | |
| | | data.put("projectName", "产ååºå管çç³»ç»"); |
| | | data.put("projectVersion", "V1.0"); |
| | | data.put("docDate", "2026å¹´6æ"); |
| | | |
| | | // æå¡å¨æ¸
å |
| | | List<Map<String, String>> servers = new ArrayList<>(); |
| | | servers.add(createServer("SVR-APP-01", "åºç¨æå¡å¨", "192.168.1.101", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-APP-02", "åºç¨æå¡å¨", "192.168.1.102", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-DB-01", "æ°æ®åºä¸»åº", "192.168.1.201", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-DB-02", "æ°æ®åºä»åº", "192.168.1.202", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-REDIS-01", "Redisèç¹1", "192.168.1.301", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-REDIS-02", "Redisèç¹2", "192.168.1.302", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-REDIS-03", "Redisèç¹3", "192.168.1.303", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-FILE-01", "æä»¶æå¡å¨", "192.168.1.401", "4æ ¸", "8GB", "2TB HDD", "CentOS 7.9", "ç£çåè¦")); |
| | | servers.add(createServer("SVR-AI-01", "AIæ¨çæå¡å¨", "192.168.1.501", "16æ ¸", "64GB", "1TB SSD", "Ubuntu 22.04", "è¿è¡ä¸")); |
| | | servers.add(createServer("SVR-NGINX-01", "Nginx代ç", "192.168.1.11", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "è¿è¡ä¸")); |
| | | data.put("servers", servers); |
| | | |
| | | // è¿ç»´è¿åº¦è·è¸ª |
| | | List<Map<String, String>> progress = new ArrayList<>(); |
| | | progress.add(createProgress("2026-05-20", "æå¡å¨åå§ç¯å¢é
ç½®", "å®è£
JDK25ãNginxãDocker", "100%", "")); |
| | | progress.add(createProgress("2026-05-21", "æ°æ®åºä¸»ä»æå»º", "MySQL8.0主ä»å¤å¶é
ç½®", "100%", "")); |
| | | progress.add(createProgress("2026-05-22", "Redisé群é¨ç½²", "3èç¹å¨å
µæ¨¡å¼é¨ç½²", "100%", "")); |
| | | progress.add(createProgress("2026-05-23", "åºç¨æå¡é¨ç½²", "SpringBootåºç¨åèç¹é¨ç½²", "100%", "")); |
| | | progress.add(createProgress("2026-05-24", "SSLè¯ä¹¦é
ç½®", "Nginx HTTPSé
ç½®", "100%", "")); |
| | | progress.add(createProgress("2026-05-25", "çæ§ç³»ç»æå»º", "Prometheus+Grafanaé¨ç½²", "90%", "åè¦è§åå¾
å®å")); |
| | | progress.add(createProgress("2026-05-26", "æ¥å¿æ¶éç³»ç»", "ELKæ¥å¿å¹³å°æå»º", "80%", "Kibana仪表çå¾
é
ç½®")); |
| | | progress.add(createProgress("2026-05-27", "å¤ä»½çç¥é
ç½®", "æ°æ®åºèªå¨å¤ä»½èæ¬é
ç½®", "100%", "")); |
| | | progress.add(createProgress("2026-05-28", "å®å
¨å åº", "é²ç«å¢è§åãSSHå åº", "85%", "ç«¯å£æ«æå¾
宿")); |
| | | progress.add(createProgress("2026-05-29", "ååæµè¯", "JMeteræ§è½åæµ", "100%", "å¹¶åææ è¾¾æ ")); |
| | | progress.add(createProgress("2026-05-30", "ç¾å¤æ¼ç»", "æ°æ®åºä¸»ä»åæ¢æ¼ç»", "100%", "忢æ¶é´30ç§å
")); |
| | | data.put("progress", progress); |
| | | |
| | | // æå¡å¨å·¡æ£è®°å½ |
| | | List<Map<String, String>> inspections = new ArrayList<>(); |
| | | inspections.add(createInspection("2026-05-20", "SVR-APP-01", "CPU 35%, å
å 52%, ç£ç 40%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-20", "SVR-APP-02", "CPU 30%, å
å 48%, ç£ç 38%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-20", "SVR-DB-01", "CPU 45%, å
å 68%, ç£ç 55%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-20", "SVR-DB-02", "CPU 20%, å
å 60%, ç£ç 52%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-20", "SVR-REDIS-01", "CPU 15%, å
å 40%, ç£ç 25%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-25", "SVR-APP-01", "CPU 42%, å
å 58%, ç£ç 43%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-25", "SVR-DB-01", "CPU 55%, å
å 72%, ç£ç 60%", "å
³æ³¨", "å
å使ç¨çåé«ï¼å»ºè®®å
³æ³¨")); |
| | | inspections.add(createInspection("2026-05-25", "SVR-FILE-01", "CPU 20%, å
å 35%, ç£ç 85%", "åè¦", "ç£ç使ç¨çè¾¾85%ï¼éæ©å®¹")); |
| | | inspections.add(createInspection("2026-05-30", "SVR-APP-01", "CPU 38%, å
å 55%, ç£ç 45%", "æ£å¸¸", "")); |
| | | inspections.add(createInspection("2026-05-30", "SVR-DB-01", "CPU 48%, å
å 70%, ç£ç 58%", "æ£å¸¸", "å
åå·²ä¼å")); |
| | | inspections.add(createInspection("2026-05-30", "SVR-FILE-01", "CPU 18%, å
å 32%, ç£ç 88%", "åè¦", "ç£çæç»å¢é¿ï¼é尽快æ©å®¹")); |
| | | inspections.add(createInspection("2026-05-30", "SVR-AI-01", "CPU 65%, å
å 78%, ç£ç 45%", "å
³æ³¨", "GPU使ç¨çæ£å¸¸ï¼CPUè´è½½åé«")); |
| | | data.put("inspections", inspections); |
| | | |
| | | // æ°æ®åºå¤ä»½è®°å½ |
| | | List<Map<String, String>> backups = new ArrayList<>(); |
| | | backups.add(createBackup("2026-05-20", "å
¨éå¤ä»½", "product_inventory", "5.2GB", "æå", "02:00", "02:15")); |
| | | backups.add(createBackup("2026-05-21", "å¢éå¤ä»½", "product_inventory", "380MB", "æå", "02:00", "02:08")); |
| | | backups.add(createBackup("2026-05-22", "å¢éå¤ä»½", "product_inventory", "420MB", "æå", "02:00", "02:09")); |
| | | backups.add(createBackup("2026-05-23", "å
¨éå¤ä»½", "product_inventory", "5.5GB", "æå", "02:00", "02:20")); |
| | | backups.add(createBackup("2026-05-24", "å¢éå¤ä»½", "product_inventory", "350MB", "æå", "02:00", "02:07")); |
| | | backups.add(createBackup("2026-05-25", "å¢éå¤ä»½", "product_inventory", "400MB", "æå", "02:00", "02:08")); |
| | | backups.add(createBackup("2026-05-26", "å¢éå¤ä»½", "product_inventory", "390MB", "失败", "02:00", "02:03")); |
| | | backups.add(createBackup("2026-05-26", "å¢éå¤ä»½", "product_inventory", "395MB", "æå", "03:00", "03:08")); |
| | | backups.add(createBackup("2026-05-27", "å
¨éå¤ä»½", "product_inventory", "5.8GB", "æå", "02:00", "02:22")); |
| | | backups.add(createBackup("2026-05-28", "å¢éå¤ä»½", "product_inventory", "410MB", "æå", "02:00", "02:09")); |
| | | data.put("backups", backups); |
| | | |
| | | // æ
é/äºä»¶è®°å½ |
| | | List<Map<String, String>> incidents = new ArrayList<>(); |
| | | incidents.add(createIncident("INC-001", "2026-05-22 14:30", "SVR-DB-01", "MySQLè¿æ¥æ°å¼å¸¸åé«", "è¿æ¥æ± æ³æ¼", "è°æ´è¿æ¥æ± åæ°ï¼é坿å¡", "2026-05-22 15:10", "已解å³", "å¨XX")); |
| | | incidents.add(createIncident("INC-002", "2026-05-24 09:15", "SVR-APP-01", "åºç¨ååºè¶
æ¶", "çº¿ç¨æ± èå°½", "æ©å¤§çº¿ç¨æ± ï¼å¢å è¶
æ¶æ¶é´", "2026-05-24 09:50", "已解å³", "å¨XX")); |
| | | incidents.add(createIncident("INC-003", "2026-05-26 02:03", "SVR-DB-01", "æ°æ®åºå¤ä»½å¤±è´¥", "ç£ç空é´ä¸è¶³", "æ¸
ç彿¡£æ¥å¿ï¼éæ¾ç©ºé´", "2026-05-26 03:00", "已解å³", "å¨XX")); |
| | | incidents.add(createIncident("INC-004", "2026-05-28 11:20", "SVR-REDIS-02", "Rediså¨å
µåæ¢å¼å¸¸", "ç½ç»æå¨å¯¼è´è¯¯å¤", "ææ¥ç½ç»ï¼è°æ´å¨å
µè¶
æ¶åæ°", "2026-05-28 11:50", "已解å³", "å¨XX")); |
| | | incidents.add(createIncident("INC-005", "2026-05-30 08:45", "SVR-FILE-01", "ç£ç使ç¨çè¶
85%", "æ¥å¿æä»¶æªè½®è½¬", "å¯ç¨æ¥å¿è½®è½¬ï¼æ¸
çæ§æ¥å¿", "2026-05-30 09:30", "å¤çä¸", "å¨XX")); |
| | | incidents.add(createIncident("INC-006", "2026-05-30 16:00", "SVR-AI-01", "GPU驱å¨å¼å¸¸å¯¼è´æ¨ç失败", "驱å¨çæ¬ä¸å
¼å®¹", "åæ»GPU驱å¨çæ¬", "2026-05-30 17:30", "已解å³", "åXX")); |
| | | data.put("incidents", incidents); |
| | | |
| | | // è¡¥ä¸/æ´æ°è®°å½ |
| | | List<Map<String, String>> patches = new ArrayList<>(); |
| | | patches.add(createPatch("2026-05-20", "SVR-APP-01/02", "JDK 25.0.1 å®å
¨æ´æ°", "å®å
¨è¡¥ä¸", "æå", "")); |
| | | patches.add(createPatch("2026-05-22", "å
¨é¨æå¡å¨", "OpenSSL 3.0.15 å级", "å®å
¨è¡¥ä¸", "æå", "ä¿®å¤é«å±æ¼æ´CVE-2026-XXXX")); |
| | | patches.add(createPatch("2026-05-24", "SVR-NGINX-01", "Nginx 1.26.2 çæ¬å级", "çæ¬å级", "æå", "")); |
| | | patches.add(createPatch("2026-05-26", "SVR-DB-01/02", "MySQL 8.0.38 è¡¥ä¸æ´æ°", "å®å
¨è¡¥ä¸", "æå", "å
å级ä»åºï¼éªè¯å忢å级主åº")); |
| | | patches.add(createPatch("2026-05-28", "SVR-AI-01", "CUDA Toolkit 12.6 æ´æ°", "çæ¬å级", "æå", "")); |
| | | patches.add(createPatch("2026-05-30", "å
¨é¨æå¡å¨", "ç³»ç»å
æ ¸å®å
¨æ´æ°", "å®å
¨è¡¥ä¸", "è¿è¡ä¸", "ééå°éå¯ï¼æ£å¨åæ¹æ§è¡")); |
| | | data.put("patches", patches); |
| | | |
| | | // åæ´è®°å½ |
| | | List<Map<String, String>> changes = new ArrayList<>(); |
| | | changes.add(createChange("CHG-001", "2026-05-22", "æ°æ®åºè¿æ¥æ± åæ°è°æ´", "SVR-DB-01", "è¿æ¥æ°50å°100", "å¨XX", "已宿", "")); |
| | | changes.add(createChange("CHG-002", "2026-05-23", "Nginxæ°å¢è´è½½åè¡¡è§å", "SVR-NGINX-01", "å¢å A/Bæµè¯è·¯ç±", "å¨XX", "已宿", "")); |
| | | changes.add(createChange("CHG-003", "2026-05-25", "Rediså
åçç¥è°æ´", "SVR-REDIS-01/02/03", "maxmemoryä»4Gè°æ´ä¸º6G", "å¨XX", "已宿", "")); |
| | | changes.add(createChange("CHG-004", "2026-05-27", "æ°æ®åºå¤ä»½çç¥è°æ´", "SVR-DB-01", "仿¯æ¥å
¨éæ¹ä¸ºå¨ä¸å
å
¨é+æ¥å¢é", "å¨XX", "已宿", "")); |
| | | changes.add(createChange("CHG-005", "2026-05-29", "åºç¨JVMåæ°ä¼å", "SVR-APP-01/02", "å å
å8Gå°12Gï¼GCçç¥è°æ´", "çXX", "已宿", "")); |
| | | data.put("changes", changes); |
| | | |
| | | // å¾
åäºé¡¹ |
| | | List<Map<String, String>> actionItems = new ArrayList<>(); |
| | | actionItems.add(createActionItem("1", "SVR-FILE-01ç£çæ©å®¹è³4TB", "å¨XX", "2026-06-05")); |
| | | actionItems.add(createActionItem("2", "宿ELKæ¥å¿å¹³å°Kibana仪表çé
ç½®", "å¨XX", "2026-06-03")); |
| | | actionItems.add(createActionItem("3", "å®åPrometheusåè¦è§å", "å¨XX", "2026-06-04")); |
| | | actionItems.add(createActionItem("4", "宿å
¨é¨æå¡å¨å
æ ¸å®å
¨æ´æ°", "å¨XX", "2026-06-02")); |
| | | actionItems.add(createActionItem("5", "ç¼åè¿ç»´æåååºæ¥é¢æ¡", "å¨XX", "2026-06-10")); |
| | | actionItems.add(createActionItem("6", "é
ç½®å¼å°å¤ä»½åæ¥ä»»å¡", "å¨XX", "2026-06-08")); |
| | | data.put("actionItems", actionItems); |
| | | |
| | | // è¿ç»´ç»è®¡ |
| | | data.put("serverCount", "10"); |
| | | data.put("runningCount", "8"); |
| | | data.put("alertCount", "2"); |
| | | data.put("uptimeRate", "99.95%"); |
| | | data.put("totalInspections", "12"); |
| | | data.put("totalBackups", "10"); |
| | | data.put("backupSuccessRate", "90%"); |
| | | data.put("totalIncidents", "6"); |
| | | data.put("solvedIncidents", "5"); |
| | | data.put("totalPatches", "6"); |
| | | data.put("completedPatches", "5"); |
| | | |
| | | // è¿ç»´ç»è®º |
| | | data.put("opsConclusion", "æ´ä½è¿ç»´ç¶åµè¯å¥½ï¼æå¡å¨å¯ç¨çè¾¾å°99.95%ãSVR-FILE-01ç£çåè¦é尽快å¤çï¼å·²å®ææ¥å¿è½®è½¬ç¼è§£ååï¼ä»éæ©å®¹ãå¤ä»½çç¥å·²ä¼åï¼26æ¥å¤ä»½å¤±è´¥å·²å¤çãå®å
¨è¡¥ä¸åæ¹æ§è¡ä¸ï¼é¢è®¡6æ2æ¥åå
¨é¨å®æã"); |
| | | data.put("riskWarning", "ç£çåè¦ï¼SVR-FILE-01ï¼ãå
ååé«ï¼SVR-DB-01ï¼ãå
æ ¸è¡¥ä¸å¾
宿ï¼3å°ï¼"); |
| | | |
| | | Template template = cfg.getTemplate("æå¡å¨è¿ç»´è®°å½.xml"); |
| | | StringWriter out = new StringWriter(); |
| | | template.process(data, out); |
| | | |
| | | String outputPath = "D:/ç马/ææ¡£/æå¡å¨è¿ç»´è®°å½.docx"; |
| | | File outputFile = new File(outputPath); |
| | | outputFile.getParentFile().mkdirs(); |
| | | try (FileOutputStream fos = new FileOutputStream(outputFile); |
| | | OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { |
| | | osw.write(out.toString()); |
| | | } |
| | | |
| | | System.out.println("æå¡å¨è¿ç»´è®°å½çææå: " + outputPath); |
| | | } |
| | | |
| | | private static Map<String, String> createServer(String id, String type, String ip, String cpu, |
| | | String memory, String disk, String os, String status) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("id", id); |
| | | map.put("type", type); |
| | | map.put("ip", ip); |
| | | map.put("cpu", cpu); |
| | | map.put("memory", memory); |
| | | map.put("disk", disk); |
| | | map.put("os", os); |
| | | map.put("status", status); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createProgress(String date, String task, String content, String rate, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("task", task); |
| | | map.put("content", content); |
| | | map.put("rate", rate); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createInspection(String date, String server, String metrics, String result, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("server", server); |
| | | map.put("metrics", metrics); |
| | | map.put("result", result); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createBackup(String date, String type, String database, String size, |
| | | String status, String startTime, String endTime) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("type", type); |
| | | map.put("database", database); |
| | | map.put("size", size); |
| | | map.put("status", status); |
| | | map.put("startTime", startTime); |
| | | map.put("endTime", endTime); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createIncident(String no, String time, String server, String desc, |
| | | String cause, String solution, String resolveTime, |
| | | String status, String handler) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("time", time); |
| | | map.put("server", server); |
| | | map.put("desc", desc); |
| | | map.put("cause", cause); |
| | | map.put("solution", solution); |
| | | map.put("resolveTime", resolveTime); |
| | | map.put("status", status); |
| | | map.put("handler", handler); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createPatch(String date, String server, String content, String type, String result, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("server", server); |
| | | map.put("content", content); |
| | | map.put("type", type); |
| | | map.put("result", result); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createChange(String no, String date, String content, String server, |
| | | String detail, String executor, String status, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("date", date); |
| | | map.put("content", content); |
| | | map.put("server", server); |
| | | map.put("detail", detail); |
| | | map.put("executor", executor); |
| | | map.put("status", status); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("content", content); |
| | | map.put("owner", owner); |
| | | map.put("deadline", deadline); |
| | | return map; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.util; |
| | | |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.TemplateExceptionHandler; |
| | | |
| | | import java.io.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | public class SystemDesignDocGenerator { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | generateSystemDesignDoc(); |
| | | } |
| | | |
| | | public static void generateSystemDesignDoc() throws Exception { |
| | | Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); |
| | | cfg.setClassForTemplateLoading(SystemDesignDocGenerator.class, "/static"); |
| | | cfg.setDefaultEncoding("UTF-8"); |
| | | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); |
| | | |
| | | Map<String, Object> data = new HashMap<>(); |
| | | |
| | | // 项ç®åºæ¬ä¿¡æ¯ |
| | | data.put("projectName", "产ååºå管çç³»ç»"); |
| | | data.put("projectVersion", "V1.0"); |
| | | data.put("docDate", "2026å¹´6æ"); |
| | | |
| | | // åç«¯ææ¯æ |
| | | List<Map<String, String>> backendTech = new ArrayList<>(); |
| | | backendTech.add(createTech("æ ¸å¿æ¡æ¶", "Spring Boot 3.5", "æä¾ä¾èµæ³¨å
¥ãAOPãé
置管ççåè½")); |
| | | backendTech.add(createTech("ORMæ¡æ¶", "MyBatis-Plus 3.5", "æ°æ®åºè®¿é®ï¼æ¯æèªå¨ä»£ç çæ")); |
| | | backendTech.add(createTech("å®å
¨æ¡æ¶", "Spring Security", "è®¤è¯ææãæéæ§å¶")); |
| | | backendTech.add(createTech("ç¼å", "Redis 7.0", "ç¼åçç¹æ°æ®ï¼æåæ§è½")); |
| | | backendTech.add(createTech("æ°æ®åº", "MySQL 8.0", "åå¨ä¸å¡æ°æ®")); |
| | | backendTech.add(createTech("ä»»å¡è°åº¦", "Quartz", "宿¶ä»»å¡è°åº¦ç®¡ç")); |
| | | backendTech.add(createTech("æ¥å¿", "Logback", "æ¥å¿è®°å½ä¸ç®¡ç")); |
| | | backendTech.add(createTech("APIææ¡£", "Knife4j", "æ¥å£ææ¡£çæä¸æµè¯")); |
| | | data.put("backendTech", backendTech); |
| | | |
| | | // åç«¯ææ¯æ |
| | | List<Map<String, String>> frontendTech = new ArrayList<>(); |
| | | frontendTech.add(createTech("æ ¸å¿æ¡æ¶", "Vue 3", "æ¸è¿å¼JavaScriptæ¡æ¶")); |
| | | frontendTech.add(createTech("UIç»ä»¶", "Element Plus", "ä¼ä¸çº§UIç»ä»¶åº")); |
| | | frontendTech.add(createTech("ç¶æç®¡ç", "Pinia", "Vue宿¹ç¶æç®¡çåº")); |
| | | frontendTech.add(createTech("è·¯ç±", "Vue Router", "å页é¢åºç¨è·¯ç±ç®¡ç")); |
| | | frontendTech.add(createTech("HTTP客æ·ç«¯", "Axios", "HTTP请æ±åº")); |
| | | frontendTech.add(createTech("æå»ºå·¥å
·", "Vite", "ä¸ä¸ä»£å端æå»ºå·¥å
·")); |
| | | data.put("frontendTech", frontendTech); |
| | | |
| | | // AIææ¯æ |
| | | List<Map<String, String>> aiTech = new ArrayList<>(); |
| | | aiTech.add(createTech("大è¯è¨æ¨¡å", "Claude API / OpenAI API", "æºè½å®¢æãææ¡£çæ")); |
| | | aiTech.add(createTech("æºå¨å¦ä¹ ", "TensorFlow / PyTorch", "颿µæ¨¡åè®ç»ä¸æ¨ç")); |
| | | aiTech.add(createTech("OCRè¯å«", "ç¾åº¦OCR / Tesseract", "ææ¡£å¾çè¯å«")); |
| | | aiTech.add(createTech("è¯é³è¯å«", "ç¾åº¦è¯é³ / 讯é£", "è¯é³è½¬æå")); |
| | | aiTech.add(createTech("模åé¨ç½²", "FastAPI + Docker", "模åæå¡åé¨ç½²")); |
| | | data.put("aiTech", aiTech); |
| | | |
| | | // ç³»ç»æ¨¡å |
| | | List<Map<String, String>> modules = new ArrayList<>(); |
| | | modules.add(createModule("MOD-001", "åºå管ç", "å
¥åºãåºåºãçç¹ãé¢è¦ãåºåæ¥è¯¢")); |
| | | modules.add(createModule("MOD-002", "éè´ç®¡ç", "éè´ç³è¯·ã订å管çãä¾åºå管ç")); |
| | | modules.add(createModule("MOD-003", "éå®ç®¡ç", "æ¥ä»·ã订åãåè´§ãå®å")); |
| | | modules.add(createModule("MOD-004", "è´¨é管ç", "è´¨éæ£éªãä¸åæ ¼å¤çãæ£æµæ¥å")); |
| | | modules.add(createModule("MOD-005", "设å¤ç®¡ç", "设å¤å°è´¦ãä¿å
»è®¡åãä¿å
»æ§è¡")); |
| | | modules.add(createModule("MOD-006", "人äºç®¡ç", "å工档æ¡ãèå¤ãå®¡æ¹æµç¨")); |
| | | modules.add(createModule("MOD-007", "ç³»ç»ç®¡ç", "ç¨æ·ãè§è²ãæéãæ¥å¿")); |
| | | modules.add(createModule("MOD-008", "AIæå¡", "æºè½å®¢æã颿µåæãææ¡£è¯å«")); |
| | | data.put("modules", modules); |
| | | |
| | | // æå¡å¨é
ç½® |
| | | List<Map<String, String>> servers = new ArrayList<>(); |
| | | servers.add(createServer("åºç¨æå¡å¨1", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("åºç¨æå¡å¨2", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("æ°æ®åºä¸»åº", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("æ°æ®åºä»åº", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("Redisèç¹1", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("Redisèç¹2", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("Redisèç¹3", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9")); |
| | | servers.add(createServer("æä»¶æå¡å¨", "4æ ¸", "8GB", "2TB HDD", "CentOS 7.9")); |
| | | servers.add(createServer("AIæ¨çæå¡å¨", "16æ ¸", "64GB", "1TB SSD", "Ubuntu 22.04")); |
| | | data.put("servers", servers); |
| | | |
| | | // æ°æ®åºè¡¨ |
| | | List<Map<String, String>> tables = new ArrayList<>(); |
| | | tables.add(createTable("stock_inventory", "åºå表ï¼åå¨åºåæ°éãæ¹å·çä¿¡æ¯")); |
| | | tables.add(createTable("stock_in_record", "å
¥åºè®°å½è¡¨ï¼è®°å½å
¥åºæç»")); |
| | | tables.add(createTable("stock_out_record", "åºåºè®°å½è¡¨ï¼è®°å½åºåºæç»")); |
| | | tables.add(createTable("purchase_order", "éè´è®¢å表")); |
| | | tables.add(createTable("sales_order", "éå®è®¢å表")); |
| | | tables.add(createTable("quality_inspect", "è´¨æ£è®°å½è¡¨")); |
| | | tables.add(createTable("device_info", "设å¤ä¿¡æ¯è¡¨")); |
| | | tables.add(createTable("device_maintenance", "设å¤ä¿å
»è®°å½è¡¨")); |
| | | tables.add(createTable("staff_on_job", "å工信æ¯è¡¨")); |
| | | tables.add(createTable("sys_user", "ç³»ç»ç¨æ·è¡¨")); |
| | | tables.add(createTable("sys_role", "è§è²è¡¨")); |
| | | tables.add(createTable("sys_menu", "èåæé表")); |
| | | data.put("tables", tables); |
| | | |
| | | // APIæ¥å£ |
| | | List<Map<String, String>> apis = new ArrayList<>(); |
| | | apis.add(createApi("1", "POST", "/api/auth/login", "ç¨æ·ç»å½")); |
| | | apis.add(createApi("2", "GET", "/api/stock/list", "åºåå表æ¥è¯¢")); |
| | | apis.add(createApi("3", "POST", "/api/stock/in", "å
¥åºæä½")); |
| | | apis.add(createApi("4", "POST", "/api/stock/out", "åºåºæä½")); |
| | | apis.add(createApi("5", "GET", "/api/purchase/list", "éè´è®¢åå表")); |
| | | apis.add(createApi("6", "POST", "/api/purchase/create", "å建éè´è®¢å")); |
| | | apis.add(createApi("7", "GET", "/api/sales/list", "éå®è®¢åå表")); |
| | | apis.add(createApi("8", "POST", "/api/quality/inspect", "æäº¤è´¨æ£è®°å½")); |
| | | apis.add(createApi("9", "GET", "/api/device/list", "设å¤å表æ¥è¯¢")); |
| | | apis.add(createApi("10", "POST", "/api/ai/chat", "AIæºè½é®ç")); |
| | | apis.add(createApi("11", "POST", "/api/ai/predict", "åºå颿µæ¥å£")); |
| | | apis.add(createApi("12", "POST", "/api/ai/ocr", "OCRææ¡£è¯å«")); |
| | | data.put("apis", apis); |
| | | |
| | | // è¯å®¡é¡¹ |
| | | List<Map<String, String>> reviewItems = new ArrayList<>(); |
| | | reviewItems.add(createReviewItem("ç³»ç»æ¶æ", "éè¿", "æ¶ææ¸
æ°ï¼å±æ¬¡åæï¼æ»¡è¶³ä¸å¡éæ±")); |
| | | reviewItems.add(createReviewItem("æ°æ®åºè®¾è®¡", "éè¿", "è¡¨ç»æåçï¼ç´¢å¼è®¾è®¡å®å")); |
| | | reviewItems.add(createReviewItem("æ¥å£è®¾è®¡", "éè¿", "RESTfulè§èï¼æ¥å£ææ¡£å®æ´")); |
| | | reviewItems.add(createReviewItem("æå¡å¨é
ç½®", "éè¿", "é
置满足æ§è½è¦æ±")); |
| | | reviewItems.add(createReviewItem("AIææ¯æ¹æ¡", "éè¿", "ææ¯éååçï¼å¯è¡æ§é«")); |
| | | reviewItems.add(createReviewItem("å®å
¨è®¾è®¡", "éè¿", "å®å
¨æªæ½å®å")); |
| | | data.put("reviewItems", reviewItems); |
| | | |
| | | // å¾
åäºé¡¹ |
| | | List<Map<String, String>> actionItems = new ArrayList<>(); |
| | | actionItems.add(createActionItem("1", "å®åæ°æ®åºERå¾è®¾è®¡", "çXX", "XæXæ¥")); |
| | | actionItems.add(createActionItem("2", "è¡¥å
APIæ¥å£è¯¦ç»åæ°è¯´æ", "èµµXX", "XæXæ¥")); |
| | | actionItems.add(createActionItem("3", "确认AIæå¡å¨GPUé
ç½®", "åXX", "XæXæ¥")); |
| | | actionItems.add(createActionItem("4", "ç¼åé¨ç½²ææ¡£", "å¨XX", "XæXæ¥")); |
| | | data.put("actionItems", actionItems); |
| | | |
| | | // å 载模æ¿å¹¶çæ |
| | | Template template = cfg.getTemplate("ç³»ç»è®¾è®¡è¯´æä¹¦.xml"); |
| | | StringWriter out = new StringWriter(); |
| | | template.process(data, out); |
| | | |
| | | // ä¿å为docx |
| | | String outputPath = "D:/ç马/ææ¡£/ç³»ç»è®¾è®¡è¯´æä¹¦.docx"; |
| | | File outputFile = new File(outputPath); |
| | | outputFile.getParentFile().mkdirs(); |
| | | try (FileOutputStream fos = new FileOutputStream(outputFile); |
| | | OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { |
| | | osw.write(out.toString()); |
| | | } |
| | | |
| | | System.out.println("ç³»ç»è®¾è®¡è¯´æä¹¦çææå: " + outputPath); |
| | | } |
| | | |
| | | private static Map<String, String> createTech(String category, String component, String desc) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("category", category); |
| | | map.put("component", component); |
| | | map.put("desc", desc); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createModule(String id, String name, String desc) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("id", id); |
| | | map.put("name", name); |
| | | map.put("desc", desc); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createServer(String name, String cpu, String memory, String disk, String os) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("name", name); |
| | | map.put("cpu", cpu); |
| | | map.put("memory", memory); |
| | | map.put("disk", disk); |
| | | map.put("os", os); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createTable(String name, String desc) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("name", name); |
| | | map.put("desc", desc); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createApi(String no, String method, String path, String desc) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("method", method); |
| | | map.put("path", path); |
| | | map.put("desc", desc); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createReviewItem(String item, String result, String opinion) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("item", item); |
| | | map.put("result", result); |
| | | map.put("opinion", opinion); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("content", content); |
| | | map.put("owner", owner); |
| | | map.put("deadline", deadline); |
| | | return map; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.util; |
| | | |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.TemplateExceptionHandler; |
| | | |
| | | import java.io.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | public class TechDevDocGenerator { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | generateTechDevDoc(); |
| | | } |
| | | |
| | | public static void generateTechDevDoc() throws Exception { |
| | | Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); |
| | | cfg.setClassForTemplateLoading(TechDevDocGenerator.class, "/static"); |
| | | cfg.setDefaultEncoding("UTF-8"); |
| | | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); |
| | | |
| | | Map<String, Object> data = new HashMap<>(); |
| | | |
| | | // 项ç®åºæ¬ä¿¡æ¯ |
| | | data.put("projectName", "产ååºå管çç³»ç»"); |
| | | data.put("projectVersion", "V1.0"); |
| | | data.put("docDate", "2026å¹´6æ"); |
| | | |
| | | // Gitblitä»åºå°å |
| | | List<Map<String, String>> repositories = new ArrayList<>(); |
| | | repositories.add(createRepo("å端ä»åº", "http://114.132.189.42:9002/r/product-inventory-management-after.git")); |
| | | repositories.add(createRepo("å端ä»åº", "http://114.132.189.42:9002/r/product-inventory-ui.git")); |
| | | repositories.add(createRepo("ææ¡£ä»åº", "http://114.132.189.42:9002/r/product-inventory-docs.git")); |
| | | repositories.add(createRepo("æ°æ®åºèæ¬", "http://114.132.189.42:9002/r/product-inventory-db.git")); |
| | | data.put("repositories", repositories); |
| | | |
| | | // Gitç¨æ·æéåé
|
| | | List<Map<String, String>> gitUsers = new ArrayList<>(); |
| | | gitUsers.add(createGitUser("zhangxx", "å¼ XX", "项ç®ç®¡çå", "RW+ï¼ææä»åºï¼")); |
| | | gitUsers.add(createGitUser("wangxx", "çXX", "å端å¼å", "RWï¼åç«¯ãæ°æ®åºï¼")); |
| | | gitUsers.add(createGitUser("zhaoxx", "èµµXX", "å端å¼å", "RWï¼åç«¯ãæ°æ®åºï¼")); |
| | | gitUsers.add(createGitUser("chenxx", "éXX", "å端å¼å", "RWï¼å端ä»åºï¼")); |
| | | gitUsers.add(createGitUser("sunxx", "åXX", "AIå·¥ç¨å¸", "RWï¼å端ãAI模åï¼")); |
| | | gitUsers.add(createGitUser("liuxx", "åXX", "æµè¯å·¥ç¨å¸", "Rï¼ææä»åºï¼")); |
| | | gitUsers.add(createGitUser("zhouxx", "å¨XX", "è¿ç»´å·¥ç¨å¸", "RWï¼ææ¡£ãé¨ç½²èæ¬ï¼")); |
| | | data.put("gitUsers", gitUsers); |
| | | |
| | | // æµè¯ç¨ä¾ |
| | | List<Map<String, String>> testCases = new ArrayList<>(); |
| | | testCases.add(createTestCase("TC-001", "ç»å½æ¨¡å", "ç¨æ·åå¯ç æ£ç¡®ç»å½", "ç»å½æå", "ç»å½æå", "éè¿")); |
| | | testCases.add(createTestCase("TC-002", "ç»å½æ¨¡å", "ç¨æ·åé误ç»å½", "æç¤ºç¨æ·ä¸åå¨", "æç¤ºæ£ç¡®", "éè¿")); |
| | | testCases.add(createTestCase("TC-003", "åºå管ç", "å
¥åºæä½-æ£å¸¸æ°æ®", "å
¥åºæå", "å
¥åºæå", "éè¿")); |
| | | testCases.add(createTestCase("TC-004", "åºå管ç", "åºåºæä½-åºåä¸è¶³", "æç¤ºåºåä¸è¶³", "æç¤ºæ£ç¡®", "éè¿")); |
| | | testCases.add(createTestCase("TC-005", "éè´ç®¡ç", "å建éè´è®¢å", "å建æå", "å建æå", "éè¿")); |
| | | testCases.add(createTestCase("TC-006", "éå®ç®¡ç", "å建éå®è®¢å", "å建æå", "å建æå", "éè¿")); |
| | | testCases.add(createTestCase("TC-007", "è´¨æ£ç®¡ç", "æäº¤è´¨æ£è®°å½", "æäº¤æå", "æäº¤æå", "éè¿")); |
| | | testCases.add(createTestCase("TC-008", "设å¤ç®¡ç", "å建ä¿å
»è®¡å", "å建æå", "å建æå", "è¿è¡ä¸")); |
| | | testCases.add(createTestCase("TC-009", "AI模å", "æºè½é®çåè½", "è¿åæ£ç¡®çæ¡", "è¿åæ£ç¡®", "è¿è¡ä¸")); |
| | | testCases.add(createTestCase("TC-010", "ç³»ç»ç®¡ç", "ç¨æ·æéé
ç½®", "æéçæ", "æéçæ", "éè¿")); |
| | | data.put("testCases", testCases); |
| | | |
| | | // 代ç Reviewè®°å½ |
| | | List<Map<String, String>> reviewRecords = new ArrayList<>(); |
| | | reviewRecords.add(createReviewRecord("2026-05-20", "çXX", "å¼ XX", "åºå模åå
¥åºåè½", "éè¿", "代ç è§èï¼é»è¾æ¸
æ°")); |
| | | reviewRecords.add(createReviewRecord("2026-05-21", "èµµXX", "çXX", "éè´è®¢åå®¡æ¹æµç¨", "éè¿", "éè¡¥å
å¼å¸¸å¤ç")); |
| | | reviewRecords.add(createReviewRecord("2026-05-22", "éXX", "å¼ XX", "å端ç»å½é¡µé¢ä¼å", "éè¿", "UI符å设计稿")); |
| | | reviewRecords.add(createReviewRecord("2026-05-23", "çXX", "èµµXX", "åºåé¢è¦å®æ¶ä»»å¡", "éè¿", "æ§è½éä¼å")); |
| | | reviewRecords.add(createReviewRecord("2026-05-24", "åXX", "çXX", "AIæºè½å®¢ææ¥å£", "éè¿", "éå¢å é误éè¯æºå¶")); |
| | | reviewRecords.add(createReviewRecord("2026-05-25", "èµµXX", "çXX", "设å¤ä¿å
»éªæ¶åè½", "è¿è¡ä¸", "")); |
| | | data.put("reviewRecords", reviewRecords); |
| | | |
| | | // 常è§é®é¢ |
| | | List<Map<String, String>> commonIssues = new ArrayList<>(); |
| | | commonIssues.add(createCommonIssue("1", "代ç è§è", "åéå½åä¸è§èï¼ééµå¾ªé©¼å³°å½åæ³")); |
| | | commonIssues.add(createCommonIssue("2", "代ç è§è", "缺å°å¿
è¦ç注é说æ")); |
| | | commonIssues.add(createCommonIssue("3", "å®å
¨é®é¢", "SQLè¯å¥æªä½¿ç¨åæ°åæ¥è¯¢ï¼å卿³¨å
¥é£é©")); |
| | | commonIssues.add(createCommonIssue("4", "æ§è½é®é¢", "循ç¯ä¸æ§è¡æ°æ®åºæ¥è¯¢ï¼éä¼å")); |
| | | commonIssues.add(createCommonIssue("5", "å¼å¸¸å¤ç", "å¼å¸¸æè·åæªåå¤çï¼éæ·»å æ¥å¿ææåº")); |
| | | commonIssues.add(createCommonIssue("6", "å®å
¨é®é¢", "ææä¿¡æ¯æææå°å°æ¥å¿ï¼éè±æ")); |
| | | data.put("commonIssues", commonIssues); |
| | | |
| | | // è¿ä»£è®¡å |
| | | List<Map<String, String>> iterations = new ArrayList<>(); |
| | | iterations.add(createIteration("v1.0.0", "åºç¡æ¡æ¶æå»ºãç¨æ·æé模å", "第1-4å¨", "çXX", "已宿")); |
| | | iterations.add(createIteration("v1.1.0", "åºåç®¡çæ¨¡å", "第5-8å¨", "çXX", "已宿")); |
| | | iterations.add(createIteration("v1.2.0", "éè´é宿¨¡å", "第9-12å¨", "èµµXX", "已宿")); |
| | | iterations.add(createIteration("v1.3.0", "è´¨æ£è®¾å¤æ¨¡å", "第13-16å¨", "çXX", "è¿è¡ä¸")); |
| | | iterations.add(createIteration("v1.4.0", "人äºå忍¡å", "第17-20å¨", "èµµXX", "å¾
å¼å§")); |
| | | iterations.add(createIteration("v1.5.0", "AIæºè½ååè½", "第21-24å¨", "åXX", "å¾
å¼å§")); |
| | | data.put("iterations", iterations); |
| | | |
| | | // æ¯æ¥è¿åº¦ |
| | | List<Map<String, String>> dailyProgress = new ArrayList<>(); |
| | | dailyProgress.add(createDailyProgress("2026-05-20", "çXX", "宿å
¥åºæ¨¡åå¼å", "100%", "")); |
| | | dailyProgress.add(createDailyProgress("2026-05-20", "èµµXX", "éè´è®¢åå®¡æ¹æµç¨å¼å", "80%", "å¾
èè°")); |
| | | dailyProgress.add(createDailyProgress("2026-05-20", "éXX", "å端åºå页é¢ä¼å", "100%", "")); |
| | | dailyProgress.add(createDailyProgress("2026-05-21", "çXX", "åºåé¢è¦å®æ¶ä»»å¡å¼å", "90%", "å¾
æµè¯")); |
| | | dailyProgress.add(createDailyProgress("2026-05-21", "èµµXX", "éè´è®¢åå®¡æ¹æµç¨èè°", "100%", "")); |
| | | dailyProgress.add(createDailyProgress("2026-05-21", "åXX", "AIæ¥å£è°ç 䏿æ¯éå", "70%", "é确认")); |
| | | dailyProgress.add(createDailyProgress("2026-05-22", "çXX", "设å¤ä¿å
»æ¨¡åå¼å", "60%", "è¿è¡ä¸")); |
| | | dailyProgress.add(createDailyProgress("2026-05-22", "èµµXX", "è´¨æ£è®°å½åè½å¼å", "50%", "è¿è¡ä¸")); |
| | | data.put("dailyProgress", dailyProgress); |
| | | |
| | | // é®é¢è·è¸ª |
| | | List<Map<String, String>> issues = new ArrayList<>(); |
| | | issues.add(createIssue("ISS-001", "åºåæ¥è¯¢ååºæ
¢", "åXX", "çXX", "é«", "已解å³")); |
| | | issues.add(createIssue("ISS-002", "å
¥åºæ¹å·æ ¡éªé»è¾é误", "åXX", "çXX", "é«", "已解å³")); |
| | | issues.add(createIssue("ISS-003", "éè´è®¢åéé¢è®¡ç®ç²¾åº¦é®é¢", "åXX", "èµµXX", "ä¸", "已解å³")); |
| | | issues.add(createIssue("ISS-004", "å端å页ç»ä»¶æ ·å¼å¼å¸¸", "åXX", "éXX", "ä½", "è¿è¡ä¸")); |
| | | issues.add(createIssue("ISS-005", "AIæ¥å£è¶
æ¶é®é¢", "åXX", "åXX", "é«", "è¿è¡ä¸")); |
| | | issues.add(createIssue("ISS-006", "设å¤ä¿å
»æéæªè§¦å", "åXX", "çXX", "ä¸", "å¾
å¤ç")); |
| | | data.put("issues", issues); |
| | | |
| | | // å 载模æ¿å¹¶çæ |
| | | Template template = cfg.getTemplate("ææ¯è½¯ä»¶å¼åææ¡£.xml"); |
| | | StringWriter out = new StringWriter(); |
| | | template.process(data, out); |
| | | |
| | | // ä¿å为docx |
| | | String outputPath = "D:/ç马/ææ¡£/ææ¯è½¯ä»¶å¼åææ¡£.docx"; |
| | | File outputFile = new File(outputPath); |
| | | outputFile.getParentFile().mkdirs(); |
| | | try (FileOutputStream fos = new FileOutputStream(outputFile); |
| | | OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { |
| | | osw.write(out.toString()); |
| | | } |
| | | |
| | | System.out.println("ææ¯è½¯ä»¶å¼åææ¡£çææå: " + outputPath); |
| | | } |
| | | |
| | | private static Map<String, String> createRepo(String name, String url) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("name", name); |
| | | map.put("url", url); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createGitUser(String username, String realname, String role, String permission) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("username", username); |
| | | map.put("realname", realname); |
| | | map.put("role", role); |
| | | map.put("permission", permission); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createTestCase(String no, String module, String content, String expected, String actual, String status) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("module", module); |
| | | map.put("content", content); |
| | | map.put("expected", expected); |
| | | map.put("actual", actual); |
| | | map.put("status", status); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createReviewRecord(String date, String submitter, String reviewer, String content, String result, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("submitter", submitter); |
| | | map.put("reviewer", reviewer); |
| | | map.put("content", content); |
| | | map.put("result", result); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createCommonIssue(String no, String type, String desc) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("type", type); |
| | | map.put("desc", desc); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createIteration(String version, String scope, String time, String owner, String status) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("version", version); |
| | | map.put("scope", scope); |
| | | map.put("time", time); |
| | | map.put("owner", owner); |
| | | map.put("status", status); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createDailyProgress(String date, String person, String content, String progress, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("person", person); |
| | | map.put("content", content); |
| | | map.put("progress", progress); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createIssue(String no, String desc, String finder, String owner, String priority, String status) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("desc", desc); |
| | | map.put("finder", finder); |
| | | map.put("owner", owner); |
| | | map.put("priority", priority); |
| | | map.put("status", status); |
| | | return map; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.util; |
| | | |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.TemplateExceptionHandler; |
| | | |
| | | import java.io.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | public class TestReportDocGenerator { |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | generateTestReportDoc(); |
| | | } |
| | | |
| | | public static void generateTestReportDoc() throws Exception { |
| | | Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); |
| | | cfg.setClassForTemplateLoading(TestReportDocGenerator.class, "/static"); |
| | | cfg.setDefaultEncoding("UTF-8"); |
| | | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); |
| | | |
| | | Map<String, Object> data = new HashMap<>(); |
| | | |
| | | // 项ç®åºæ¬ä¿¡æ¯ |
| | | data.put("projectName", "产ååºå管çç³»ç»"); |
| | | data.put("projectVersion", "V1.0"); |
| | | data.put("docDate", "2026å¹´6æ"); |
| | | |
| | | // æµè¯è®¡åæ¦è¿° |
| | | data.put("testScope", "è¦çåºå管çãéè´éå®ãè´¨æ£è®¾å¤ã人äºååãAIæºè½åçå
¨é¨åè½æ¨¡å"); |
| | | data.put("testMethodology", "é»çæµè¯ + ç½çæµè¯ + èªå¨åæµè¯ + æ§è½æµè¯"); |
| | | data.put("testCycle", "2026å¹´5æ20æ¥ - 2026å¹´6æ30æ¥"); |
| | | data.put("testEnv", "æµè¯ç¯å¢ï¼Windows Server 2022 / JDK 25 / MySQL 8.0 / Redis 7.0"); |
| | | |
| | | // æµè¯ç¨ä¾ |
| | | List<Map<String, String>> testCases = new ArrayList<>(); |
| | | testCases.add(createTestCase("TC-001", "ç»å½æ¨¡å", "ç¨æ·åå¯ç æ£ç¡®ç»å½", "ç»å½æå跳转主页", "ç»å½æå", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-002", "ç»å½æ¨¡å", "ç¨æ·åé误ç»å½", "æç¤ºç¨æ·ä¸åå¨", "æç¤ºæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-003", "ç»å½æ¨¡å", "å¯ç é误è¿ç»5次", "è´¦å·éå®30åé", "é宿å", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-004", "ç»å½æ¨¡å", "ç©ºç¨æ·åç»å½", "æç¤ºç¨æ·å为空", "æç¤ºæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-005", "åºå管ç", "éè´å
¥åº-æ£å¸¸æ°æ®", "å
¥åºæåï¼åºåå¢å ", "å
¥åºæå", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-006", "åºå管ç", "éè´å
¥åº-缺å°å¿
填项", "æç¤ºå¿
å¡«åæ®µ", "æç¤ºæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-007", "åºå管ç", "éå®åºåº-æ£å¸¸æ°æ®", "åºåºæåï¼åºååå°", "åºåºæå", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-008", "åºå管ç", "éå®åºåº-åºåä¸è¶³", "æç¤ºåºåä¸è¶³", "æç¤ºæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-009", "åºå管ç", "åºåçç¹-差弿¥å", "çæå·®å¼æ¥å", "æ¥åæ£ç¡®", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-010", "åºå管ç", "åºåé¢è¦-ä¸é触å", "èªå¨çæé¢è¦éç¥", "éç¥å·²åé", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-011", "éè´ç®¡ç", "å建éè´è®¢å", "订åå建æå", "å建æå", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-012", "éè´ç®¡ç", "éè´å®¡æ¹æµç¨", "é级审æ¹éè¿", "å®¡æ¹æ£å¸¸", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-013", "éè´ç®¡ç", "ä¾åºåä¿¡æ¯ç»´æ¤", "ä¿¡æ¯æ´æ°æå", "æ´æ°æå", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-014", "éå®ç®¡ç", "å建éå®è®¢å", "订åå建æå", "å建æå", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-015", "éå®ç®¡ç", "é宿¥ä»·åçæ", "æ¥ä»·åçæPDF", "çææå", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-016", "è´¨æ£ç®¡ç", "æ¥ææ£éª-åæ ¼å", "æ£éªéè¿å
¥åº", "æ£éªæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-017", "è´¨æ£ç®¡ç", "ä¸åæ ¼åå¤çæµç¨", "触åä¸åæ ¼å¤çæµç¨", "æµç¨æ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-018", "设å¤ç®¡ç", "设å¤å°è´¦å½å
¥", "设å¤ä¿¡æ¯ä¿åæå", "ä¿åæå", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-019", "设å¤ç®¡ç", "ä¿å
»è®¡åå建", "计åå建æå", "å建æå", "éè¿", "çXX")); |
| | | testCases.add(createTestCase("TC-020", "设å¤ç®¡ç", "ä¿å
»éªæ¶ç¡®è®¤", "éªæ¶éè¿è®°å½å½æ¡£", "éªæ¶æå", "è¿è¡ä¸", "çXX")); |
| | | testCases.add(createTestCase("TC-021", "人äºç®¡ç", "åå·¥å
¥èç»è®°", "å工信æ¯å
¥åº", "ç»è®°æå", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-022", "人äºç®¡ç", "ååå°ææé", "èªå¨åéæééç¥", "éç¥å·²åé", "éè¿", "èµµXX")); |
| | | testCases.add(createTestCase("TC-023", "AI模å", "æºè½é®ç-åºåæ¥è¯¢", "è¿åæ£ç¡®åºåä¿¡æ¯", "è¿åæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-024", "AI模å", "åºå颿µåç¡®æ§", "颿µè¯¯å·®å°äº15%", "误差12%", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-025", "AI模å", "OCRææ¡£è¯å«", "è¯å«åç¡®ç>95%", "åç¡®ç96.5%", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-026", "AI模å", "è¯é³å½å
¥åè½", "è¯å«åç¡®ç>90%", "åç¡®ç88%", "è¿è¡ä¸", "åXX")); |
| | | testCases.add(createTestCase("TC-027", "ç³»ç»ç®¡ç", "ç¨æ·æéé
ç½®", "æéçæä¸é离", "æéæ£ç¡®", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-028", "ç³»ç»ç®¡ç", "æä½æ¥å¿å®¡è®¡", "å
³é®æä½å
¨è®°å½", "è®°å½å®æ´", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-029", "æ§è½æµè¯", "100å¹¶åç¨æ·ç»å½", "ååºæ¶é´<3ç§", "å¹³å1.8ç§", "éè¿", "åXX")); |
| | | testCases.add(createTestCase("TC-030", "æ§è½æµè¯", "ç¾ä¸çº§æ°æ®æ¥è¯¢", "æ¥è¯¢æ¶é´<2ç§", "0.9ç§", "éè¿", "åXX")); |
| | | data.put("testCases", testCases); |
| | | |
| | | // æµè¯è¿åº¦è·è¸ª |
| | | List<Map<String, String>> progress = new ArrayList<>(); |
| | | progress.add(createProgress("2026-05-20", "ç»å½æ¨¡åãåºåå
¥åº", "8", "8", "100%", "å·²å®æç¬¬ä¸è½®")); |
| | | progress.add(createProgress("2026-05-21", "åºååºåºãåºåçç¹", "10", "9", "90%", "åºåçç¹å¾
åå½")); |
| | | progress.add(createProgress("2026-05-22", "åºåé¢è¦ãéè´è®¢å", "8", "8", "100%", "")); |
| | | progress.add(createProgress("2026-05-23", "éå®ç®¡çãä¾åºå管ç", "10", "8", "80%", "ä¾åºåå®¡æ¹æµç¨å¾
æµ")); |
| | | progress.add(createProgress("2026-05-24", "è´¨æ£ç®¡çå
¨æµç¨", "6", "6", "100%", "")); |
| | | progress.add(createProgress("2026-05-25", "设å¤å°è´¦ãä¿å
»è®¡å", "6", "4", "67%", "ä¿å
»éªæ¶åè½å¼åä¸")); |
| | | progress.add(createProgress("2026-05-26", "人äºç®¡çãåå管ç", "8", "6", "75%", "ååå°ææéå¾
éªè¯")); |
| | | progress.add(createProgress("2026-05-27", "AIæºè½é®çãOCRè¯å«", "6", "5", "83%", "è¯é³å½å
¥åç¡®çå¾
ä¼å")); |
| | | progress.add(createProgress("2026-05-28", "ç³»ç»ç®¡çãæ§è½æµè¯", "8", "6", "75%", "æ§è½æµè¯è¿è¡ä¸")); |
| | | progress.add(createProgress("2026-05-29", "å
¨æ¨¡åå彿µè¯", "30", "25", "83%", "3个ç¨ä¾å¾
ä¿®å¤åéæµ")); |
| | | progress.add(createProgress("2026-05-30", "缺é·ä¿®å¤éªè¯", "12", "10", "83%", "2个ä½ä¼å
级缺é·å»¶åå¤ç")); |
| | | data.put("progress", progress); |
| | | |
| | | // 缺é·è·è¸ª |
| | | List<Map<String, String>> defects = new ArrayList<>(); |
| | | defects.add(createDefect("BUG-001", "åºåæ¥è¯¢ååºæ¶é´è¶
è¿5ç§", "严é", "çXX", "已修å¤", "2026-05-22")); |
| | | defects.add(createDefect("BUG-002", "å
¥åºæ¹å·é夿 ¡éªå¤±æ", "严é", "çXX", "已修å¤", "2026-05-22")); |
| | | defects.add(createDefect("BUG-003", "éè´è®¢åéé¢ç²¾åº¦ä¸¢å¤±", "ä¸è¬", "èµµXX", "已修å¤", "2026-05-23")); |
| | | defects.add(createDefect("BUG-004", "å端å页ç»ä»¶æ¾ç¤ºå¼å¸¸", "轻微", "éXX", "已修å¤", "2026-05-24")); |
| | | defects.add(createDefect("BUG-005", "AIæºè½é®çæ¥å£è¶
æ¶", "严é", "åXX", "ä¿®å¤ä¸", "2026-05-27")); |
| | | defects.add(createDefect("BUG-006", "设å¤ä¿å
»æé宿¶ä»»å¡æªè§¦å", "ä¸è¬", "çXX", "å¾
å¤ç", "2026-05-28")); |
| | | defects.add(createDefect("BUG-007", "Excel导åºå¤§æ°æ®éå
åæº¢åº", "ä¸è¬", "çXX", "ä¿®å¤ä¸", "2026-05-29")); |
| | | defects.add(createDefect("BUG-008", "è¯é³å½å
¥æ¹è¨è¯å«çä½", "轻微", "åXX", "å¾
å¤ç", "2026-05-30")); |
| | | defects.add(createDefect("BUG-009", "å¤ç¨æ·åæ¶çç¹å¯¼è´æ°æ®ä¸ä¸è´", "严é", "çXX", "å¾
å¤ç", "2026-05-30")); |
| | | defects.add(createDefect("BUG-010", "ç§»å¨ç«¯é¡µé¢éé
å¼å¸¸", "轻微", "éXX", "å¾
å¤ç", "2026-05-30")); |
| | | data.put("defects", defects); |
| | | |
| | | // æµè¯ç»è®¡ |
| | | data.put("totalCases", "80"); |
| | | data.put("passedCases", "68"); |
| | | data.put("failedCases", "3"); |
| | | data.put("inProgressCases", "5"); |
| | | data.put("blockedCases", "4"); |
| | | data.put("passRate", "85.0%"); |
| | | data.put("totalDefects", "10"); |
| | | data.put("fixedDefects", "4"); |
| | | data.put("openDefects", "4"); |
| | | data.put("inProgressDefects", "2"); |
| | | data.put("criticalDefects", "3"); |
| | | data.put("majorDefects", "3"); |
| | | data.put("minorDefects", "4"); |
| | | |
| | | // æµè¯ç»è®º |
| | | data.put("testConclusion", "ç³»ç»æ´ä½åè½å®æ´ï¼æ ¸å¿ä¸å¡æµç¨éè¿æµè¯ãåå¨3个严é缺é·å¾
ä¿®å¤ï¼AIæ¥å£è¶
æ¶ãçç¹å¹¶åæ°æ®ä¸ä¸è´ãExcel导åºå
åæº¢åºã建议修å¤ä¸¥é缺é·åå®æç¬¬äºè½®å彿µè¯ï¼åè¿å
¥ä¸çº¿æµç¨ã"); |
| | | data.put("releaseSuggestion", "ææ¡ä»¶éè¿ï¼ä¿®å¤ä¸¥é缺é·åå¯ä¸çº¿"); |
| | | |
| | | // å¾
åäºé¡¹ |
| | | List<Map<String, String>> actionItems = new ArrayList<>(); |
| | | actionItems.add(createActionItem("1", "ä¿®å¤AIæºè½é®çæ¥å£è¶
æ¶é®é¢", "åXX", "2026-06-02")); |
| | | actionItems.add(createActionItem("2", "ä¿®å¤çç¹å¹¶åæ°æ®ä¸è´æ§é®é¢", "çXX", "2026-06-03")); |
| | | actionItems.add(createActionItem("3", "ä¿®å¤Excelå¤§æ°æ®é导åºå
åæº¢åº", "çXX", "2026-06-03")); |
| | | actionItems.add(createActionItem("4", "宿è¯é³å½å
¥æ¹è¨è¯å«ä¼å", "åXX", "2026-06-05")); |
| | | actionItems.add(createActionItem("5", "å®æç¬¬äºè½®å
¨éå彿µè¯", "åXX", "2026-06-08")); |
| | | actionItems.add(createActionItem("6", "è¾åºæç»æµè¯æ¥å", "åXX", "2026-06-10")); |
| | | data.put("actionItems", actionItems); |
| | | |
| | | // å 载模æ¿å¹¶çæ |
| | | Template template = cfg.getTemplate("æµè¯æ¥å.xml"); |
| | | StringWriter out = new StringWriter(); |
| | | template.process(data, out); |
| | | |
| | | // ä¿å为docx |
| | | String outputPath = "D:/ç马/ææ¡£/æµè¯æ¥å.docx"; |
| | | File outputFile = new File(outputPath); |
| | | outputFile.getParentFile().mkdirs(); |
| | | try (FileOutputStream fos = new FileOutputStream(outputFile); |
| | | OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { |
| | | osw.write(out.toString()); |
| | | } |
| | | |
| | | System.out.println("æµè¯æ¥åçææå: " + outputPath); |
| | | } |
| | | |
| | | private static Map<String, String> createTestCase(String no, String module, String content, |
| | | String expected, String actual, String status, String tester) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("module", module); |
| | | map.put("content", content); |
| | | map.put("expected", expected); |
| | | map.put("actual", actual); |
| | | map.put("status", status); |
| | | map.put("tester", tester); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createProgress(String date, String content, String total, |
| | | String completed, String rate, String remark) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("date", date); |
| | | map.put("content", content); |
| | | map.put("total", total); |
| | | map.put("completed", completed); |
| | | map.put("rate", rate); |
| | | map.put("remark", remark); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createDefect(String no, String desc, String severity, |
| | | String owner, String status, String deadline) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("desc", desc); |
| | | map.put("severity", severity); |
| | | map.put("owner", owner); |
| | | map.put("status", status); |
| | | map.put("deadline", deadline); |
| | | return map; |
| | | } |
| | | |
| | | private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("no", no); |
| | | map.put("content", content); |
| | | map.put("owner", owner); |
| | | map.put("deadline", deadline); |
| | | return map; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| | | <?mso-application progid="Word.Document"?> |
| | | <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" |
| | | xmlns:o="urn:schemas-microsoft-com:office:office" |
| | | xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" |
| | | xml:space="preserve"> |
| | | <o:DocumentProperties> |
| | | <o:Title>ææ¯è½¯ä»¶å¼åææ¡£</o:Title> |
| | | <o:Author>ç³»ç»çæ</o:Author> |
| | | <o:Created>2026-06-02</o:Created> |
| | | </o:DocumentProperties> |
| | | <w:fonts> |
| | | <w:defaultFonts w:ascii="å®ä½" w:fareast="å®ä½" w:h-ansi="å®ä½"/> |
| | | </w:fonts> |
| | | <w:styles> |
| | | <w:style w:type="paragraph" w:styleId="title"> |
| | | <w:name w:val="Title"/> |
| | | <w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:rPr><w:b/><w:size w:val="36"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading1"> |
| | | <w:name w:val="Heading 1"/> |
| | | <w:rPr><w:b/><w:size w:val="28"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading2"> |
| | | <w:name w:val="Heading 2"/> |
| | | <w:rPr><w:b/><w:size w:val="24"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading3"> |
| | | <w:name w:val="Heading 3"/> |
| | | <w:rPr><w:b/><w:size w:val="22"/></w:rPr> |
| | | </w:style> |
| | | </w:styles> |
| | | <w:body> |
| | | |
| | | <!-- æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>产ååºå管çç³»ç» ææ¯è½¯ä»¶å¼åææ¡£</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:r><w:t>çæ¬ï¼v3.8.9</w:t></w:r> |
| | | <w:r><w:t> </w:t></w:r> |
| | | <w:r><w:t>æ¥æï¼2026-06-02</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãGitblitä»åºå°å --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãGitblitä»åºå°å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.1 ä»åºä¿¡æ¯</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="6500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>项ç®</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å°å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å端ä»åº</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>http://114.132.189.42:9002/r/product-inventory-management-after.git</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å端ä»åº</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ï¼å端ä»åºå°åï¼</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>Gitblit管çå¹³å°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>http://114.132.189.42:9002</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.2 åæ¯ç®¡ççç¥</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠masterï¼ç产ç¯å¢åæ¯ï¼ä»
éè¿åå¹¶åå¸</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠dev_æ°ç马éè¯proï¼å¼åä¸»åæ¯ï¼æ¥å¸¸å¼ååå¹¶è³æ¤</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠feature/*ï¼åè½å¼å忝ï¼å®æååå¹¶è³dev忝</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠hotfix/*ï¼ç´§æ¥ä¿®å¤åæ¯ï¼ä¿®å¤ååå¹¶è³masterådev</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠release/*ï¼åå¸åæ¯ï¼åå¸åæµè¯ä½¿ç¨</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.3 æäº¤è§è</w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="2500"/><w:gridCol w:w="4500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç±»å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>说æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>示ä¾</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>feat</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ°åè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>feat(device): æ·»å 设å¤ä¿å
»éªæ¶åè½</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>fix</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¿®å¤Bug</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>fix(purchase): ä¿®å¤éè´å°è´¦åºåå
¥åºè®°å½æ¥è¯¢é»è¾</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>docs</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ææ¡£æ´æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>docs: æ´æ°APIæ¥å£ææ¡£</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>refactor</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>代ç éæ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>refactor(home): éæé¦é¡µæ§å¶å¨æ¥å£</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>test</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯ç¸å
³</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>test: æ·»å åºå模ååå
æµè¯</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>chore</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æå»º/å·¥å
·ç¸å
³</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>chore: å级SpringBootçæ¬</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãGitç¨æ·æéåé
--> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãGitç¨æ·æéåé
</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.1 ç¨æ·æé表</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="2500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¨æ·å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å§å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è§è²</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æé</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>yangyunshan</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>项ç®ç®¡çå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>RW+ (å
¨é¨åæ¯)</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>developer1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¼å人å1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¼å人å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>RW (dev/feature忝)</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>developer2</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¼å人å2</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¼å人å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>RW (dev/feature忝)</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>tester</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯äººå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯äººå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>R (åªè¯»æé)</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.2 æé说æ</w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="7500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æé</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>说æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>RW+</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¯»åæ¨éæéï¼å¯å建/å é¤åæ¯ï¼å¯å¼ºå¶æ¨é</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>RW</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>读åæéï¼å¯æ¨é代ç å°ç°æåæ¯ï¼ä¸å¯å é¤åæ¯</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>R</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åªè¯»æéï¼ä»
å¯å
éåæå代ç </w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãæå»ºæ¹å¼ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãæå»ºæ¹å¼</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.1 å¼åç¯å¢é
ç½®</w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="6200"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¯å¢é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>çæ¬è¦æ±</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>JDKçæ¬</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>JDK 25</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>Mavençæ¬</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>3.6.3+</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>Node.jsçæ¬</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>18.x+</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>IDE</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>IntelliJ IDEA 2024+</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æ°æ®åº</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>MySQL 8.0+</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>ç¼å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Redis 6.0+</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.2 ææ¯æ </w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="4200"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å±çº§</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ææ¯</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>çæ¬</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>åç«¯æ¡æ¶</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Spring Boot</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>3.5.13</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å®å
¨æ¡æ¶</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Spring Security + JWT</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>-</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>ORMæ¡æ¶</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>MyBatis + PageHelper</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2.1.1</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æ°æ®åºè¿æ¥æ± </w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Druid</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>1.2.23</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>JSONå¤ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Fastjson</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2.0.53</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>APIææ¡£</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Knife4j (Swagger)</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>4.5.0</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å·¥å
ጼ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Hutool</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>5.8.43</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>对象åå¨</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>MinIO</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>8.4.3</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>åç«¯æ¡æ¶</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Vue + Element UI</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>-</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.3 å端æå»ºæ¥éª¤</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. å
é代ç ä»åºï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> git clone http://114.132.189.42:9002/r/product-inventory-management-after.git</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>2. 导å
¥IDEA项ç®ï¼çå¾
Mavenä¾èµä¸è½½</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>3. é
ç½®application-dev.ymlæ°æ®åºè¿æ¥ä¿¡æ¯ï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> spring.datasource.url=jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> spring.datasource.username=root</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> spring.datasource.password=password</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>4. é
ç½®Redisè¿æ¥ä¿¡æ¯</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>5. æ§è¡Mavenç¼è¯ï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> mvn clean compile</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>6. è¿è¡ä¸»ç±»ï¼com.ruoyi.RuoYiApplication</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>7. è®¿é®æ¥å£ææ¡£ï¼http://localhost:8080/doc.html</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.4 å端æå»ºæ¥éª¤</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. è¿å
¥å端ç®å½ï¼cd ruoyi-ui</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>2. å®è£
ä¾èµï¼npm install æ pnpm install</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>3. å¼åç¯å¢è¿è¡ï¼npm run dev</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>4. ç产ç¯å¢æå»ºï¼npm run build</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.5 æå
é¨ç½²</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. å端æå
ï¼mvn clean package -DskipTests</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>2. çæçJARå
ï¼target/ruoyi.jar</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>3. å¯å¨å½ä»¤ï¼java -jar ruoyi.jar --spring.profiles.active=prod</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>4. å¤ç¯å¢é
置说æï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> - dev: å¼åç¯å¢</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> - prod: ç产ç¯å¢</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t> - hbxm, hbkj, hhkjç: å客æ·å®å¶ç¯å¢</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åãæå¨æµè¯ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åãæå¨æµè¯</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.1 æµè¯ç¯å¢ä¿¡æ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="6200"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>项ç®</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä¿¡æ¯</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æµè¯ç¯å¢å°å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>http://test.xxx.com</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æµè¯è´¦å·</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>test / 123456</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>管çåè´¦å·</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>admin / admin123</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>APIææ¡£å°å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>http://localhost:8080/doc.html</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.2 åè½æ¨¡åæµè¯ç¨ä¾</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="1200"/><w:gridCol w:w="3000"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="900"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>模å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æµè¯å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>é¢æç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å®é
ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè´ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè´å°è´¦åºåå
¥åºè®°å½æ¥è¯¢</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ£ç¡®æ¾ç¤ºå
¥åºè®°å½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤ä¿å
»éªæ¶åè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éªæ¶æµç¨æ£å¸¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åºå管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åºåç©è设å¤ç»å®</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ç»å®æå并宿¶æ°é</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å货管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åºåºæ¹å·å¡«åä¸å
¥åºæ¹å·éæ©</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¹å·å
³èæ£ç¡®</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è´¨é管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¹éå¿«éæ£éªåè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¹éæ£éªæµç¨æ£å¸¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é¦é¡µ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>䏿éå®éè´éé¢ç»è®¡</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ç»è®¡æ°æ®åç¡®</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>7</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è´¢å¡ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è´¢å¡å©æAIåè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AIé®çæ£å¸¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å工管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åå·¥å
¥èæå¡æ¥å£</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å
¥èæµç¨æ£å¸¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>9</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¹ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¹å®ä¾æå½åç¨æ·è¿æ»¤</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¿æ»¤ç»ææ£ç¡®</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>10</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤å·¡æ£</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤å·¡æ£å¼å¸¸èå¨ç»´ä¿®å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ç»´ä¿®åèªå¨çæ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>符å颿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.3 æµè¯æ³¨æäºé¡¹</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠æµè¯åç¡®ä¿æ°æ®åºå·²åå§åææ°èæ¬</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æµè¯å®æååæ¶åé¦é®é¢å°å¼å人å</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éç¹å
³æ³¨è¾¹çæ¡ä»¶åå¼å¸¸åºæ¯</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æ§è½æµè¯éå¨ç¬ç«ç¯å¢è¿è¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠AIåè½æµè¯éç¡®ä¿AIæå¡æ£å¸¸è¿æ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠å¤ç¯å¢é
ç½®æµè¯éè¦çå客æ·å®å¶ç¯å¢</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºã代ç Reviewè®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºã代ç Reviewè®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.1 Reviewè§è</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠æ¯ä¸ªåè½å¼å宿åéæäº¤ä»£ç 审æ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠审æ¥äººåè³å°1人ï¼éè¦åè½é2人审æ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠审æ¥éè¿åæ¹å¯åå¹¶è³dev忝</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠审æ¥éç¹ï¼ä»£ç è§èãå®å
¨æ§ãæ§è½ãå¯ç»´æ¤æ§</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠使ç¨Gitæäº¤ä¿¡æ¯å
³è审æ¥è®°å½</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.2 Reviewè®°å½è¡¨</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="1000"/><w:gridCol w:w="1200"/><w:gridCol w:w="2200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1800"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æäº¤äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>审æ¥äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>审æ¥å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>审æ¥ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-06-01</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººA</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åå·¥å
¥èæå¡æ¥å£ä¿®æ¹</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¢å ç¨æ·æ·»å æ è¯åæ°</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-30</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººA</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤ä¿å
»éªæ¶åè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ·»å å¹´åº¦å®æ¶ä»»å¡æ¯æ</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-28</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººB</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åºåç©è设å¤ç»å®åè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>宿¶æ°éåè½å®å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-25</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººA</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é¦é¡µçäº§çæ¿æ§è½ä¼å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¼åæ¥è¯¢æ§è½</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-22</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººB</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è´¢å¡AI模åå级</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AIæé®ä¼å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-20</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººA</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè´æºè½ä½å¤æä»¶åæ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éä»¶åå¨ä¸åå²åæ¾</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-18</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººA</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éå®å©æå端èè°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AIéå®å©æåè½</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-15</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>审æ¥äººB</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤å·¡æ£å¼å¸¸èå¨ç»´ä¿®å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>èªå¨çæç»´ä¿®å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.3 常è§é®é¢æ¸
å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="2000"/><w:gridCol w:w="5900"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>é®é¢ç±»å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>é®é¢æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>代ç è§è</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å½åä¸è§èï¼ééµå¾ªé©¼å³°å½åæ³ï¼å¸¸é使ç¨å¤§åä¸å线</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å®å
¨æ§</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>SQL注å
¥é£é©ï¼é使ç¨åæ°åæ¥è¯¢ï¼é¿å
åç¬¦ä¸²æ¼æ¥</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ§è½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>N+1æ¥è¯¢é®é¢ï¼é使ç¨å
³èæ¥è¯¢ææ¹éæ¥è¯¢ä¼å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¼å¸¸å¤ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¼å¸¸æè·åæªæ£ç¡®å¤çæè®°å½æ¥å¿ï¼éå®åå¼å¸¸å¤çé»è¾</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>äºå¡ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¤è¡¨æä½æªæ·»å äºå¡æ³¨è§£ï¼å¯è½å¯¼è´æ°æ®ä¸ä¸è´</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å
ãè¿åº¦è·è¸ªè®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å
ãè¿åº¦è·è¸ªè®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.1 é¡¹ç®æ´ä½è¿åº¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>模ååç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>计ååè½æ°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>已宿</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¿è¡ä¸</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿ç</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>éè´ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>15</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>14</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>93%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>åºå管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>12</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>11</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>92%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>éå®ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>18</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>17</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>94%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>设å¤ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>10</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>10</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>è´¨é管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>7</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>88%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>è´¢å¡ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>20</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>19</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>95%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>AIæºè½å©æ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å®¡æ¹æµç¨</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>é¦é¡µçæ¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å计</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>102</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>97</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>5</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>95%</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.2 è¿ä»£è®¡å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="2000"/><w:gridCol w:w="1200"/><w:gridCol w:w="1000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¿ä»£çæ¬</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½èå´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è®¡åæ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>v1.0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åºç¡æ¡æ¶æå»ºãç¨æ·æé管ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2025-01-01 ~ 2025-03-31</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已宿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>v2.0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè´ãåºåãé宿 ¸å¿æ¨¡å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2025-04-01 ~ 2025-08-31</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已宿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>v3.0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>设å¤ç®¡çãè´¨é管çãè´¢å¡ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2025-09-01 ~ 2025-12-31</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已宿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>v3.8</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AIæºè½å©æãå®¡æ¹æµç¨ãé¦é¡µçæ¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-01-01 ~ 2026-05-31</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已宿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>v3.9</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åè½å®åãæ§è½ä¼åãBugä¿®å¤</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-01 ~ 2026-06-30</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¿è¡ä¸</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.3 æ¯æ¥è¿åº¦è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="3500"/><w:gridCol w:w="1300"/><w:gridCol w:gridCol w:w="1300"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>人å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å·¥ä½å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¿åº¦</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-06-02</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¿®æ¹åå·¥å
¥èæå¡æ¥å£å¢å ç¨æ·æ·»å æ è¯åæ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-06-01</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ·»å 设å¤ä¿å
»éªæ¶åè½åå¹´åº¦å®æ¶ä»»å¡æ¯æ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-30</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¿®å¤éè´å°è´¦åºåå
¥åºè®°å½æ¥è¯¢é»è¾</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-28</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ·»å åºåç©è设å¤ç»å®å宿¶æ°éåè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-25</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åè´§åºåºæ¹å·ä¸å
¥åºæ¹å·å
³èåè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-22</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ°å¢ä¸æéå®éè´éé¢ç»è®¡åè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-20</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¼åæ¹éå¿«éæ£éªåè½</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2026-05-18</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éå®å©æAIåè½å端èè°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å·²æäº¤</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.4 å¾
宿äºé¡¹</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="2500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>äºé¡¹æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>计å宿æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä¼å
级</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè´ç®¡çå©ä½åè½å®å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-10</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é«</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¿è¡ä¸</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åºå管çå©ä½åè½å®å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-12</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é«</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¾
å¼å§</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éå®ç®¡çå©ä½åè½å®å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-15</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é«</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¾
å¼å§</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è´¨é管çå©ä½åè½å®å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-18</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¾
å¼å§</w:t></w:r></w>p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ç³»ç»æ§è½ä¼å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-25</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¾
å¼å§</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ç³»ç»éææµè¯</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-28</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é«</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¾
å¼å§</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.5 é®é¢è·è¸ª</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="2500"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>é®é¢æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åç°äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>责任人</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä¼å
级</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè´å°è´¦åºåå
¥åºè®°å½æ¥è¯¢å¼å¸¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯äººå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é«</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已解å³</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é¦é¡µçæ¿æ§è½é®é¢</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯äººå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已解å³</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¹éå¿«éæ£éªæ°æ®æ ¡éªé®é¢</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯äººå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已解å³</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãéå½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãéå½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>7.1 ç¸å
³ææ¡£</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠éå½Aï¼æ¥å£ææ¡£ - Swaggerå°åï¼http://localhost:8080/doc.html</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Bï¼æ°æ®åºè®¾è®¡ææ¡£</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Cï¼é¨ç½²æå</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Dï¼è¿ç»´æå</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Eï¼å端èè°ææ¡£ï¼è§docç®å½ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>7.2 èç³»æ¹å¼</w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="3000"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è§è²</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å§å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>èç³»æ¹å¼</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>项ç®ç»ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>yangyunshan@xxx.com</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å¼åè´è´£äºº</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>yangyunshan@xxx.com</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æµè¯è´è´£äºº</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æµè¯äººå</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>tester@xxx.com</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>7.3 çæ¬åå²</w:t></w:r> |
| | | </w:p> |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="2800"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>çæ¬</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä¿®æ¹äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä¿®æ¹è¯´æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>v1.0</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>2026-06-02</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ¨äºå±±</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åå§çæ¬å建</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | </w:body> |
| | | </w:wordDocument> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| | | <?mso-application progid="Word.Document"?> |
| | | <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" |
| | | xmlns:o="urn:schemas-microsoft-com:office:office" |
| | | xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" |
| | | xml:space="preserve"> |
| | | <o:DocumentProperties> |
| | | <o:Title>æå¡å¨è¿ç»´è®°å½</o:Title> |
| | | <o:Author>ç³»ç»çæ</o:Author> |
| | | <o:Created>${docDate}</o:Created> |
| | | </o:DocumentProperties> |
| | | <w:fonts> |
| | | <w:defaultFonts w:ascii="å®ä½" w:fareast="å®ä½" w:h-ansi="å®ä½"/> |
| | | </w:fonts> |
| | | <w:styles> |
| | | <w:style w:type="paragraph" w:styleId="title"> |
| | | <w:name w:val="Title"/> |
| | | <w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:rPr><w:b/><w:size w:val="36"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading1"> |
| | | <w:name w:val="Heading 1"/> |
| | | <w:rPr><w:b/><w:size w:val="28"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading2"> |
| | | <w:name w:val="Heading 2"/> |
| | | <w:rPr><w:b/><w:size w:val="24"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading3"> |
| | | <w:name w:val="Heading 3"/> |
| | | <w:rPr><w:b/><w:size w:val="22"/></w:rPr> |
| | | </w:style> |
| | | </w:styles> |
| | | <w:body> |
| | | |
| | | <!-- æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>${projectName} æå¡å¨è¿ç»´è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:r><w:t>çæ¬ï¼${projectVersion}</w:t></w:r> |
| | | <w:r><w:t> </w:t></w:r> |
| | | <w:r><w:t>æ¥æï¼${docDate}</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãæå¡å¨æ¸
å --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãæå¡å¨æ¸
å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1300"/><w:gridCol w:w="700"/><w:gridCol w:w="700"/><w:gridCol w:w="1100"/><w:gridCol w:w="1100"/><w:gridCol w:w="600"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç±»å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å
ç½IP</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>CPU</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å
å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>硬ç</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æä½ç³»ç»</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list servers as s> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${s.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.type}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.ip}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.cpu}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.memory}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.disk}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.os}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.status}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãè¿ç»´è¿åº¦è·è¸ª --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãè¿ç»´è¿åº¦è·è¸ª</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="1800"/><w:gridCol w:w="2800"/><w:gridCol w:w="700"/><w:gridCol w:w="2100"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä»»å¡</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å·¥ä½å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¿åº¦</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list progress as p> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${p.date}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.task}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.rate}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.remark}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãæå¡å¨å·¡æ£è®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãæå¡å¨å·¡æ£è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="1200"/><w:gridCol w:w="2500"/><w:gridCol w:w="900"/><w:gridCol w:w="2800"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æå¡å¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å·¡æ£ææ </w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list inspections as ins> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${ins.date}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ins.server}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ins.metrics}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ins.result}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ins.remark}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åãæ°æ®åºå¤ä»½è®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åãæ°æ®åºå¤ä»½è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="900"/><w:gridCol w:w="1500"/><w:gridCol w:w="900"/><w:gridCol w:w="900"/><w:gridCol w:w="1100"/><w:gridCol w:w="1100"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç±»å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°æ®åº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>大å°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¼å§æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»ææ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list backups as b> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${b.date}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${b.type}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${b.database}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${b.size}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${b.status}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${b.startTime}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${b.endTime}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãæ
é/äºä»¶è®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãæ
é/äºä»¶è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="650"/><w:gridCol w:w="1000"/><w:gridCol w:w="1000"/><w:gridCol w:w="1600"/><w:gridCol w:w="1300"/><w:gridCol w:w="1600"/><w:gridCol w:w="1000"/><w:gridCol w:w="650"/><w:gridCol w:w="700"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åçæ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æå¡å¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ
éæè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åå </w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¤çæ¹æ¡</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è§£å³æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¤ç人</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list incidents as inc> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${inc.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.time}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.server}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.desc}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.cause}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.solution}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.resolveTime}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.status}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inc.handler}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å
ãè¡¥ä¸/æ´æ°è®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å
ãè¡¥ä¸/æ´æ°è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="1500"/><w:gridCol w:w="2600"/><w:gridCol w:w="900"/><w:gridCol w:w="900"/><w:gridCol w:w="1500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æå¡å¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ´æ°å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç±»å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list patches as pt> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${pt.date}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${pt.server}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${pt.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${pt.type}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${pt.result}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${pt.remark}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãåæ´è®°å½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãåæ´è®°å½</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="800"/><w:gridCol w:w="1000"/><w:gridCol w:w="1800"/><w:gridCol w:w="1500"/><w:gridCol w:w="1800"/><w:gridCol w:w="800"/><w:gridCol w:w="800"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åæ´å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¶åæå¡å¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åæ´è¯¦æ
</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ§è¡äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list changes as ch> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${ch.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ch.date}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ch.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ch.server}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ch.detail}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ch.executor}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${ch.status}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å
«ãè¿ç»´ç»è®¡ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å
«ãè¿ç»´ç»è®¡</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>8.1 æå¡å¨ç¶æ</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»è®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°é</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»è®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°é</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æå¡å¨æ»æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${serverCount}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ£å¸¸è¿è¡</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${runningCount}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>åè¦/å¼å¸¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${alertCount}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¯ç¨ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${uptimeRate}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å·¡æ£æ»æ¬¡æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${totalInspections}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¤ä»½æ»æ¬¡æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${totalBackups}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å¤ä»½æåç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${backupSuccessRate}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ
éæ»æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${totalIncidents}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å·²è§£å³æ
é</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${solvedIncidents}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¡¥ä¸æ»æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${totalPatches}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>è¡¥ä¸å·²å®æ</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${completedPatches}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¹ãè¿ç»´ç»è®º --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¹ãè¿ç»´ç»è®º</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>9.1 综åè¯ä»·</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${opsConclusion}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>9.2 é£é©æç¤º</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${riskWarning}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åãå¾
åäºé¡¹ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åãå¾
åäºé¡¹</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¾
åå
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list actionItems as a> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- è¿ç»´è¯å®¡ä¼è®®çºªè¦ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>è¿ç»´è¯å®¡ä¼è®®çºªè¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¼è®®ä¿¡æ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ä¼è®®ä¸»é¢ï¼äº§ååºå管çç³»ç»è¿ç»´è¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®æ¶é´ï¼2026å¹´6æ2æ¥ 10:00-11:30</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®å°ç¹ï¼å
¬å¸ä¼è®®å®¤</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主æäººï¼å¼ XX</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>è®°å½äººï¼å¨XX</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åä¼äººå</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>å¼ XXï¼é¡¹ç®ç»çï¼ãçXXï¼å端å¼åï¼ãå¨XXï¼è¿ç»´å·¥ç¨å¸ï¼ãåXXï¼æµè¯å·¥ç¨å¸ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡å
容</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. æå¡å¨èµæºé
ç½®ä¸ä½¿ç¨æ
åµ</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. å¤ä»½çç¥ä¸æ¢å¤æ¼ç»è¯ä¼°</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. å®å
¨è¡¥ä¸æ§è¡è¿åº¦</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. æ
éå¤çæçåæ</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>5. çæ§åè¦ä½ç³»å®å度</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡ç»è®º</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="4500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡æè§</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æå¡å¨é
ç½®</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>é
ç½®åçï¼SVR-FILE-01鿩容</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å¤ä»½çç¥</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å
¨é+å¢éçç¥åçï¼éå¢å å¼å°å¤ä»½</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å®å
¨è¡¥ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¿è¡ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å
æ ¸è¡¥ä¸3å°å¾
宿ï¼é¢è®¡6æ2æ¥å®æ</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æ
éå¤ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ
éååºåæ¶ï¼å¹³åå¤çæ¶é´40åé</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>çæ§åè¦</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¿è¡ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>Prometheuså·²é¨ç½²ï¼åè¦è§åéå®å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>éçé®é¢</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. SVR-FILE-01ç£çæ©å®¹æ¹æ¡åé¢ç®å¾
审æ¹</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. å¼å°å¤ä»½æå¡å¨èµæºå¾
ç³è¯·</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. æ¯å¦éè¦å¼å
¥èªå¨åè¿ç»´å¹³å°ï¼Ansible/Jenkinsï¼ï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. AIæ¨çæå¡å¨GPUæ¯å¦éè¦åä½é
ç½®ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>䏿¬¡ä¼è®®</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>æ¶é´ï¼2026å¹´6æ9æ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主é¢ï¼è¿ç»´å·¥ä½æ»ç»ä¸ä¸é¶æ®µè§å</w:t></w:r></w:p> |
| | | |
| | | </w:body> |
| | | </w:wordDocument> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| | | <?mso-application progid="Word.Document"?> |
| | | <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" |
| | | xmlns:o="urn:schemas-microsoft-com:office:office" |
| | | xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" |
| | | xml:space="preserve"> |
| | | <o:DocumentProperties> |
| | | <o:Title>æµè¯æ¥å</o:Title> |
| | | <o:Author>ç³»ç»çæ</o:Author> |
| | | <o:Created>${docDate}</o:Created> |
| | | </o:DocumentProperties> |
| | | <w:fonts> |
| | | <w:defaultFonts w:ascii="å®ä½" w:fareast="å®ä½" w:h-ansi="å®ä½"/> |
| | | </w:fonts> |
| | | <w:styles> |
| | | <w:style w:type="paragraph" w:styleId="title"> |
| | | <w:name w:val="Title"/> |
| | | <w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:rPr><w:b/><w:size w:val="36"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading1"> |
| | | <w:name w:val="Heading 1"/> |
| | | <w:rPr><w:b/><w:size w:val="28"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading2"> |
| | | <w:name w:val="Heading 2"/> |
| | | <w:rPr><w:b/><w:size w:val="24"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading3"> |
| | | <w:name w:val="Heading 3"/> |
| | | <w:rPr><w:b/><w:size w:val="22"/></w:rPr> |
| | | </w:style> |
| | | </w:styles> |
| | | <w:body> |
| | | |
| | | <!-- æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>${projectName} æµè¯æ¥å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:r><w:t>çæ¬ï¼${projectVersion}</w:t></w:r> |
| | | <w:r><w:t> </w:t></w:r> |
| | | <w:r><w:t>æ¥æï¼${docDate}</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãæµè¯è®¡åæ¦è¿° --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãæµè¯è®¡åæ¦è¿°</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.1 æµè¯ç®æ </w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ç¡®ä¿äº§ååºå管çç³»ç»ååè½æ¨¡å符åéæ±è§æ ¼ï¼ç³»ç»è¿è¡ç¨³å®å¯é ï¼æ§è½æ»¡è¶³è®¾è®¡è¦æ±ï¼ä¸ºç³»ç»ä¸çº¿æä¾è´¨éä¿éã</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.2 æµè¯èå´</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${testScope}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.3 æµè¯æ¹æ³</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${testMethodology}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.4 æµè¯å¨æ</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${testCycle}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.5 æµè¯ç¯å¢</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${testEnv}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãæµè¯ç¨ä¾ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãæµè¯ç¨ä¾</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="900"/><w:gridCol w:w="1000"/><w:gridCol w:w="2100"/><w:gridCol w:w="1800"/><w:gridCol w:w="1400"/><w:gridCol w:w="800"/><w:gridCol w:w="800"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¨ä¾ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>模å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æµè¯å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>é¢æç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å®é
ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æµè¯äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list testCases as tc> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${tc.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${tc.module}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${tc.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${tc.expected}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${tc.actual}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${tc.status}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${tc.tester}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãæµè¯è¿åº¦è·è¸ª --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãæµè¯è¿åº¦è·è¸ª</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1300"/><w:gridCol w:w="2600"/><w:gridCol w:w="700"/><w:gridCol w:w="700"/><w:gridCol w:w="700"/><w:gridCol w:w="2500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æµè¯å
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è®¡åæ°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿æ°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿ç</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list progress as p> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${p.date}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.total}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.completed}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.rate}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${p.remark}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åã缺é·è·è¸ª --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åã缺é·è·è¸ª</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="3000"/><w:gridCol w:w="800"/><w:gridCol w:w="1000"/><w:gridCol w:w="800"/><w:gridCol w:w="1200"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¼ºé·æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>严éç¨åº¦</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç¶æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>计åä¿®å¤æ¥</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list defects as d> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${d.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${d.desc}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${d.severity}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${d.owner}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${d.status}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${d.deadline}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãæµè¯ç»è®¡ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãæµè¯ç»è®¡</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.1 ç¨ä¾æ§è¡ç»è®¡</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»è®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°é</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»è®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°é</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>ç¨ä¾æ»æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${totalCases}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿ç¨ä¾</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${passedCases}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>失败ç¨ä¾</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${failedCases}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¿è¡ä¸ç¨ä¾</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inProgressCases}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>é»å¡ç¨ä¾</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${blockedCases}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${passRate}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.2 缺é·ç»è®¡</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»è®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°é</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ç»è®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ°é</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>ç¼ºé·æ»æ°</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${totalDefects}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>已修å¤</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${fixedDefects}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>å¾
å¤ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${openDefects}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¿®å¤ä¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${inProgressDefects}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>严é缺é·</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${criticalDefects}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ä¸è¬ç¼ºé·</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${majorDefects}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>轻微缺é·</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${minorDefects}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å
ãæµè¯ç»è®º --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å
ãæµè¯ç»è®º</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.1 综åè¯ä»·</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${testConclusion}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.2 ä¸çº¿å»ºè®®</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>${releaseSuggestion}</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãå¾
åäºé¡¹ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãå¾
åäºé¡¹</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¾
åå
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list actionItems as a> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- æµè¯è¯å®¡ä¼è®®çºªè¦ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>æµè¯è¯å®¡ä¼è®®çºªè¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¼è®®ä¿¡æ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ä¼è®®ä¸»é¢ï¼äº§ååºå管çç³»ç»æµè¯è¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®æ¶é´ï¼2026å¹´6æ2æ¥ 14:00-16:00</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®å°ç¹ï¼å
¬å¸ä¼è®®å®¤</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主æäººï¼å¼ XX</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>è®°å½äººï¼åXX</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åä¼äººå</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>å¼ XXï¼é¡¹ç®ç»çï¼ãæXXï¼äº§åç»çï¼ãçXXï¼å端å¼åï¼ãèµµXXï¼å端å¼åï¼ãéXXï¼å端å¼åï¼ãåXXï¼AIå·¥ç¨å¸ï¼ãåXXï¼æµè¯å·¥ç¨å¸ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡å
容</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. æµè¯ç¨ä¾è¦ç度è¯å®¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. æµè¯è¿åº¦ä¸è®¡ååå·®åæ</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. 缺é·åæä¸é£é©è¯ä¼°</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. æ§è½æµè¯ç»æè¯ä¼°</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>5. ä¸çº¿æ¡ä»¶ç¡®è®¤</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡ç»è®º</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="4500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡æè§</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æµè¯ç¨ä¾è¦ç度</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ ¸å¿åè½å
¨è¦çï¼å»ºè®®è¡¥å
è¾¹çå¼å¸¸åºæ¯</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æµè¯è¿åº¦</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ´ä½è¿åº¦85%ï¼ç¬¦å计å颿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>缺é·ç®¡ç</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ææ¡ä»¶éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>3个严é缺é·éä¿®å¤åå¯ä¸çº¿</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æ§è½æµè¯</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å¹¶ååæ¥è¯¢æ§è½æ»¡è¶³è¦æ±</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>AIåè½æµè¯</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>ææ¡ä»¶éè¿</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è¯é³å½å
¥åç¡®çéä¼åï¼å
¶ä»åè½è¾¾æ </w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>éçé®é¢</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. è¯é³å½å
¥æ¹è¨è¯å«ä¼åæ¹æ¡å¾
åXX确认</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. Excelå¤§æ°æ®éå¯¼åºæ¯å¦éè¦æ¹å¼æ¥å¤çï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. çç¹å¹¶åéæºå¶æ¯å¦éè¦å¼å
¥åå¸å¼éï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. ç§»å¨ç«¯éé
èå´æ¯å¦çº³å
¥æ¬æ¬¡ä¸çº¿ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>䏿¬¡ä¼è®®</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>æ¶é´ï¼2026å¹´6æ10æ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主é¢ï¼ç¬¬äºè½®å彿µè¯è¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | |
| | | </w:body> |
| | | </w:wordDocument> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| | | <?mso-application progid="Word.Document"?> |
| | | <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" |
| | | xmlns:o="urn:schemas-microsoft-com:office:office" |
| | | xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" |
| | | xml:space="preserve"> |
| | | <o:DocumentProperties> |
| | | <o:Title>ç³»ç»è®¾è®¡è¯´æä¹¦</o:Title> |
| | | <o:Author>ç³»ç»çæ</o:Author> |
| | | <o:Created>${docDate}</o:Created> |
| | | </o:DocumentProperties> |
| | | <w:fonts> |
| | | <w:defaultFonts w:ascii="å®ä½" w:fareast="å®ä½" w:h-ansi="å®ä½"/> |
| | | </w:fonts> |
| | | <w:styles> |
| | | <w:style w:type="paragraph" w:styleId="title"> |
| | | <w:name w:val="Title"/> |
| | | <w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:rPr><w:b/><w:size w:val="36"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading1"> |
| | | <w:name w:val="Heading 1"/> |
| | | <w:rPr><w:b/><w:size w:val="28"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading2"> |
| | | <w:name w:val="Heading 2"/> |
| | | <w:rPr><w:b/><w:size w:val="24"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading3"> |
| | | <w:name w:val="Heading 3"/> |
| | | <w:rPr><w:b/><w:size w:val="22"/></w:rPr> |
| | | </w:style> |
| | | </w:styles> |
| | | <w:body> |
| | | |
| | | <!-- æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>${projectName} ç³»ç»è®¾è®¡è¯´æä¹¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:r><w:t>çæ¬ï¼${projectVersion}</w:t></w:r> |
| | | <w:r><w:t> </w:t></w:r> |
| | | <w:r><w:t>æ¥æï¼${docDate}</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ã设计说æ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ã设计说æ</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.1 ç¼åç®ç</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>æ¬ææ¡£æ¨å¨è¯¦ç»æè¿°äº§ååºå管çç³»ç»çç³»ç»æ¶æè®¾è®¡ãè½¯ä»¶æ¡æ¶ãæå¡å¨é
ç½®çææ¯ç»èï¼ä¸ºå¼å人åæä¾ææ¯æå¯¼ï¼ä¸ºè¿ç»´äººåæä¾é¨ç½²åèï¼ç¡®ä¿ç³»ç»çå¯ç»´æ¤æ§å坿©å±æ§ã</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.2 项ç®èæ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>产ååºå管çç³»ç»æ¯ä¸å¥é¢åä¼ä¸ç综å管çå¹³å°ï¼æ¶µçåºå管çãéè´éå®ãè´¨éæ£æµã设å¤ç»´æ¤ã人äºååçæ ¸å¿ä¸å¡æ¨¡åï¼å¹¶å¼å
¥AIææ¯å®ç°æºè½ååè½ï¼æåä¼ä¸ç®¡çæçåå³çæ°´å¹³ã</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>1.3 设计åå</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠é«å¯ç¨æ§ï¼éç¨é群é¨ç½²ï¼ç¡®ä¿ç³»ç»7x24å°æ¶ç¨³å®è¿è¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ å¯æ©å±æ§ï¼æ¨¡ååè®¾è®¡ï¼æ¯æåè½çµæ´»æ©å±</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠å®å
¨æ§ï¼å¤å±æ¬¡å®å
¨é²æ¤ï¼ä¿éæ°æ®å®å
¨</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ é«æ§è½ï¼ä¼åæ°æ®åºåç¼åçç¥ï¼ç¡®ä¿å¿«éååº</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æç»´æ¤ï¼æ å忥å£åææ¡£ï¼éä½ç»´æ¤ææ¬</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãè½¯ä»¶æ¡æ¶ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãè½¯ä»¶æ¡æ¶</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.1 æ´ä½æ¶æ</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ç³»ç»éç¨åå端å离çå¾®æå¡æ¶æï¼ä¸»è¦å为以ä¸å±æ¬¡ï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠表ç°å±ï¼Vue 3 + Element Plusï¼æä¾ç¨æ·äº¤äºçé¢</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠ç½å
³å±ï¼Nginxåå代çï¼è´è½½åè¡¡å请æ±è·¯ç±</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æå¡å±ï¼Spring Bootå¾®æå¡ï¼ä¸å¡é»è¾å¤ç</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®å±ï¼MySQL主ä»é群 + Redisç¼å</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠AIæå¡å±ï¼å¤§è¯è¨æ¨¡åAPIæ¥å
¥ï¼æºå¨å¦ä¹ 模åæå¡</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.2 åç«¯ææ¯æ </w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="4000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åç±»</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ææ¯ç»ä»¶</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>说æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list backendTech as t> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${t.category}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.component}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.3 åç«¯ææ¯æ </w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="4000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åç±»</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ææ¯ç»ä»¶</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>说æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list frontendTech as t> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${t.category}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.component}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.4 AIææ¯æ¶æ</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="4000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åç±»</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ææ¯ç»ä»¶</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>说æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list aiTech as t> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${t.category}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.component}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>2.5 ç³»ç»æ¨¡å设计</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/><w:gridCol w:w="5000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>模åç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>模ååç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list modules as m> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${m.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${m.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${m.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãæå¡å¨é
ç½® --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãæå¡å¨é
ç½®</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.1 æå¡å¨ææ</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ç³»ç»éç¨åå¸å¼é¨ç½²æ¶æï¼ä¸»è¦æå¡å¨èç¹å
æ¬ï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠åºç¨æå¡å¨é群ï¼é¨ç½²Spring Bootåºç¨ï¼2å°ä»¥ä¸</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®åºæå¡å¨ï¼MySQL䏻仿¶æï¼ä¸»åº1å° + ä»åº1å°</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠ç¼åæå¡å¨ï¼Rediså¨å
µæ¨¡å¼ï¼3å°</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æä»¶æå¡å¨ï¼MinIO对象åå¨ï¼2å°</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠AIæ¨çæå¡å¨ï¼GPUæå¡å¨ï¼é¨ç½²æºå¨å¦ä¹ 模å</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.2 æå¡å¨é
ç½®æ¸
å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/><w:gridCol w:w="2000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æå¡å¨åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>CPU</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å
å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>硬ç</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æä½ç³»ç»</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list servers as s> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${s.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.cpu}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.memory}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.disk}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${s.os}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.3 ç½ç»æ¶æ</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠å¤ç½å¸¦å®½ï¼100Mbpsï¼æ¯æé«å¹¶å访é®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠å
ç½å¸¦å®½ï¼åå
以太ç½ï¼æå¡å¨é´é«ééä¿¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠é²ç«å¢ï¼é
ç½®å®å
¨ç»è§åï¼ä»
弿¾å¿
è¦ç«¯å£</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠è´è½½åè¡¡ï¼Nginxå®ç°è¯·æ±ååï¼æ¯æå¥åº·æ£æ¥</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.4 å®å
¨é
ç½®</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠SSLè¯ä¹¦ï¼é
ç½®HTTPSï¼ä¿éæ°æ®ä¼ è¾å®å
¨</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®åºå®å
¨ï¼å
ç½è®¿é®ï¼ç¦æ¢å¤ç½ç´è¿</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ å®æå¤ä»½ï¼æ¯æ¥èªå¨å¤ä»½æ°æ®åºï¼ä¿ç30天</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æ¥å¿å®¡è®¡ï¼è®°å½å
³é®æä½æ¥å¿ï¼æ¯æå®å
¨å®¡è®¡</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åãæ°æ®åºè®¾è®¡ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åãæ°æ®åºè®¾è®¡</w:t></w:r> |
| | | </wp> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.1 æ°æ®åºéå</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>â¢ ä¸»æ°æ®åºï¼MySQL 8.0ï¼åå¨ä¸å¡æ°æ®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠ç¼åæ°æ®åºï¼Redis 7.0ï¼ç¼åçç¹æ°æ®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æä»¶åå¨ï¼MinIOï¼å卿件åéä»¶</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.2 ä¸»è¦æ°æ®è¡¨</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="6000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>表å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>说æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list tables as t> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${t.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãæ¥å£è®¾è®¡ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãæ¥å£è®¾è®¡</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.1 æ¥å£è§è</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠æ¥å£åè®®ï¼RESTful APIï¼åºäºHTTP/HTTPS</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®æ ¼å¼ï¼JSON</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ è®¤è¯æ¹å¼ï¼JWT Token</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æ¥å£ææ¡£ï¼Swagger / Knife4j</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.2 ä¸»è¦æ¥å£å表</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="3000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯·æ±æ¹å¼</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>æ¥å£è·¯å¾</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½è¯´æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list apis as a> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.method}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.path}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- è¯å®¡ä¼è®®çºªè¦æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>设计è¯å®¡ä¼è®®çºªè¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <!-- ä¼è®®ä¿¡æ¯ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¼è®®ä¿¡æ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ä¼è®®ä¸»é¢ï¼ç³»ç»è®¾è®¡è¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®æ¶é´ï¼2026å¹´XæXæ¥ 14:00-17:00</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®å°ç¹ï¼å
¬å¸ä¼è®®å®¤</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主æäººï¼å¼ XX</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>è®°å½äººï¼æXX</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åä¼äººå --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åä¼äººå</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>å¼ XXï¼é¡¹ç®ç»çï¼ãæXXï¼äº§åç»çï¼ãçXXï¼æ¶æå¸ï¼ãèµµXXï¼å端å¼åï¼ãéXXï¼å端å¼åï¼ãåXXï¼AIå·¥ç¨å¸ï¼ãåXXï¼æµè¯å·¥ç¨å¸ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- è¯å®¡å
容 --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡å
容</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. ç³»ç»æ¶æè®¾è®¡è¯å®¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. æ°æ®åºè®¾è®¡è¯å®¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. æ¥å£è®¾è®¡è¯å®¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. æå¡å¨é
ç½®è¯å®¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>5. AIææ¯æ¹æ¡è¯å®¡</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- è¯å®¡ç»è®º --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡ç»è®º</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="4500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡æè§</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list reviewItems as r> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${r.item}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${r.result}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${r.opinion}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å¾
åäºé¡¹ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å¾
åäºé¡¹</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¾
åå
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list actionItems as a> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- éçé®é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>éçé®é¢</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. æ¯å¦éè¦èè容å¨åé¨ç½²ï¼Docker/K8sï¼ï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. AIæ¨çæå¡å¨æ¯å¦éè¦é
ç½®GPUï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. æ°æ®åºæ¯å¦éè¦ååºåè¡¨æ¹æ¡ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- 䏿¬¡ä¼è®® --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>䏿¬¡ä¼è®®</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>æ¶é´ï¼2026å¹´XæXæ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主é¢ï¼å¼åè¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | |
| | | </w:body> |
| | | </w:wordDocument> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| | | <?mso-application progid="Word.Document"?> |
| | | <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" |
| | | xmlns:o="urn:schemas-microsoft-com:office:office" |
| | | xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" |
| | | xml:space="preserve"> |
| | | <o:DocumentProperties> |
| | | <o:Title>项ç®éæ±è¯´æä¹¦</o:Title> |
| | | <o:Author>ç³»ç»çæ</o:Author> |
| | | <o:Created>${docDate}</o:Created> |
| | | </o:DocumentProperties> |
| | | <w:fonts> |
| | | <w:defaultFonts w:ascii="å®ä½" w:fareast="å®ä½" w:h-ansi="å®ä½"/> |
| | | </w:fonts> |
| | | <w:styles> |
| | | <w:style w:type="paragraph" w:styleId="title"> |
| | | <w:name w:val="Title"/> |
| | | <w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:rPr><w:b/><w:size w:val="36"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading1"> |
| | | <w:name w:val="Heading 1"/> |
| | | <w:rPr><w:b/><w:size w:val="28"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading2"> |
| | | <w:name w:val="Heading 2"/> |
| | | <w:rPr><w:b/><w:size w:val="24"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading3"> |
| | | <w:name w:val="Heading 3"/> |
| | | <w:rPr><w:b/><w:size w:val="22"/></w:rPr> |
| | | </w:style> |
| | | </w:styles> |
| | | <w:body> |
| | | |
| | | <!-- æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>${projectName} éæ±è¯´æä¹¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:r><w:t>çæ¬ï¼${projectVersion}</w:t></w:r> |
| | | <w:r><w:t> </w:t></w:r> |
| | | <w:r><w:t>æ¥æï¼${docDate}</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ã项ç®èæ¯ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ã项ç®èæ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>éçä¼ä¸ä¸å¡è§æ¨¡ä¸ææ©å¤§ï¼ä¼ ç»çæå·¥è®°å½åExcelç®¡çæ¹å¼å·²æ æ³æ»¡è¶³æ¥ç夿çåºåãéè´ãéå®çä¸å¡éæ±ã为æå管çæçãéä½äººå·¥é误çãå®ç°æ°æ®å®æ¶å
±äº«ï¼ä¼ä¸æ¥éä¸å¥æ°ååãæºè½åç产ååºå管çç³»ç»ã</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t>æ¬é¡¹ç®æ¨å¨æå»ºä¸ä¸ªéåºå管çãéè´éå®ãè´¨éæ£æµã设å¤ç»´æ¤ã人äºååäºä¸ä½ç综å管çå¹³å°ï¼å¹¶ç»å人工æºè½ææ¯å®ç°æºè½é¢è¦ãæ°æ®åæçé«çº§åè½ã</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºã项ç®ç®æ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºã项ç®ç®æ </w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. å®ç°åºåå
¨æµç¨æ°åå管çï¼å
æ¬å
¥åºãåºåºãçç¹ãé¢è¦ç</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. 建ç«éè´éå®éç¯ç®¡çï¼ä»è¯¢ä»·å°åè´§å
¨ç¨å¯è¿½æº¯</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. æå»ºè´¨éæ£æµä½ç³»ï¼ç¡®ä¿äº§åè´¨é坿§å¯æ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. å®ç°è®¾å¤å
¨çå½å¨æç®¡çï¼éä½è®¾å¤æ
éç</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>5. æ´å人äºååæµç¨ï¼æååå
¬æç</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>6. å¼å
¥AIææ¯ï¼å®ç°æºè½é¢æµãæºè½å®¢æãæºè½ææ¡£å¤ç</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãåè½éæ± --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãåè½éæ±</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.1 åºåç®¡çæ¨¡å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list inventoryFeatures as f> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.2 éè´é宿¨¡å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list purchaseFeatures as f> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.3 è´¨æ£è®¾å¤æ¨¡å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list qualityFeatures as f> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.4 人äºå忍¡å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list staffFeatures as f> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>3.5 AIæºè½å模å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½ç¼å·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åè½æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list aiFeatures as f> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åãéåè½éæ± --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åãéåè½éæ±</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.1 æ§è½éæ±</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠页é¢ååºæ¶é´ï¼æ®é页é¢å è½½æ¶é´ä¸è¶
è¿2ç§</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®æ¥è¯¢ï¼å表æ¥è¯¢ååºæ¶é´ä¸è¶
è¿1ç§</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ å¹¶åæ¯æï¼ç³»ç»æ¯æ100+ç¨æ·åæ¶å¨çº¿æä½</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®å¤çï¼æ¯æç¾ä¸çº§æ°æ®éç髿å¤ç</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.2 å®å
¨éæ±</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>â¢ ç¨æ·è®¤è¯ï¼æ¯æå¤å ç´ è®¤è¯ï¼ç¡®ä¿è´¦æ·å®å
¨</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æéæ§å¶ï¼åºäºRBAC模åï¼å®ç°ç»ç²åº¦æé管ç</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®å å¯ï¼æææ°æ®éç¨AESå å¯åå¨</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æä½æ¥å¿ï¼å
³é®æä½å
¨ç¨è®°å½ï¼æ¯æå®¡è®¡è¿½æº¯</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.3 å¯ç¨æ§éæ±</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠系ç»å¯ç¨æ§ï¼7x24å°æ¶ç¨³å®è¿è¡ï¼å¯ç¨æ§è¾¾å°99.9%</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®å¤ä»½ï¼æ¯æ¥èªå¨å¤ä»½ï¼æ¯æå¿«éæ¢å¤</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠容ç¾è½åï¼æ¯æå¼å°å®¹ç¾ï¼æ°æ®ä¸ä¸¢å¤±</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>4.4 å
¼å®¹æ§éæ±</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠æµè§å¨æ¯æï¼å
¼å®¹ChromeãEdgeãFirefoxä¸»æµæµè§å¨</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠移å¨ç«¯éé
ï¼æ ¸å¿åè½æ¯æç§»å¨ç«¯è®¿é®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æ¥å£æ åï¼éç¨RESTful APIï¼æ¯æç¬¬ä¸æ¹ç³»ç»éæ</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãç¨æ·è§è² --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãç¨æ·è§è²</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="3000"/><w:gridCol w:w="3500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è§è²åç§°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è§è²æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>ä¸»è¦æé</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list userRoles as r> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${r.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${r.desc}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${r.permission}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å
ãä¸å¡æµç¨ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å
ãä¸å¡æµç¨</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.1 åºåå
¥åºæµç¨</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. éè´è®¢åå°è´§ â 2. è´¨éæ£éª â 3. æ£éªåæ ¼ â 4. å建å
¥åºå â 5. 审æ¹å
¥åº â 6. æ´æ°åºå</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.2 éå®åºåºæµç¨</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. éå®è®¢åå建 â 2. åºåæ ¡éª â 3. 订åå®¡æ¹ â 4. çæåºåºå â 5. å货确认 â 6. æ´æ°åºå</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>6.3 设å¤ä¿å
»æµç¨</w:t></w:r> |
| | | </wp> |
| | | <w:p><w:r><w:t>1. å¶å®ä¿å
»è®¡å â 2. 宿¶ä»»å¡è§¦å â 3. æ§è¡ä¿å
»ä»»å¡ â 4. éªæ¶ç¡®è®¤ â 5. è®°å½å½æ¡£</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãææ¯è¦æ± --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãææ¯è¦æ±</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠åç«¯æ¡æ¶ï¼Spring Boot 3.5 + MyBatis-Plus</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠åç«¯æ¡æ¶ï¼Vue 3 + Element Plus</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®åºï¼MySQL 8.0</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠ç¼åï¼Redis</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠JDKçæ¬ï¼JDK 25</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠AIææ¯ï¼Claude API / OpenAI APIï¼æºè½å®¢æï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æºå¨å¦ä¹ ï¼TensorFlow / PyTorchï¼é¢æµæ¨¡åï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠OCRï¼ç¾åº¦OCR / Tesseractï¼ææ¡£è¯å«ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å
«ãéªæ¶æ å --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å
«ãéªæ¶æ å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="3000"/><w:gridCol w:w="5000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>éªæ¶é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>éªæ¶æ å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list acceptCriteria as a> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.item}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.criteria}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¹ãéå½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¹ãéå½</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠éå½Aï¼æ°æ®åºè®¾è®¡ææ¡£</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Bï¼æ¥å£è®¾è®¡ææ¡£</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Cï¼UIåå设计</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå½Dï¼æµè¯ç¨ä¾</w:t></w:r></w:p> |
| | | |
| | | </w:body> |
| | | </w:wordDocument> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| | | <?mso-application progid="Word.Document"?> |
| | | <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" |
| | | xmlns:o="urn:schemas-microsoft-com:office:office" |
| | | xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" |
| | | xml:space="preserve"> |
| | | <o:DocumentProperties> |
| | | <o:Title>项ç®è®¡å书</o:Title> |
| | | <o:Author>ç³»ç»çæ</o:Author> |
| | | <o:Created>${docDate}</o:Created> |
| | | </o:DocumentProperties> |
| | | <w:fonts> |
| | | <w:defaultFonts w:ascii="å®ä½" w:fareast="å®ä½" w:h-ansi="å®ä½"/> |
| | | </w:fonts> |
| | | <w:styles> |
| | | <w:style w:type="paragraph" w:styleId="title"> |
| | | <w:name w:val="Title"/> |
| | | <w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:rPr><w:b/><w:size w:val="36"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading1"> |
| | | <w:name w:val="Heading 1"/> |
| | | <w:rPr><w:b/><w:size w:val="28"/></w:rPr> |
| | | </w:style> |
| | | <w:style w:type="paragraph" w:styleId="heading2"> |
| | | <w:name w:val="Heading 2"/> |
| | | <w:rPr><w:b/><w:size w:val="24"/></w:rPr> |
| | | </w:style> |
| | | </w:styles> |
| | | <w:body> |
| | | |
| | | <!-- æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>${projectName} 项ç®è®¡å书</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:pPr><w:jc w:val="center"/></w:pPr> |
| | | <w:r><w:t>çæ¬ï¼${projectVersion}</w:t></w:r> |
| | | <w:r><w:t> </w:t></w:r> |
| | | <w:r><w:t>æ¥æï¼${docDate}</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ãé¡¹ç®æ¦è¿° --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ãé¡¹ç®æ¦è¿°</w:t></w:r> |
| | | </w:p> |
| | | <w:p> |
| | | <w:r><w:t>åºäºè¥ä¾æ¡æ¶å¼åçä¼ä¸çº§äº§ååºå管çç³»ç»ï¼æ¶µçåºå管çãéè´ãéå®ãè´¨æ£ã设å¤ã人äºçæ ¸å¿ä¸å¡æ¨¡åï¼å®ç°ä¼ä¸æ°åå管çã</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <!-- äºãéç¨ç¢è®¡å --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãéç¨ç¢è®¡å</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="1500"/><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/></w:tblGrid> |
| | | |
| | | <!-- 表头 --> |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>éç¨ç¢</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>é¶æ®µå
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯¦ç»æè¿°</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è®¡åæ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>交ä»ç©</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <!-- æ°æ®è¡ --> |
| | | <#list milestones as m> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${m.id}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${m.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${m.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${m.time}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${m.deliverable}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | |
| | | <!-- AIç¸å
³éç¨ç¢ --> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>M10</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AIæºè½å</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æºè½å®¢æã颿µåæãOCRè¯å«</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>第23-26å¨</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AIåè½æ¨¡å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- ä¸ã人å宿 --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¸ã人å宿</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2000"/><w:gridCol w:w="4500"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è§è²</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å§å</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>èè´£</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list team as t> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${t.role}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.name}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${t.duty}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | |
| | | <!-- AIç¸å
³è§è² --> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>AIå·¥ç¨å¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åXX</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>AI模åè®ç»ãæºè½åè½å¼å</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>æ°æ®åæå¸</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å´XX</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>æ°æ®åæã颿µæ¨¡åæå»º</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åãææ¯æ¶æ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åãææ¯æ¶æ</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠åç«¯æ¡æ¶ï¼Spring Boot 3.5 + MyBatis-Plus</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠åç«¯æ¡æ¶ï¼Vue 3 + Element Plus</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>â¢ æ°æ®åºï¼MySQL 8.0</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠ç¼åï¼Redis</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠JDKçæ¬ï¼JDK 25</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- äºãAIæºè½ååè½ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>äºãAIæºè½ååè½</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>æ¬é¡¹ç®å¼å
¥äººå·¥æºè½ææ¯ï¼å®ç°ä»¥ä¸æºè½ååè½ï¼</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.1 AIè¾
å©å³ç</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠æºè½åºåé¢è¦ï¼åºäºå岿°æ®é¢æµåºåéæ±ï¼èªå¨çæè¡¥è´§å»ºè®®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠éå®é¢æµåæï¼å©ç¨æºå¨å¦ä¹ ç®æ³åæéå®è¶å¿ï¼è¾
å©å¶å®éå®çç¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠å¼å¸¸æ£æµï¼èªå¨è¯å«å¼å¸¸æ°æ®ï¼å¦å¼å¸¸åºå
¥åºè®°å½ï¼ï¼åæ¶é¢è¦</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.2 æºè½å®¢æä¸äº¤äº</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠AIæºè½å®¢æï¼éæå¤§è¯è¨æ¨¡åï¼æä¾7x24å°æ¶æºè½é®çæå¡</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠è¯é³è¯å«å½å
¥ï¼æ¯æè¯é³è½¬æåï¼å¿«éå½å
¥è®¢åååºåä¿¡æ¯</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æºè½ææ¡£å¤çï¼OCRè¯å«éè´åãåè´§åççº¸è´¨ææ¡£ï¼èªå¨å½å
¥ç³»ç»</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr> |
| | | <w:r><w:t>5.3 AIææ¯åºç¨æ¶æ</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>⢠大è¯è¨æ¨¡åï¼Claude API / OpenAI APIï¼ç¨äºæºè½é®çåææ¡£çæ</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠æºå¨å¦ä¹ æ¡æ¶ï¼TensorFlow / PyTorchï¼ç¨äºé¢æµæ¨¡åè®ç»</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>⢠OCR弿ï¼Tesseract / ç¾åº¦OCRï¼ç¨äºææ¡£è¯å«</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- è¯å®¡ä¼è®®çºªè¦æ é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="title"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡ä¼è®®çºªè¦</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <!-- ä¼è®®ä¿¡æ¯ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>ä¼è®®ä¿¡æ¯</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>ä¼è®®ä¸»é¢ï¼äº§ååºå管çç³»ç»éæ±è¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®æ¶é´ï¼2026å¹´XæXæ¥ 14:00-16:00</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>ä¼è®®å°ç¹ï¼å
¬å¸ä¼è®®å®¤</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主æäººï¼å¼ XX</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>è®°å½äººï¼æXX</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- åä¼äººå --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>åä¼äººå</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>å¼ XXãæXXãçXXãèµµXXãéXXãåXX</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- è¯å®¡ç»è®º --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>è¯å®¡ç»è®º</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="2000"/><w:gridCol w:w="4000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡é¡¹</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è¯å®¡ç»æ</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>夿³¨</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list reviewResults as r> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${r.item}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${r.result}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${r.remark}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- å¾
åäºé¡¹ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>å¾
åäºé¡¹</w:t></w:r> |
| | | </w:p> |
| | | |
| | | <w:tbl> |
| | | <w:tblPr> |
| | | <w:tblW w:w="9000" w:type="pct"/> |
| | | <w:tblBorders> |
| | | <w:top w:val="single" w:sz="4"/> |
| | | <w:left w:val="single" w:sz="4"/> |
| | | <w:bottom w:val="single" w:sz="4"/> |
| | | <w:right w:val="single" w:sz="4"/> |
| | | <w:insideH w:val="single" w:sz="4"/> |
| | | <w:insideV w:val="single" w:sz="4"/> |
| | | </w:tblBorders> |
| | | </w:tblPr> |
| | | <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4000"/><w:gridCol w:w="2000"/><w:gridCol w:w="2000"/></w:tblGrid> |
| | | |
| | | <w:tr> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>åºå·</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>å¾
åå
容</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>è´è´£äºº</w:t></w:r></w:p> |
| | | </w:tc> |
| | | <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr> |
| | | <w:p><w:r><w:b/><w:t>宿æ¶é´</w:t></w:r></w:p> |
| | | </w:tc> |
| | | </w:tr> |
| | | |
| | | <#list actionItems as a> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </#list> |
| | | |
| | | <!-- AIç¸å
³å¾
å --> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>è°ç AIå¤§æ¨¡åæ¥å£æ¥å
¥æ¹æ¡</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åXX</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>XæXæ¥</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | <w:tr> |
| | | <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>åå¤åºå颿µæ¨¡åè®ç»æ°æ®</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>å´XX</w:t></w:r></w:p></w:tc> |
| | | <w:tc><w:p><w:r><w:t>XæXæ¥</w:t></w:r></w:p></w:tc> |
| | | </w:tr> |
| | | </w:tbl> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- éçé®é¢ --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>éçé®é¢</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>1. ç§»å¨ç«¯æ¯å¦éè¦åæ¥å¼åï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>2. ä¸ç°æERPç³»ç»ç对æ¥èå´å¾
确认</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>3. AIæºè½å®¢æéç¨èªç 模åè¿æ¯ç¬¬ä¸æ¹APIï¼</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>4. æ°æ®éç§ä¸AIæ°æ®å¤ççåè§æ§éè¯ä¼°</w:t></w:r></w:p> |
| | | |
| | | <w:p><w:r><w:t/></w:r></w:p> |
| | | |
| | | <!-- 䏿¬¡ä¼è®® --> |
| | | <w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr> |
| | | <w:r><w:t>䏿¬¡ä¼è®®</w:t></w:r> |
| | | </w:p> |
| | | <w:p><w:r><w:t>æ¶é´ï¼2026å¹´XæXæ¥</w:t></w:r></w:p> |
| | | <w:p><w:r><w:t>主é¢ï¼è®¾è®¡è¯å®¡ä¼è®®</w:t></w:r></w:p> |
| | | |
| | | </w:body> |
| | | </w:wordDocument> |