瀏覽代碼

修改册别接口

CrazyIter 5 年之前
父節點
當前提交
a8c27b6270

+ 2 - 2
TEAMModelOS.SDK/Context/Exception/BizException.cs

@@ -7,7 +7,7 @@ namespace TEAMModelOS.SDK.Context.Exception
         public string message { get; set; } = "error";
         public int code { get; set; } = 1;
         public string devMessage { get; set; }
-        public BizException(int code, String message, string stackTrace) : base(message)
+        public BizException(String message,  int code,  string stackTrace) : base(message)
         {
             if (string.IsNullOrEmpty(stackTrace))
             {
@@ -20,7 +20,7 @@ namespace TEAMModelOS.SDK.Context.Exception
             this.message = message;
             this.code = code;
         }
-        public BizException(int code, String message) : base(message)
+        public BizException( String message,  int code) : base(message)
         {
             this.devMessage = this.StackTrace;
             this.message = message;

+ 147 - 83
TEAMModelOS.Service/Services/PowerPoint/Implement/PowerPointHelper.cs

@@ -3,23 +3,55 @@ using DocumentFormat.OpenXml.Drawing;
 using DocumentFormat.OpenXml.Packaging;
 using DocumentFormat.OpenXml.Presentation;
 using HiTeachCC.Model.PowerPoint;
+using System;
 using System.Collections.Generic;
 using System.Drawing;
+using System.IO;
 using System.Linq;
 using System.Text;
+using System.Threading.Tasks;
 using System.Xml;
+using System.Xml.Linq;
+using System.Xml.XPath;
+using TEAMModelOS.SDK.Context.Constant;
+using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK.Helper.Common.ColorHelper;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
+using TEAMModelOS.SDK.Helper.Security.ShaHash;
+using TEAMModelOS.SDK.Module.AzureBlob.Container;
+using TEAMModelOS.SDK.Module.AzureBlob.Interfaces;
 using ColorMap = DocumentFormat.OpenXml.Presentation.ColorMap;
 using Theme = DocumentFormat.OpenXml.Drawing.Theme;
 
 
 namespace HiTeachCC.Service.PowerPoint.Implement
 {
-    public class PowerPointHelper
+    public static class PowerPointHelper
     {
-        public static XmlNamespaceManager GetXmlnsManager(XmlNameTable nameTable)
+        public  static    XmlNamespaceManager xmlnsManager ;
+        public static XmlNode GetTextByPath(this XmlDocument document , string expression) {
+            return document.SelectSingleNode(expression , xmlnsManager);
+        }
+        public static XmlNode GetTextByPath(this XmlNode node, string expression)
+        {
+            
+            return node.SelectSingleNode(expression, xmlnsManager);
+        }
+       
+
+        public static XmlNodeList GetTextByPathList(this XmlDocument document, string expression)
+        {
+            return document.SelectNodes(expression, xmlnsManager);
+        }
+        public static XmlNodeList GetTextByPathList(this XmlNode node, string expression)
+        {
+            return node.SelectNodes(expression, xmlnsManager);
+        }
+
+
+        static PowerPointHelper()
         {
-            XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(nameTable);
+            xmlnsManager = new XmlNamespaceManager(new NameTable());
             xmlnsManager.AddNamespace("p", "http://schemas.openxmlformats.org/presentationml/2006/main");
             xmlnsManager.AddNamespace("a", "http://schemas.openxmlformats.org/drawingml/2006/main");
             xmlnsManager.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
@@ -50,11 +82,43 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             xmlnsManager.AddNamespace("cs", "http://schemas.microsoft.com/office/drawing/2012/chartStyle");
             xmlnsManager.AddNamespace("thm15", "http://schemas.microsoft.com/office/thememl/2012/main");
             xmlnsManager.AddNamespace("fn", "http://www.w3.org/2005/xpath-functions");
-            return xmlnsManager;
         }
 
 
+      public static async Task<AzureBlobModel>SaveBase64ToBolob(string data, string contentType ,string FolderName ,string fileName , IAzureBlobDBRepository azureBlobDBRepository ) {
+            string fileExt ;
+            if (ContentTypeDict.extdict.TryGetValue(contentType, out string ext))
+            {
+                fileExt = ext;
+            }
+            else
+            {
+                //解决多种扩展名不能获取的
+                string[] sp = contentType.Split("/");
+                fileExt = sp[sp.Length - 1];
+                sp = fileExt.Split("+");
+                fileExt = "." + sp[sp.Length - 1];
+            }
+            //data:image/jpeg;base64,
+            try {
+                if (string.IsNullOrEmpty(fileName))
+                {
+                    Stream stream = new MemoryStream(Convert.FromBase64String(data));
+                    string shaCode = ShaHashHelper.GetSHA1(stream);
+                    fileName = shaCode + fileExt;
+                }
+                else {
+                    if (fileName.Split(".").Length == 1) {
+                        fileName += fileExt;
+                    }
+                }
+                Stream streamBlob = new MemoryStream(Convert.FromBase64String(data));
+                AzureBlobModel model = await azureBlobDBRepository.UploadFileByFolder(streamBlob, FolderName + "/imgs", fileName, "pptx", false);
+                return model;
+            } catch (Exception x) {
 
+                throw new BizException(x.Message);          }
+        }
         public static void GenPPTXShape(XmlNode shapeType)
         {
             string svgPath = "";
@@ -444,16 +508,16 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
         public static string GetFontColor(XmlDocument nodeXml, XmlNode typeNode, XmlDocument slideMasterTextStyles, Dictionary<string, string> colors)
         {
-            var color = nodeXml.SelectSingleNode("//a:rPr/a:solidFill/a:srgbClr/@val", GetXmlnsManager(nodeXml.NameTable));
+            var color = nodeXml.SelectSingleNode("//a:rPr/a:solidFill/a:srgbClr/@val", xmlnsManager);
             if (color == null && typeNode != null)
             {
                 if (typeNode.Value.Equals("title") || typeNode.Value.Equals("subTitle") || typeNode.Value.Equals("ctrTitle"))
                 {
-                    color = slideMasterTextStyles.SelectSingleNode("//p:titleStyle/a:lvl1pPr/a:defRPr/a:solidFill/a:schemeClr/@val", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                    color = slideMasterTextStyles.SelectSingleNode("//p:titleStyle/a:lvl1pPr/a:defRPr/a:solidFill/a:schemeClr/@val", xmlnsManager);
                 }
                 if (typeNode.Value.Equals("body"))
                 {
-                    color = slideMasterTextStyles.SelectSingleNode("//p:bodyStyle/a:lvl1pPr/a:defRPr/a:solidFill/a:schemeClr/@val", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                    color = slideMasterTextStyles.SelectSingleNode("//p:bodyStyle/a:lvl1pPr/a:defRPr/a:solidFill/a:schemeClr/@val", xmlnsManager);
                 }
                 //if (typeNode.Value.Equals("dt") || typeNode.Value.Equals("sldNum"))
                 //{
@@ -462,7 +526,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
             if (color == null && typeNode == null)
             {
-                color = slideMasterTextStyles.SelectSingleNode("//p:otherStyle/a:lvl1pPr/a:defRPr/a:solidFill/a:schemeClr/@val", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                color = slideMasterTextStyles.SelectSingleNode("//p:otherStyle/a:lvl1pPr/a:defRPr/a:solidFill/a:schemeClr/@val", xmlnsManager);
             }
             if (color != null)
             {
@@ -479,23 +543,23 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         {
 
             int fontSize = 0;
-            XmlNode szNode = nodeXml.SelectSingleNode("//a:rPr/@sz", GetXmlnsManager(nodeXml.NameTable));
+            XmlNode szNode = nodeXml.SelectSingleNode("//a:rPr/@sz", xmlnsManager);
             if (szNode == null)
             {
                 if (slideLayoutSpNode != null)
                 {
-                    szNode = slideLayoutSpNode.SelectSingleNode("//p:txBody/a:lstStyle/a:lvl1pPr/a:defRPr/@sz", GetXmlnsManager(slideLayoutSpNode.NameTable));
+                    szNode = slideLayoutSpNode.SelectSingleNode("//p:txBody/a:lstStyle/a:lvl1pPr/a:defRPr/@sz", xmlnsManager);
                 }
             }
             if (szNode == null && typeNode != null)
             {
                 if (typeNode.Value.Equals("title") || typeNode.Value.Equals("subTitle") || typeNode.Value.Equals("ctrTitle"))
                 {
-                    szNode = slideMasterTextStyles.SelectSingleNode("//p:titleStyle/a:lvl1pPr/a:defRPr/@sz", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                    szNode = slideMasterTextStyles.SelectSingleNode("//p:titleStyle/a:lvl1pPr/a:defRPr/@sz", xmlnsManager);
                 }
                 if (typeNode.Value.Equals("body"))
                 {
-                    szNode = slideMasterTextStyles.SelectSingleNode("//p:bodyStyle/a:lvl1pPr/a:defRPr/@sz", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                    szNode = slideMasterTextStyles.SelectSingleNode("//p:bodyStyle/a:lvl1pPr/a:defRPr/@sz", xmlnsManager);
                 }
                 //if (typeNode.Value.Equals("dt") || typeNode.Value.Equals("sldNum"))
                 //{
@@ -504,13 +568,13 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
             if (szNode == null && typeNode == null)
             {
-                szNode = slideMasterTextStyles.SelectSingleNode("//p:otherStyle/a:lvl1pPr/a:defRPr/@sz", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                szNode = slideMasterTextStyles.SelectSingleNode("//p:otherStyle/a:lvl1pPr/a:defRPr/@sz", xmlnsManager);
             }
             if (szNode != null)
             {
                 fontSize = int.Parse(szNode.Value) / 100;
             }
-            XmlNode baseline = nodeXml.SelectSingleNode("//a:rPr/@baseline", GetXmlnsManager(nodeXml.NameTable));
+            XmlNode baseline = nodeXml.SelectSingleNode("//a:rPr/@baseline", xmlnsManager);
             if (baseline != null)
             {
                 fontSize -= 10;
@@ -520,12 +584,12 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         }
         public static string GetFontType(XmlDocument nodeXml, XmlNode typeNode, XmlDocument slideMasterTextStyles, Theme theme)
         {
-            XmlNode typeface = nodeXml.SelectSingleNode("//a:rPr/a:latin/@typeface", GetXmlnsManager(nodeXml.NameTable));
+            XmlNode typeface = nodeXml.SelectSingleNode("//a:rPr/a:latin/@typeface",xmlnsManager);
             if (typeface == null)
             {
                 XmlDocument doc = new XmlDocument();
                 doc.LoadXml(theme.OuterXml);
-                typeface = doc.SelectSingleNode("//a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin/@typeface", GetXmlnsManager(doc.NameTable));
+                typeface = doc.SelectSingleNode("//a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin/@typeface", xmlnsManager);
             }
             if (typeface != null)
             {
@@ -539,7 +603,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         }
         public static string GetFontBold(XmlDocument nodeXml, XmlNode typeNode, XmlDocument slideMasterTextStyles)
         {
-            var FontBold = nodeXml.SelectSingleNode("a:rPr/@b", GetXmlnsManager(nodeXml.NameTable));
+            var FontBold = nodeXml.SelectSingleNode("a:rPr/@b",xmlnsManager);
             if (FontBold != null)
             {
                 if (FontBold.Value.Equals("1"))
@@ -560,7 +624,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         }
         public static string GetFontItalic(XmlDocument nodeXml, XmlNode typeNode, XmlDocument slideMasterTextStyles)
         {
-            var FontBold = nodeXml.SelectSingleNode("a:rPr/@i", GetXmlnsManager(nodeXml.NameTable));
+            var FontBold = nodeXml.SelectSingleNode("a:rPr/@i",xmlnsManager);
             if (FontBold != null)
             {
                 if (FontBold.Value.Equals("1"))
@@ -581,7 +645,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         }
         public static string GetFontDecoration(XmlDocument nodeXml, XmlNode typeNode, XmlDocument slideMasterTextStyles)
         {
-            var FontBold = nodeXml.SelectSingleNode("a:rPr/@u", GetXmlnsManager(nodeXml.NameTable));
+            var FontBold = nodeXml.SelectSingleNode("a:rPr/@u",xmlnsManager);
             if (FontBold != null)
             {
                 if (FontBold.Value.Equals("sng"))
@@ -602,7 +666,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         }
         public static string GetTextVerticalAlign(XmlDocument nodeXml, XmlNode typeNode, XmlDocument slideMasterTextStyles)
         {
-            var baseline = nodeXml.SelectSingleNode("a:rPr/@baseline", GetXmlnsManager(nodeXml.NameTable));
+            var baseline = nodeXml.SelectSingleNode("a:rPr/@baseline",xmlnsManager);
             if (baseline != null)
             {
                 return int.Parse(baseline.Value) / 1000 + "%";
@@ -626,21 +690,21 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             // From slide
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(nodeXml);
-            XmlNode nofillNode = doc.SelectSingleNode("//p:spPr/a:noFill", GetXmlnsManager(doc.NameTable));
+            XmlNode nofillNode = doc.SelectSingleNode("//p:spPr/a:noFill", xmlnsManager);
             if (nofillNode != null)
             {
                 return new Model.PowerPoint.Fill() { Type = 0, };
             }
             Model.PowerPoint.Fill fill = new Model.PowerPoint.Fill();
             string fillColor = null;
-            XmlNode fillNode = doc.SelectSingleNode("//p:spPr/a:solidFill/a:srgbClr/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode fillNode = doc.SelectSingleNode("//p:spPr/a:solidFill/a:srgbClr/@val", xmlnsManager);
             if (fillNode == null)
             {
-                fillNode = doc.SelectSingleNode("//p:spPr/a:solidFill/a:schemeClr/@val", GetXmlnsManager(doc.NameTable));
+                fillNode = doc.SelectSingleNode("//p:spPr/a:solidFill/a:schemeClr/@val", xmlnsManager);
             }
             if (fillNode == null)
             {
-                fillNode = doc.SelectSingleNode("//p:style/a:fillRef/a:schemeClr/@val", GetXmlnsManager(doc.NameTable));
+                fillNode = doc.SelectSingleNode("//p:style/a:fillRef/a:schemeClr/@val", xmlnsManager);
             }
             if (fillNode != null)
             {
@@ -653,7 +717,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     fillColor = fillNode.Value;
                 }
 
-                var node = doc.SelectSingleNode("//p:spPr/a:solidFill/a:schemeClr | //p:style/a:fillRef/a:schemeClr", GetXmlnsManager(doc.NameTable));
+                var node = doc.SelectSingleNode("//p:spPr/a:solidFill/a:schemeClr | //p:style/a:fillRef/a:schemeClr", xmlnsManager);
                 if (node != null && node.HasChildNodes)
                 {
                     //调和颜色
@@ -678,21 +742,21 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(nodeXml);
-            XmlNode borderw = doc.SelectSingleNode("//p:spPr/a:ln/@w", GetXmlnsManager(doc.NameTable));
+            XmlNode borderw = doc.SelectSingleNode("//p:spPr/a:ln/@w", xmlnsManager);
             if (borderw != null)
             {
                 borderWidth = int.Parse(borderw.Value) / 12700;
             }
             //边框颜色
             string borderColor = null;
-            XmlNode borderc = doc.SelectSingleNode("//p:spPr/a:ln/a:solidFill/a:srgbClr/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode borderc = doc.SelectSingleNode("//p:spPr/a:ln/a:solidFill/a:srgbClr/@val", xmlnsManager);
             if (borderc == null)
             {
-                borderc = doc.SelectSingleNode("//p:spPr/a:ln/a:solidFill/a:schemeClr/@val", GetXmlnsManager(doc.NameTable));
+                borderc = doc.SelectSingleNode("//p:spPr/a:ln/a:solidFill/a:schemeClr/@val", xmlnsManager);
             }
             if (borderc == null)
             {
-                borderc = doc.SelectSingleNode("//p:style/a:lnRef/a:schemeClr/@val", GetXmlnsManager(doc.NameTable));
+                borderc = doc.SelectSingleNode("//p:style/a:lnRef/a:schemeClr/@val", xmlnsManager);
             }
             if (borderc != null)
             {
@@ -704,7 +768,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 {
                     borderColor = borderc.Value;
                 }
-                var node = doc.SelectSingleNode("//p:style/a:lnRef/a:schemeClr | //p:spPr/a:ln/a:solidFill/a:schemeClr", GetXmlnsManager(doc.NameTable));
+                var node = doc.SelectSingleNode("//p:style/a:lnRef/a:schemeClr | //p:spPr/a:ln/a:solidFill/a:schemeClr", xmlnsManager);
                 if (node != null && node.HasChildNodes)
                 {
                     //调和颜色
@@ -713,7 +777,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
 
             //边框类型
-            XmlNode borderT = doc.SelectSingleNode("//p:spPr/a:ln/a:prstDash/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode borderT = doc.SelectSingleNode("//p:spPr/a:ln/a:prstDash/@val", xmlnsManager);
             var strokeDasharray = "0";
             var borderType = "";
             if (borderT != null)
@@ -805,53 +869,53 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             TEAMModelOS.SDK.Helper.Common.ColorHelper.ColorConverter converter = new TEAMModelOS.SDK.Helper.Common.ColorHelper.ColorConverter();
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(nodeXml);
-            XmlNode lumMod = doc.SelectSingleNode("//a:lumMod/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode lumMod = doc.SelectSingleNode("//a:lumMod/@val", xmlnsManager);
             if (lumMod != null)
             {
                 colorHex = converter.SetLuminanceMod(colorHex, double.Parse(lumMod.Value));
             }
-            XmlNode lumOff = doc.SelectSingleNode("//a:lumOff/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode lumOff = doc.SelectSingleNode("//a:lumOff/@val", xmlnsManager);
             if (lumOff != null)
             {
                 colorHex = converter.SetLuminanceOff(colorHex, double.Parse(lumOff.Value));
             }
-            XmlNode satMod = doc.SelectSingleNode("//a:satMod/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode satMod = doc.SelectSingleNode("//a:satMod/@val", xmlnsManager);
             if (satMod != null)
             {
                 colorHex = converter.SetSaturationMod(colorHex, double.Parse(satMod.Value));
             }
-            XmlNode satOff = doc.SelectSingleNode("//a:satOff/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode satOff = doc.SelectSingleNode("//a:satOff/@val", xmlnsManager);
             if (satOff != null)
             {
                 colorHex = converter.SetSaturationOff(colorHex, double.Parse(satOff.Value));
             }
-            XmlNode hueOff = doc.SelectSingleNode("//a:hueOff/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode hueOff = doc.SelectSingleNode("//a:hueOff/@val", xmlnsManager);
             if (hueOff != null)
             {
                 colorHex = converter.SetHueOff(colorHex, double.Parse(hueOff.Value));
             }
-            XmlNode hueMod = doc.SelectSingleNode("//a:hueMod/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode hueMod = doc.SelectSingleNode("//a:hueMod/@val", xmlnsManager);
             if (hueMod != null)
             {
                 colorHex = converter.SetHueMod(colorHex, double.Parse(hueMod.Value));
             }
-            XmlNode alphaOff = doc.SelectSingleNode("//a:alphaOff/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode alphaOff = doc.SelectSingleNode("//a:alphaOff/@val", xmlnsManager);
             if (alphaOff != null)
             {
                 // Color color= ColorTranslator.FromHtml("#" + colorHex);
                 //   color = Color.FromArgb(byte.Parse(int.Parse(alpha.Value)/100000+""),color.R,color.G,color.B);
             }
-            XmlNode shade = doc.SelectSingleNode("//a:shade/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode shade = doc.SelectSingleNode("//a:shade/@val", xmlnsManager);
             if (shade != null)
             {
                 colorHex = converter.SetShade(colorHex, double.Parse(shade.Value));
             }
-            XmlNode tint = doc.SelectSingleNode("//a:tint/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode tint = doc.SelectSingleNode("//a:tint/@val", xmlnsManager);
             if (tint != null)
             {
                 colorHex = converter.SetTint(colorHex, double.Parse(tint.Value));
             }
-            XmlNode alpha = doc.SelectSingleNode("//a:alpha/@val", GetXmlnsManager(doc.NameTable));
+            XmlNode alpha = doc.SelectSingleNode("//a:alpha/@val", xmlnsManager);
             if (alpha != null)
             {
                 // Color color= ColorTranslator.FromHtml("#" + colorHex);
@@ -888,13 +952,13 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         {
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(nodeXml);
-            XmlNode xfrm = doc.SelectSingleNode("//a:xfrm", GetXmlnsManager(doc.NameTable));
+            XmlNode xfrm = doc.SelectSingleNode("//a:xfrm", xmlnsManager);
             if (xfrm == null)
             {
-                xfrm = slideLayoutSpNode.SelectSingleNode("//a:xfrm", GetXmlnsManager(slideLayoutSpNode.NameTable));
+                xfrm = slideLayoutSpNode.SelectSingleNode("//a:xfrm", xmlnsManager);
                 if (xfrm == null)
                 {
-                    xfrm = slideMasterSpNode.SelectSingleNode("//a:xfrm", GetXmlnsManager(slideMasterSpNode.NameTable));
+                    xfrm = slideMasterSpNode.SelectSingleNode("//a:xfrm",xmlnsManager);
                 }
 
             }
@@ -917,33 +981,33 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             //XmlDocument doc = new XmlDocument();
             //doc.LoadXml(nodeXml);
             BuChar bchar = new BuChar();
-            // XmlNode pPr = nodeXml.SelectSingleNode("//a:pPr", GetXmlnsManager(nodeXml.NameTable));
+            // XmlNode pPr = nodeXml.SelectSingleNode("//a:pPr",xmlnsManager);
             int lvl = 0;
-            XmlNode lvlNode = nodeXml.SelectSingleNode("//a:pPr/@lvl", GetXmlnsManager(nodeXml.NameTable));
+            XmlNode lvlNode = nodeXml.SelectSingleNode("//a:pPr/@lvl",xmlnsManager);
             if (lvlNode != null)
             {
                 lvl = int.Parse(lvlNode.Value);
             }
-            var buCharNode = nodeXml.SelectSingleNode("//a:pPr/a:buChar/@char", GetXmlnsManager(nodeXml.NameTable));
+            var buCharNode = nodeXml.SelectSingleNode("//a:pPr/a:buChar/@char",xmlnsManager);
             if (buCharNode != null)
             {
-                XmlNode buFontNode = nodeXml.SelectSingleNode("//a:pPr/a:buFont", GetXmlnsManager(nodeXml.NameTable));
+                XmlNode buFontNode = nodeXml.SelectSingleNode("//a:pPr/a:buFont",xmlnsManager);
                 if (buFontNode != null)
                 {
                     var marginLeft = 328600 * 96 / 914400 * lvl;
                     var marginRight = 0;
                     var typeface = "";
-                    XmlNode marLNode = nodeXml.SelectSingleNode("//a:pPr/@marL", GetXmlnsManager(nodeXml.NameTable));
+                    XmlNode marLNode = nodeXml.SelectSingleNode("//a:pPr/@marL",xmlnsManager);
                     if (marLNode != null)
                     {
                         marginLeft = int.Parse(marLNode.Value) * 96 / 914400;
                     }
-                    XmlNode pitchFamilyNode = nodeXml.SelectSingleNode("//a:pPr/a:buFont/@pitchFamily", GetXmlnsManager(nodeXml.NameTable));
+                    XmlNode pitchFamilyNode = nodeXml.SelectSingleNode("//a:pPr/a:buFont/@pitchFamily",xmlnsManager);
                     if (pitchFamilyNode != null)
                     {
                         marginRight = int.Parse(pitchFamilyNode.Value);
                     }
-                    XmlNode typefaceNode = nodeXml.SelectSingleNode("//a:pPr/a:buFont/@typeface", GetXmlnsManager(nodeXml.NameTable));
+                    XmlNode typefaceNode = nodeXml.SelectSingleNode("//a:pPr/a:buFont/@typeface",xmlnsManager);
                     if (typefaceNode != null)
                     {
                         typeface = typefaceNode.Value;
@@ -966,7 +1030,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             if (string.IsNullOrEmpty(bchar.Buchar) && typeNode != null && typeNode.Value.Equals("body"))
             {
                 string bucharPath = "//p:bodyStyle/a:lvl" + (lvl + 1) + "pPr/a:buChar/@char";
-                XmlNode buchar = SlideMasterTextStyles.SelectSingleNode(bucharPath, GetXmlnsManager(SlideMasterTextStyles.NameTable));
+                XmlNode buchar = SlideMasterTextStyles.SelectSingleNode(bucharPath,xmlnsManager);
                 if (buchar != null)
                 {
                     bchar.Buchar = buchar.Value;
@@ -976,7 +1040,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             if (string.IsNullOrEmpty(bchar.Typeface) && typeNode != null && typeNode.Value.Equals("body"))
             {
                 string facePath = "//p:bodyStyle/a:lvl" + (lvl + 1) + "pPr/a:buFont/@typeface";
-                XmlNode face = SlideMasterTextStyles.SelectSingleNode(facePath, GetXmlnsManager(SlideMasterTextStyles.NameTable));
+                XmlNode face = SlideMasterTextStyles.SelectSingleNode(facePath,xmlnsManager);
 
                 if (face != null)
                 {
@@ -987,7 +1051,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             if (bchar.FontSize == 0 && typeNode != null && (typeNode.Value.Equals("body") || typeNode.Value.Equals("sldNum")))
             {
                 string sizePath = "//p:bodyStyle/a:lvl" + (lvl + 1) + "pPr/a:defRPr/@sz";
-                XmlNode size = SlideMasterTextStyles.SelectSingleNode(sizePath, GetXmlnsManager(SlideMasterTextStyles.NameTable));
+                XmlNode size = SlideMasterTextStyles.SelectSingleNode(sizePath,xmlnsManager);
 
                 if (sizePath != null)
                 {
@@ -999,7 +1063,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             if (hasBuChar)
             {
                 string sizePath = "//p:bodyStyle/a:lvl" + (lvl + 1) + "pPr/a:defRPr/@sz";
-                XmlNode size = SlideMasterTextStyles.SelectSingleNode(sizePath, GetXmlnsManager(SlideMasterTextStyles.NameTable));
+                XmlNode size = SlideMasterTextStyles.SelectSingleNode(sizePath,xmlnsManager);
 
                 if (sizePath != null)
                 {
@@ -1007,14 +1071,14 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
                 }
                 string facePath = "//p:bodyStyle/a:lvl" + (lvl + 1) + "pPr/a:buFont/@typeface";
-                XmlNode face = SlideMasterTextStyles.SelectSingleNode(facePath, GetXmlnsManager(SlideMasterTextStyles.NameTable));
+                XmlNode face = SlideMasterTextStyles.SelectSingleNode(facePath,xmlnsManager);
 
                 if (face != null)
                 {
                     bchar.Typeface = face.Value;
                 }
                 string bucharPath = "//p:bodyStyle/a:lvl" + (lvl + 1) + "pPr/a:buChar/@char";
-                XmlNode buchar = SlideMasterTextStyles.SelectSingleNode(bucharPath, GetXmlnsManager(SlideMasterTextStyles.NameTable));
+                XmlNode buchar = SlideMasterTextStyles.SelectSingleNode(bucharPath,xmlnsManager);
                 if (buchar != null)
                 {
                     bchar.Buchar = buchar.Value;
@@ -1043,17 +1107,17 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         {
             //XmlDocument doc = new XmlDocument();
             //doc.LoadXml(nodeXml);
-            XmlNode algn = nodeXml.SelectSingleNode("//a:pPr/@algn", GetXmlnsManager(nodeXml.NameTable));
+            XmlNode algn = nodeXml.SelectSingleNode("//a:pPr/@algn",xmlnsManager);
             if (algn == null)
             {
                 if (slideLayoutSpNode != null)
                 {
-                    algn = slideLayoutSpNode.SelectSingleNode("//p:txBody/a:p/a:pPr/@algn", GetXmlnsManager(slideLayoutSpNode.NameTable));
+                    algn = slideLayoutSpNode.SelectSingleNode("//p:txBody/a:p/a:pPr/@algn", xmlnsManager);
                 }
 
                 if (algn == null && slideMasterSpNode != null)
                 {
-                    algn = slideMasterSpNode.SelectSingleNode("//p:txBody/a:p/a:pPr/@algn", GetXmlnsManager(slideMasterSpNode.NameTable));
+                    algn = slideMasterSpNode.SelectSingleNode("//p:txBody/a:p/a:pPr/@algn",xmlnsManager);
                 }
                 if (algn == null && typeNode != null)
                 {
@@ -1063,14 +1127,14 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                         case "subTitle":
                         case "ctrTitle":
                             //doc.LoadXml(slideMasterStyle.TypeTable.OuterXml);
-                            algn = slideMasterTextStyles.SelectSingleNode("//p:titleStyle/a:lvl1pPr/@algn", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                            algn = slideMasterTextStyles.SelectSingleNode("//p:titleStyle/a:lvl1pPr/@algn",xmlnsManager);
                             break;
                         case "body":
-                            algn = slideMasterTextStyles.SelectSingleNode("//p:bodyStyle/a:lvl1pPr/@algn", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                            algn = slideMasterTextStyles.SelectSingleNode("//p:bodyStyle/a:lvl1pPr/@algn",xmlnsManager);
                             break;
                         default:
                             //  doc.LoadXml(slideMasterStyle.TypeTable.OuterXml);
-                            algn = slideMasterTextStyles.SelectSingleNode("//p:otherStyle/a:lvl1pPr/@algn", GetXmlnsManager(slideMasterTextStyles.NameTable));
+                            algn = slideMasterTextStyles.SelectSingleNode("//p:otherStyle/a:lvl1pPr/@algn",xmlnsManager);
                             break;
                     }
                 }
@@ -1110,16 +1174,16 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(xmlNode);
 
-            XmlNode anchor = doc.SelectSingleNode("//p:txBody/a:bodyPr/@anchor", GetXmlnsManager(doc.NameTable));
+            XmlNode anchor = doc.SelectSingleNode("//p:txBody/a:bodyPr/@anchor", xmlnsManager);
             if (anchor == null)
             {
                 if (slideLayoutSpNode != null)
                 {
-                    anchor = slideLayoutSpNode.SelectSingleNode("//p:txBody/a:bodyPr/@anchor", GetXmlnsManager(slideLayoutSpNode.NameTable));
+                    anchor = slideLayoutSpNode.SelectSingleNode("//p:txBody/a:bodyPr/@anchor", xmlnsManager);
                 }
                 if (anchor == null && slideMasterSpNode != null)
                 {
-                    anchor = slideMasterSpNode.SelectSingleNode("//p:txBody/a:bodyPr/@anchor", GetXmlnsManager(slideMasterSpNode.NameTable));
+                    anchor = slideMasterSpNode.SelectSingleNode("//p:txBody/a:bodyPr/@anchor",xmlnsManager);
                 }
             }
             if (anchor != null)
@@ -1156,7 +1220,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         {
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(xml);
-            XmlNode txStyles = doc.SelectSingleNode("//p:txStyles", GetXmlnsManager(doc.NameTable));
+            XmlNode txStyles = doc.SelectSingleNode("//p:txStyles", xmlnsManager);
             doc.LoadXml(txStyles.OuterXml);
             return doc;
         }
@@ -1170,7 +1234,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         {
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(xml);
-            XmlNodeList spTreeNodes = doc.SelectNodes("//p:cSld/p:spTree/child::*", GetXmlnsManager(doc.NameTable));
+            XmlNodeList spTreeNodes = doc.SelectNodes("//p:cSld/p:spTree/child::*", xmlnsManager);
 
             XmlDocument idTable = new XmlDocument();
             //添加根节点
@@ -1203,9 +1267,9 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     }
                     XmlDocument docNode = new XmlDocument();
                     docNode.LoadXml(spnode.OuterXml);
-                    XmlNode id = spnode.SelectSingleNode("./p:nvSpPr/p:cNvPr/@id", GetXmlnsManager(docNode.NameTable));
-                    XmlNode idx = spnode.SelectSingleNode("./p:nvSpPr/p:nvPr/p:ph/@idx", GetXmlnsManager(docNode.NameTable));
-                    XmlNode type = spnode.SelectSingleNode("./p:nvSpPr/p:nvPr/p:ph/@type", GetXmlnsManager(docNode.NameTable));
+                    XmlNode id = spnode.SelectSingleNode("./p:nvSpPr/p:cNvPr/@id", xmlnsManager);
+                    XmlNode idx = spnode.SelectSingleNode("./p:nvSpPr/p:nvPr/p:ph/@idx", xmlnsManager);
+                    XmlNode type = spnode.SelectSingleNode("./p:nvSpPr/p:nvPr/p:ph/@type", xmlnsManager);
 
                     var cnode = spnode.ChildNodes;
                     StringBuilder builder = new StringBuilder();
@@ -1275,7 +1339,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             http://msdn.microsoft.com/en-us/library/cc964302(v=office.12).aspx
              */
             //使用xPath选择需要的节点
-            XmlNode node_sld = doc.SelectSingleNode("//p:sld/p:cSld/p:bg/p:bgPr/a:solidFill", GetXmlnsManager(doc.NameTable));
+            XmlNode node_sld = doc.SelectSingleNode("//p:sld/p:cSld/p:bg/p:bgPr/a:solidFill", xmlnsManager);
             if (node_sld != null)
             {
                 SolidFill compositeElement = new SolidFill(node_sld.OuterXml);
@@ -1290,7 +1354,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 return fill;
             }
            
-            node_sld = doc.SelectSingleNode("//p:sld/p:cSld/p:bg/p:bgPr/a:blipFill", GetXmlnsManager(doc.NameTable));
+            node_sld = doc.SelectSingleNode("//p:sld/p:cSld/p:bg/p:bgPr/a:blipFill", xmlnsManager);
             if (node_sld != null)
             {
                 DocumentFormat.OpenXml.Drawing.BlipFill blipFill = new DocumentFormat.OpenXml.Drawing.BlipFill(node_sld.OuterXml);
@@ -1325,7 +1389,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 styleColors = colors;
             }
             doc.LoadXml(SlideLayoutXml);
-            XmlNode node_sldLayout = doc.SelectSingleNode("//p:sldLayout/p:cSld/p:bg/p:bgPr/a:solidFill", GetXmlnsManager(doc.NameTable));
+            XmlNode node_sldLayout = doc.SelectSingleNode("//p:sldLayout/p:cSld/p:bg/p:bgPr/a:solidFill", xmlnsManager);
             if (node_sldLayout != null)
             {
                 SolidFill compositeElement = new SolidFill(node_sldLayout.OuterXml);
@@ -1339,7 +1403,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 new Model.PowerPoint.Fill { Type = 1, Color = colorHex };
                 return fill;
             }
-            node_sldLayout = doc.SelectSingleNode("//p:sldLayout/p:cSld/p:bg/p:bgRef", GetXmlnsManager(doc.NameTable));
+            node_sldLayout = doc.SelectSingleNode("//p:sldLayout/p:cSld/p:bg/p:bgRef", xmlnsManager);
             if (node_sldLayout != null)
             {
                 BackgroundStyleReference compositeElement = new BackgroundStyleReference(node_sldLayout.OuterXml);
@@ -1355,7 +1419,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
             string slideMasterXml = slideMaster.OuterXml;
             doc.LoadXml(slideMasterXml);
-            XmlNode node_sldMaster = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgPr/a:solidFill", GetXmlnsManager(doc.NameTable));
+            XmlNode node_sldMaster = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgPr/a:solidFill", xmlnsManager);
             if (node_sldMaster != null)
             {
                 SolidFill compositeElement = new SolidFill(node_sldMaster.OuterXml);
@@ -1368,7 +1432,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 new Model.PowerPoint.Fill { Type = 1, Color = colorHex };
                 return fill;
             }
-            node_sldMaster = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgRef", GetXmlnsManager(doc.NameTable));
+            node_sldMaster = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgRef", xmlnsManager);
             if (node_sldMaster != null)
             {
                 BackgroundStyleReference compositeElement = new BackgroundStyleReference(node_sldMaster.OuterXml);
@@ -1382,7 +1446,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 return fill;
             }
             doc.LoadXml(slideMaster.OuterXml);
-            node_sld = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgPr/a:blipFill", GetXmlnsManager(doc.NameTable));
+            node_sld = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgPr/a:blipFill", xmlnsManager);
             if (node_sld != null)
             {
               
@@ -1418,14 +1482,14 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
         private static FillStyle GetFillStyle(XmlDocument doc)
         {
-            XmlNode fillRect_node = doc.SelectSingleNode("//a:stretch/a:fillRect", GetXmlnsManager(doc.NameTable));
+            XmlNode fillRect_node = doc.SelectSingleNode("//a:stretch/a:fillRect", xmlnsManager);
             FillStyle fillStyle = new FillStyle();
             if (fillRect_node != null)
             {
-                XmlNode left = doc.SelectSingleNode("//a:stretch/a:fillRect/@l", GetXmlnsManager(doc.NameTable));
-                XmlNode top = doc.SelectSingleNode("//a:stretch/a:fillRect/@t", GetXmlnsManager(doc.NameTable));
-                XmlNode right = doc.SelectSingleNode("//a:stretch/a:fillRect/@r", GetXmlnsManager(doc.NameTable));
-                XmlNode bottom = doc.SelectSingleNode("//a:stretch/a:fillRect/@b", GetXmlnsManager(doc.NameTable));
+                XmlNode left = doc.SelectSingleNode("//a:stretch/a:fillRect/@l", xmlnsManager);
+                XmlNode top = doc.SelectSingleNode("//a:stretch/a:fillRect/@t", xmlnsManager);
+                XmlNode right = doc.SelectSingleNode("//a:stretch/a:fillRect/@r", xmlnsManager);
+                XmlNode bottom = doc.SelectSingleNode("//a:stretch/a:fillRect/@b", xmlnsManager);
                 if (left != null)
                 {
                     fillStyle.Left = int.Parse(left.Value);

+ 40 - 36
TEAMModelOS.Service/Services/PowerPoint/Implement/PowerPointService.cs

@@ -12,6 +12,7 @@ using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
 using System.Xml;
+using System.Xml.Linq;
 using TEAMModelOS.SDK.Context.Constant;
 using TEAMModelOS.SDK.Context.Constant.Common;
 using TEAMModelOS.SDK.Context.Exception;
@@ -39,7 +40,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
     {
         private readonly IAzureBlobDBRepository azureBlobDBRepository;
         private readonly IAzureTableDBRepository azureTableDBRepository;
-        public PowerPointService(IAzureBlobDBRepository _azureBlobDBRepository, IAzureTableDBRepository _azureTableDBRepository)
+        public PowerPointService(IAzureBlobDBRepository _azureBlobDBRepository , IAzureTableDBRepository _azureTableDBRepository)
         {
             azureBlobDBRepository = _azureBlobDBRepository;
             azureTableDBRepository = _azureTableDBRepository;
@@ -64,7 +65,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
             else
             {
-                throw new BizException(500, "file type does not support!");
+                throw new BizException(  "file type does not support!",  500);
             }
         }
         /// <summary>
@@ -75,8 +76,11 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         public async Task<Dictionary<string, object>> ProcessPPT(IFormFile file, Dictionary<string, object> resdict)
         {
             string shaCode = ShaHashHelper.GetSHA1(file.OpenReadStream());
+
+
             using (PresentationDocument presentationDocument = PresentationDocument.Open(file.OpenReadStream(), false))
             {
+                XDocument document =   presentationDocument.ToFlatOpcDocument();
                 if (presentationDocument == null)
                 {
                     throw new ArgumentNullException("presentationDocument");
@@ -430,7 +434,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 {
                     XmlDocument doc = new XmlDocument();
                     doc.LoadXml(element.OuterXml);
-                    XmlNode userDrawnNode = doc.SelectSingleNode("//p:nvPr//@userDrawn", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                    XmlNode userDrawnNode = doc.SelectSingleNode("//p:nvPr//@userDrawn", PowerPointHelper.xmlnsManager);
                     //处理模板中有无背编辑过的元素
                     if (userDrawnNode != null && userDrawnNode.Value.Equals("1"))
                     {
@@ -468,10 +472,10 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(element.OuterXml);
             //获取当前节点的相关样式属性
-            XmlNode idNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@id", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-            XmlNode nameNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@name", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-            XmlNode idxNode = doc.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@idx", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-            XmlNode typeNode = doc.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+            XmlNode idNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@id", PowerPointHelper.xmlnsManager);
+            XmlNode nameNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@name", PowerPointHelper.xmlnsManager);
+            XmlNode idxNode = doc.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@idx", PowerPointHelper.xmlnsManager);
+            XmlNode typeNode = doc.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.xmlnsManager);
             XmlDocument slideLayoutSpNode = null;
             XmlDocument slideMasterSpNode = null;
             if (typeNode != null)
@@ -485,7 +489,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
 
                 doc.LoadXml(slideLayoutTables.TypeTable.OuterXml);
-                XmlNodeList types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                XmlNodeList types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.xmlnsManager);
                 if (types != null)
                 {
                     int size = types.Count;
@@ -493,7 +497,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     {
                         XmlNode node = types.Item(i);
                         doc.LoadXml(node.OuterXml);
-                        XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                        XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.xmlnsManager);
                         if (id.Value.Equals(typeNode.Value))
                         {
                             XmlDocument nodeDoc = new XmlDocument();
@@ -504,7 +508,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     }
                 }
                 doc.LoadXml(slideMasterTables.TypeTable.OuterXml);
-                types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.xmlnsManager);
                 if (types != null)
                 {
                     int size = types.Count;
@@ -512,7 +516,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     {
                         XmlNode node = types.Item(i);
                         doc.LoadXml(node.OuterXml);
-                        XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                        XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.xmlnsManager);
                         if (id.Value.Equals(typeNode.Value))
                         {
                             XmlDocument nodeDoc = new XmlDocument();
@@ -530,7 +534,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     //slideLayoutSpNode = slideLayoutTables.IdxTable;
                     //slideMasterSpNode = slideMasterTables.IdxTable;
                     doc.LoadXml(slideLayoutTables.IdxTable.OuterXml);
-                    XmlNodeList types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                    XmlNodeList types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.xmlnsManager);
                     if (types != null)
                     {
                         int size = types.Count;
@@ -538,7 +542,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                         {
                             XmlNode node = types.Item(i);
                             doc.LoadXml(node.OuterXml);
-                            XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                            XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.xmlnsManager);
                             if (id.Value.Equals(idxNode.Value))
                             {
                                 XmlDocument nodeDoc = new XmlDocument();
@@ -549,7 +553,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                         }
                     }
                     doc.LoadXml(slideMasterTables.IdxTable.OuterXml);
-                    types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                    types = doc.SelectNodes("//xmlDatas/xmlData", PowerPointHelper.xmlnsManager);
                     if (types != null)
                     {
                         int size = types.Count;
@@ -557,7 +561,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                         {
                             XmlNode node = types.Item(i);
                             doc.LoadXml(node.OuterXml);
-                            XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                            XmlNode id = doc.SelectSingleNode("./xmlData/@id", PowerPointHelper.xmlnsManager);
                             if (id.Value.Equals(idxNode.Value))
                             {
                                 XmlDocument nodeDoc = new XmlDocument();
@@ -573,14 +577,14 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             {
                 if (slideLayoutSpNode != null)
                 {
-                    typeNode = slideLayoutSpNode.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.GetXmlnsManager(slideLayoutSpNode.NameTable));
+                    typeNode = slideLayoutSpNode.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.xmlnsManager);
                 }
                 //getTextByPathList(slideLayoutSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]);
                 if (typeNode == null)
                 {
                     if (slideMasterSpNode != null)
                     {
-                        typeNode = slideMasterSpNode.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.GetXmlnsManager(slideMasterSpNode.NameTable));
+                        typeNode = slideMasterSpNode.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.xmlnsManager);
                     }
                     // typeNode = getTextByPathList(slideMasterSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]);
                 }
@@ -629,15 +633,15 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(element.OuterXml);
-            XmlNode shapeType = doc.SelectSingleNode("//p:spPr/a:prstGeom/@prst", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+            XmlNode shapeType = doc.SelectSingleNode("//p:spPr/a:prstGeom/@prst", PowerPointHelper.xmlnsManager);
             if (shapeType != null)
             {
                 //常规图形
                 HiTeachCC.Model.PowerPoint.Position shapePosition = PowerPointHelper.GetPosition(element.OuterXml, slideLayoutSpNode, slideMasterSpNode);
                 Border border = PowerPointHelper.GetBorder(element.OuterXml, false, colors);
                 HiTeachCC.Model.PowerPoint.Fill fill = PowerPointHelper.GetShapeFill(element.OuterXml, colors);
-                //var headEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:headEnd/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-                // var tailEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:tailEnd/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                //var headEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:headEnd/@type", PowerPointHelper.xmlnsManager);
+                // var tailEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:tailEnd/@type", PowerPointHelper.xmlnsManager);
                 PowerPointHelper.GenPPTXShape(shapeType);
                 // shapePosition.Index = index;
                 shape.Position = shapePosition;
@@ -648,13 +652,13 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 shape.ShapeType = shapeType.Value;
                 shape.Index = index++;
                 // shape.VertAlign = PowerPointHelper.GetVerticalAlign(element, slideLayoutSpNode, slideMasterSpNode, typeNode, slideMasterTextStyles);
-                XmlNode avLstNode = doc.SelectSingleNode("//p:spPr/a:prstGeom/a:avLst", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                XmlNode avLstNode = doc.SelectSingleNode("//p:spPr/a:prstGeom/a:avLst", PowerPointHelper.xmlnsManager);
                 shape.ShapeGuides = GenShapeGuide(avLstNode);
                 return shape;
             }
             else
             {
-                shapeType = doc.SelectSingleNode("//p:spPr/a:custGeom", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                shapeType = doc.SelectSingleNode("//p:spPr/a:custGeom", PowerPointHelper.xmlnsManager);
                 if (shapeType != null)
                 {
                     //自定义图形 画线 轨迹
@@ -663,8 +667,8 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     HiTeachCC.Model.PowerPoint.Position shapePosition = PowerPointHelper.GetPosition(element.OuterXml, slideLayoutSpNode, slideMasterSpNode);
                     Border border = PowerPointHelper.GetBorder(element.OuterXml, false, colors);
                     HiTeachCC.Model.PowerPoint.Fill fill = PowerPointHelper.GetShapeFill(element.OuterXml, colors);
-                    var headEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:headEnd/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-                    var tailEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:tailEnd/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                    var headEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:headEnd/@type", PowerPointHelper.xmlnsManager);
+                    var tailEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:tailEnd/@type", PowerPointHelper.xmlnsManager);
                     PowerPointHelper.GenPPTXShape(shapeType);
                     shape.Position = shapePosition;
                     shape.Paragraph = GenTextBody(element.OuterXml, slideLayoutSpNode, slideMasterSpNode, typeNode,
@@ -675,7 +679,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     shape.ShapeType = "custom";
                     shape.Index = index++;
                     //shape.VertAlign = PowerPointHelper.GetVerticalAlign(element, slideLayoutSpNode, slideMasterSpNode, typeNode, slideMasterTextStyles);
-                    var pathNode = doc.SelectSingleNode("//p:spPr/a:custGeom/a:pathLst/a:path", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                    var pathNode = doc.SelectSingleNode("//p:spPr/a:custGeom/a:pathLst/a:path", PowerPointHelper.xmlnsManager);
                     shape.Paths = GenPath(pathNode.OuterXml);
                     return shape;
                 }
@@ -801,8 +805,8 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             List<Paragraph> paragraphs = new List<Paragraph>();
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(nodeXml);
-            XmlNodeList pNodes = doc.SelectNodes("//p:txBody/child::* ", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-            XmlNodeList plvlNodes = doc.SelectNodes("//p:txBody/a:p/a:pPr/@lvl", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+            XmlNodeList pNodes = doc.SelectNodes("//p:txBody/child::* ", PowerPointHelper.xmlnsManager);
+            XmlNodeList plvlNodes = doc.SelectNodes("//p:txBody/a:p/a:pPr/@lvl", PowerPointHelper.xmlnsManager);
             bool hasBuChar = false;
             if (plvlNodes != null && plvlNodes.Count > 0)
             {
@@ -826,11 +830,11 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     string VerticalAlign = PowerPointHelper.GetVerticalAlign(nodeXml, slideLayoutSpNode, slideMasterSpNode, typeNode, slideMasterTextStyles);
                     Paragraph paragraph = new Paragraph();
                     ParagraphStyle paragraphStyle = new ParagraphStyle { HoriAlign = HorizontalAlign, VertAlign = VerticalAlign };
-                    XmlNodeList pPrNodes = pXmlNode.SelectNodes("//a:pPr", PowerPointHelper.GetXmlnsManager(pXmlNode.NameTable));
+                    XmlNodeList pPrNodes = pXmlNode.SelectNodes("//a:pPr", PowerPointHelper.xmlnsManager);
                     BuChar buChar = PowerPointHelper.GenBuChar(pXmlNode, slideLayoutTables, slideMasterTables, slideMasterTextStyles, typeNode, hasBuChar);
                     paragraph.BuChar = buChar;
                     paragraph.ParagraphStyle = paragraphStyle;
-                    XmlNodeList rNodes = pXmlNode.SelectNodes("//a:r", PowerPointHelper.GetXmlnsManager(pXmlNode.NameTable));
+                    XmlNodeList rNodes = pXmlNode.SelectNodes("//a:r", PowerPointHelper.xmlnsManager);
                     if (null == rNodes)
                     {
                         XmlDocument rNode = new XmlDocument();
@@ -857,7 +861,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         public Text GenSpanElement(XmlDocument nodeXml, XmlDocument slideLayoutSpNode, XmlDocument slideMasterSpNode, XmlNode typeNode,
             XmlDocument slideMasterTextStyles, Theme theme, IEnumerable<IdPartPair> idPartPairs, Dictionary<string, string> colors, BuChar buChar, SlidePart slidePart)
         {
-            XmlNode tNode = nodeXml.SelectSingleNode("//a:t", PowerPointHelper.GetXmlnsManager(nodeXml.NameTable));
+            XmlNode tNode = nodeXml.SelectSingleNode("//a:t", PowerPointHelper.xmlnsManager);
             /*
             var text = node["a:t"];
             if (typeof text !== 'string') {
@@ -905,7 +909,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
 
             Text text = new Text { Content = tNode.InnerText, FontStyle = fontStyle };
-            XmlNode linkID = nodeXml.SelectSingleNode("//a:rPr/a:hlinkClick/@r:id", PowerPointHelper.GetXmlnsManager(nodeXml.NameTable));
+            XmlNode linkID = nodeXml.SelectSingleNode("//a:rPr/a:hlinkClick/@r:id", PowerPointHelper.xmlnsManager);
             if (linkID != null)
             {
                 List<DocumentFormat.OpenXml.Packaging.HyperlinkRelationship> hyperlinkRelationships = slidePart.HyperlinkRelationships.ToList();
@@ -1190,15 +1194,15 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(element.OuterXml);
-            XmlNode shapeType = doc.SelectSingleNode("//p:spPr/a:prstGeom/@prst", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+            XmlNode shapeType = doc.SelectSingleNode("//p:spPr/a:prstGeom/@prst", PowerPointHelper.xmlnsManager);
             if (shapeType != null)
             {
                 //常规图形
                 HiTeachCC.Model.PowerPoint.Position shapePosition = PowerPointHelper.GetPosition(element.OuterXml, null, null);
                 Border border = PowerPointHelper.GetBorder(element.OuterXml, true, colors);
                 HiTeachCC.Model.PowerPoint.Fill fill = PowerPointHelper.GetShapeFill(element.OuterXml, colors);
-                var headEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:headEnd/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
-                var tailEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:tailEnd/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
+                var headEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:headEnd/@type", PowerPointHelper.xmlnsManager);
+                var tailEndTypeNode = doc.SelectSingleNode("//p:spPr/a:ln/a:tailEnd/@type", PowerPointHelper.xmlnsManager);
                 PowerPointHelper.GenPPTXShape(shapeType);
                 //shapePosition.Index = index;
                 shape.Position = shapePosition;
@@ -1223,7 +1227,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         {
             string shaCode = ShaHashHelper.GetSHA1(file.OpenReadStream());
             Dictionary<string, object> dict = new Dictionary<string, object> { { "Sha1Code", shaCode } };
-            List<AzureBlobModel> models = await azureTableDBRepository.FindListByDict<AzureBlobModel>(dict);
+            List<AzureBlobModel> models = await azureTableDBRepository. FindListByDict<AzureBlobModel>(dict);
             if (models.IsNotEmpty())
             {
                 resdict.Add("pdf", models[0]);
@@ -1233,7 +1237,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             {
                 AzureBlobModel azureBlobModel = await azureBlobDBRepository.UploadFile(file, "pdffiles", true);
                 azureBlobModel.Sha1Code = shaCode;
-                await azureTableDBRepository.SaveOrUpdate<AzureBlobModel>(azureBlobModel);
+                await azureTableDBRepository. SaveOrUpdate<AzureBlobModel>(azureBlobModel);
                 azureBlobModel.Sha1Code = shaCode;
                 resdict.Add("pdf", azureBlobModel);
                 resdict.Add("type", "pdf");

File diff suppressed because it is too large
+ 42 - 594
TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeGenerator.cs


+ 1 - 0
TEAMModelOS.Service/Services/PowerPoint/Interface/IPowerPointService.cs

@@ -1,4 +1,5 @@
 using HiTeachCC.Model.PowerPoint;
+
 using Microsoft.AspNetCore.Http;
 using System;
 using System.Collections.Generic;

+ 14 - 0
TEAMModelOS.Service/Services/PowerPoint/Interface/IShapeGenerator.cs

@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Http;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Context.Configuration;
+
+namespace HiTeachCC.Service.PowerPoint.Interface
+{
+    public interface IShapeGenerator : IBusinessService
+    {
+        Task<Dictionary<string, object>> LoadPresentation(IFormFile file);
+    }
+}

+ 5 - 2
TEAMModelOS/Controllers/Core/FileController.cs

@@ -24,11 +24,14 @@ namespace TEAMModelOS.Controllers.Syllabus
         private readonly IAzureTableDBRepository azureTableDBRepository;
         private readonly IAzureBlobDBRepository _azureBlobDBRepository;
         private readonly IPowerPointService powerPointService;
-        public FileController(IAzureTableDBRepository _azureTableDBRepository, IAzureBlobDBRepository azureBlobDBRepository , IPowerPointService _powerPointService)
+        private readonly IShapeGenerator shapeGenerator;
+        public FileController(IAzureTableDBRepository _azureTableDBRepository, IAzureBlobDBRepository azureBlobDBRepository , 
+            IPowerPointService _powerPointService, IShapeGenerator _shapeGenerator)
         {
             azureTableDBRepository = _azureTableDBRepository;
             _azureBlobDBRepository = azureBlobDBRepository;
             powerPointService = _powerPointService;
+            shapeGenerator = _shapeGenerator;
         }
 
 
@@ -142,7 +145,7 @@ namespace TEAMModelOS.Controllers.Syllabus
         {
             JsonRPCResponseBuilder responseBuilder = new JsonRPCResponseBuilder();
 
-            Dictionary<string, object> model = await powerPointService.LoadPresentation(file);
+            Dictionary<string, object> model = await shapeGenerator.LoadPresentation(file);
 
             return responseBuilder.Data(model).build();
         }

+ 2 - 2
TEAMModelOS/Controllers/Core/LoginController.cs

@@ -197,7 +197,7 @@ namespace TEAMModelOS.Controllers.Core
                 var expExt = claimModel.Claim.TryGetValue("exp", out var exp);
                 if (expExt == false || dateTime > long.Parse(exp.ToString()))
                 {
-                    throw new BizException(401, "Unauthorized");
+                    throw new BizException("Unauthorized", 401 );
                 }
 
                 Dictionary<string, object> msp = new Dictionary<string, object>
@@ -211,7 +211,7 @@ namespace TEAMModelOS.Controllers.Core
                 }
                 else
                 {
-                    throw new BizException(401, "Unauthorized");
+                    throw new BizException("Unauthorized", 401 );
                 }
             }
         }

+ 67 - 3
TEAMModelOS/Controllers/Syllabus/VolumeController.cs

@@ -44,16 +44,80 @@ namespace TEAMModelOS.Controllers.Syllabus
             {
                 if (request.@params.type == 0)
                 {
-                    string key = ShaHashHelper.GetSHA1(request.@params.schoolCode + request.@params.periodCode + request.@params.subjectCode + request.@params.gradeCode + request.@params.semesterCode);
+                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
+                        { "schoolCode",request.@params.schoolCode},{ "periodCode", request.@params.periodCode},
+                        { "subjectCode", request.@params.subjectCode},{ "gradeCode", request.@params.gradeCode},
+                        { "semesterCode",request.@params.gradeCode},{ "volumeName",request.@params.volumeName}  ,
+                        { "status",1} ,{ "type",0} }, true);
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        throw new BizException("已存在!", 500);
+                    }
+                    ///校本课纲
+                    string key = request.@params.schoolCode + IdWorker.getInstance().NextId();
                     request.@params.id = key;
                     request.@params.volumeCode = key;
                 }
-                else
+                else if (request.@params.type == 1)
                 {
-                    string key = ShaHashHelper.GetSHA1(request.@params.schoolCode + request.@params.TEAMModelId + IdWorker.getInstance().NextId());
+                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
+                        { "schoolCode",request.@params.schoolCode},{ "periodCode", request.@params.periodCode},
+                        { "subjectCode", request.@params.subjectCode},{ "gradeCode", request.@params.gradeCode},
+                        { "semesterCode",request.@params.gradeCode},{ "volumeName",request.@params.volumeName},
+                        { "TEAMModelId",request.@params.TEAMModelId}, { "status",1} ,{ "type",1} }, true);
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        throw new BizException("已存在!", 500);
+                    }
+                    ///个人课纲
+                    string key = "dynamic" + request.@params.TEAMModelId.Replace("#", "") + IdWorker.getInstance().NextId();
                     request.@params.id = key;
                     request.@params.volumeCode = key;
                 }
+                else if (request.@params.type == 2)
+                {
+                    ///系统课纲
+                    string key = "system" + IdWorker.getInstance().NextId();
+                    request.@params.schoolCode = "system";
+                    request.@params.id = key;
+                    request.@params.volumeCode = key;
+                }
+            }
+            else {
+                if (request.@params.type == 0)
+                {
+                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
+                    { "schoolCode",request.@params.schoolCode},{ "periodCode", request.@params.periodCode},
+                        { "subjectCode", request.@params.subjectCode},{ "gradeCode", request.@params.gradeCode},
+                        { "semesterCode",request.@params.gradeCode},{ "volumeName",request.@params.volumeName}  ,
+                        { "status",1} ,{ "type",0} }, true);
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        if (!volumesFind[0].id.Equals(request.@params.id)) {
+                            throw new BizException("已存在!", 500);
+                        }
+                    }
+                }
+                else if (request.@params.type == 1)
+                {
+                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
+                        { "schoolCode",request.@params.schoolCode},{ "periodCode", request.@params.periodCode},
+                        { "subjectCode", request.@params.subjectCode},{ "gradeCode", request.@params.gradeCode},
+                        { "semesterCode",request.@params.gradeCode},{ "volumeName",request.@params.volumeName},
+                        { "TEAMModelId",request.@params.TEAMModelId}, { "status",1} ,{ "type",1} }, true);
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        if (!volumesFind[0].id.Equals(request.@params.id))
+                        {
+                            throw new BizException("已存在!", 500);
+                        }
+                    }
+                   
+                }
+                else if (request.@params.type == 2)
+                {
+                }
+
             }
             List<Volume> volumes = new List<Volume>
             {