/// <summary>
        /// 插入授权关系信息
        /// </summary>
        /// <param name="xml">XML格式的品牌数据.</param>
        /// <returns>大于0成功,否则失败</returns>
        /// <remarks>
        /// <list type="bullet">
        /// </list>
        /// </remarks>
        public override int Insert(System.Xml.XmlDocument xml)
        {
            ClearCache();
            int val = 0;
            ProductRelationEntity ent = new ProductRelationEntity();

            ent.SetValues(xml);

            //检查信息是否存在
            Dictionary <string, object> dic = new Dictionary <string, object>();

            dic.Add("UpConnectorId", ent.UpConnectorId);
            dic.Add("UpProductId", ent.UpProductId);
            dic.Add("UpGoodsId", ent.UpGoodsId);
            dic.Add("DownConnectorId", ent.DownConnectorId);
            dic.Add("DownProductId", ent.DownProductId);
            dic.Add("DownGoodsId", ent.DownGoodsId);
            ProductRelationEntity entAccount = DbAccess.GetEntity <ProductRelationEntity>(TableName, dic);

            if (entAccount != null)
            {
                return(-1);
            }
            val = DbAccess.ExecuteInsert(TableName, ent);
            return(val);
        }
        public IResultResponse ImportProduct(int connectorId, int upConnectorId, int productId)
        {
            int             val         = 0;
            ConnectorEntity upConnector = (ConnectorEntity) new ConnectorBusiness(_dapperFactory).GetEntity("Id=" + upConnectorId);

            if (upConnector == null || upConnector.Id == null)
            {
                return(ResultResponse.ExceptionResult("上游不存在"));
            }
            GroupEntity upGroup = (GroupEntity) new GroupBusiness(_dapperFactory).GetEntity("Id=" + upConnector.GroupId);

            if (upGroup == null || upGroup.Id == null)
            {
                return(ResultResponse.ExceptionResult("上游不存在"));
            }
            ConnectorEntity connector = (ConnectorEntity) new ConnectorBusiness(_dapperFactory).GetEntity("Id=" + connectorId);

            if (connector == null || connector.Id == null)
            {
                return(ResultResponse.ExceptionResult("下游不存在"));
            }
            GroupEntity downGroup = (GroupEntity) new GroupBusiness(_dapperFactory).GetEntity("Id=" + connector.GroupId);

            if (downGroup == null || downGroup.Id == null)
            {
                return(ResultResponse.ExceptionResult("下游不存在"));
            }
            Dictionary <string, string> dic = new Dictionary <string, string>();

            dic.Add("FKId", upConnector.SellerId.ToString());
            dic.Add("ProprietorId", upConnector.SellerId.ToString());
            dic.Add("Proprietor", "2");
            dic.Add("FKFlag", "2");
            dic.Add("ProductId", productId.ToString());
            string msg      = "";
            string datajson = ApiRequest.GetRemoteContent(upGroup.Domain + "/Route.axd", "mall.product.pullinfo", dic, out msg);

            if (string.IsNullOrEmpty(datajson))
            {
                return(ResultResponse.ExceptionResult("拉取数据为空"));
            }

            var dict = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, object> >(datajson);

            if (!Utils.ToBool(dict["Success"]))
            {
                return(ResultResponse.ExceptionResult(Utils.ToString(dict["Message"])));;
            }
            #region 处理数据
            Dictionary <string, object>         content    = dict["Content"] as Dictionary <string, object>;
            Dictionary <string, object>         importData = new Dictionary <string, object>();
            List <Dictionary <string, string> > picList    = new List <Dictionary <string, string> >();
            if (content.ContainsKey("Product"))
            {
                Dictionary <string, object> product = content["Product"] as Dictionary <string, object>;
                importData = product;
                int id = Utils.ToInt(product["ProductId"]);
                importData.Remove("ProductId");
                importData.Add("ThirdId", id);
                importData["BrandId"]    = 0;
                importData["CategoryId"] = 0;
                importData["TypeId"]     = 0;
                importData.Add("Marketable", true);
                importData.Remove("FootIntro");
                importData.Remove("HeadIntro");
                importData.Remove("ShowstandIntro");
                importData.Remove("DefaultUnitId");
                importData.Add("DefaultSaleUnitId", 0);
                importData.Remove("BrandName");
                importData.Remove("CustomCateId");
            }
            ArrayList goods = new ArrayList();
            if (content.ContainsKey("Goods"))
            {
                goods = content["Goods"] as ArrayList;
                foreach (Dictionary <string, object> item in goods)
                {
                    int id = Utils.ToInt(item["GoodsId"]);
                    item.Remove("GoodsId");
                    item.Remove("ProductId");
                    item.Add("ThirdId", id);
                    string name = item["SpecValueText"].ToString();
                    item.Add("Name", name);
                    item.Remove("SpecValueText");
                    if (item.ContainsKey("SpecValue"))
                    {
                        ArrayList specValue = item["SpecValue"] as ArrayList;
                        foreach (Dictionary <string, object> specItem in specValue)
                        {
                            specItem["Id"] = 0;
                            specItem.Add("Name", specItem["SpecName"].ToString());
                            specItem.Remove("SpecName");
                            string pic = specItem.ContainsKey("ImagePath") ? specItem["ImagePath"].ToString() : "";
                            if (pic.IndexOf("?") > -1)
                            {
                                pic = pic.Substring(0, pic.IndexOf("?"));
                            }
                            if (pic != "")
                            {
                                specItem["ImagePath"] = "/UserFiles/Supplier" + connector.SellerId + "/" + DateTime.Now.Date.ToString("yyyMMdd") + "/Images/" + Path.GetFileName(pic);
                                Dictionary <string, string> pickv = new Dictionary <string, string>()
                                {
                                    { "old", pic },
                                    { "new", specItem["ImagePath"].ToString() }
                                };
                                picList.Add(pickv);
                            }
                            specItem.Remove("SpecId");
                        }
                    }
                    if (item.ContainsKey("Pics"))
                    {
                        ArrayList pics = item["Pics"] as ArrayList;
                        foreach (Dictionary <string, object> picItem in pics)
                        {
                            string pic = picItem.ContainsKey("VirtualPath") ? picItem["VirtualPath"].ToString() : "";
                            if (pic.IndexOf("?") > -1)
                            {
                                pic = pic.Substring(0, pic.IndexOf("?"));
                            }
                            if (pic != "")
                            {
                                picItem["ImagePath"] = "/UserFiles/Supplier" + connector.SellerId + "/" + DateTime.Now.Date.ToString("yyyMMdd") + "/Images/" + Path.GetFileName(pic);
                                Dictionary <string, string> pickv = new Dictionary <string, string>()
                                {
                                    { "old", pic },
                                    { "new", picItem["ImagePath"].ToString() }
                                };
                                picList.Add(pickv);
                            }
                        }
                    }
                }
            }
            importData.Add("Goods", goods);
            ArrayList auxiliaryUnit = new ArrayList();
            if (content.ContainsKey("AuxiliaryUnits"))
            {
                auxiliaryUnit = content["AuxiliaryUnits"] as ArrayList;
                foreach (Dictionary <string, object> unitItem in auxiliaryUnit)
                {
                    unitItem["Id"] = 0;
                }
            }
            importData.Add("AuxiliaryUnit", auxiliaryUnit);
            importData.Add("ViceCatalogIds", content["ViceCatalogIds"]);
            ArrayList picsList = new ArrayList();
            if (content.ContainsKey("Pics"))
            {
                picsList = content["Pics"] as ArrayList;
                foreach (Dictionary <string, object> picItem in picsList)
                {
                    picItem.Remove("Id");
                    picItem.Remove("VirtualPath");
                    string picContent = picItem["Content"].ToString();
                    if (picContent.IndexOf("?") > -1)
                    {
                        picContent = picContent.Substring(0, picContent.IndexOf("?"));
                    }
                    if (picContent != "")
                    {
                        picItem["Content"] = "/UserFiles/Supplier" + connector.SellerId + "/" + DateTime.Now.Date.ToString("yyyMMdd") + "/Images/" + Path.GetFileName(picContent);
                        Dictionary <string, string> pickv = new Dictionary <string, string>()
                        {
                            { "old", picContent },
                            { "new", picItem["Content"].ToString() }
                        };
                        picList.Add(pickv);
                    }
                }
            }
            importData.Add("Pics", picsList);

            if (content.ContainsKey("Video"))
            {
                Dictionary <string, object> video = content["Video"] as Dictionary <string, object>;
                video.Remove("Id");
                video.Remove("GoodsId");
                video.Remove("FileType");
                video.Remove("Reorder");
                video.Remove("HasVideo");
                importData.Add("Video", video);
            }


            ArrayList specification = new ArrayList();
            if (content.ContainsKey("Specification"))
            {
                specification = content["Specification"] as ArrayList;
                foreach (Dictionary <string, object> specItem in specification)
                {
                    specItem["Id"] = 0;
                }
            }
            importData.Add("Specification", specification);
            importData.Add("Extends", content["Extends"]);
            importData.Add("Params", content["Params"]);
            importData.Add("SEO", content["SEO"]);
            #endregion

            List <Dictionary <string, object> > list = new List <Dictionary <string, object> >();
            list.Add(importData);

            string          data   = JsonMapper.ToJson(list);
            IResultResponse result = ApiRequest.GetResponse(downGroup.Domain, "mall.product.push", new Dictionary <string, string>()
            {
                { "ProprietorId", connector.SellerId.ToString() },
                { "FKId", connector.SellerId.ToString() },
                { "FKFlag", "2" },
                { "Products", HttpUtility.UrlEncode(data) },
            });
            if (result.Success)
            {
                DataTable dt = result.Content as DataTable;
                if (dt == null || dt.Rows.Count == 0)
                {
                    return(ResultResponse.ExceptionResult("转换异常错误"));
                }
                StringBuilder sb    = new StringBuilder();
                string        error = string.Empty;
                foreach (DataRow dr in dt.Rows)
                {
                    var success = Utils.ToString(dr["Success"]) == "True";
                    if (!success)
                    {
                        error = (Utils.ToString(dt.Rows[0]["Message"]));
                        continue;
                    }

                    Dictionary <string, object> output = dt.Rows[0]["Content"] as Dictionary <string, object>;
                    if (output.ContainsKey("Goods"))
                    {
                        foreach (Object good in output["Goods"] as Object[])
                        {
                            Dictionary <string, object> item = good as Dictionary <string, object>;
                            ProductRelationEntity       ent  = new ProductRelationEntity();
                            ent.UpConnectorId   = upConnectorId;
                            ent.UpProductId     = productId;
                            ent.UpGoodsId       = Utils.ToInt(item["ThirdId"]);
                            ent.DownConnectorId = connectorId;
                            ent.DownProductId   = Utils.ToInt(output["Id"]);
                            ent.DownGoodsId     = Utils.ToInt(item["Id"]);
                            sb.AppendLine(DbAccess.Provider.InsertCommandText(ent, TableName));
                        }
                    }
                }
                if (sb.Length > 0)
                {
                    val = DbAccess.ExecuteNonQuery(sb.ToString());
                    #region 导入图片数据
                    StringBuilder picsb = new StringBuilder();
                    foreach (Dictionary <string, string> item in picList)
                    {
                        if (item["old"].IndexOf("http://") > -1 || item["old"].IndexOf("https://") > -1)
                        {
                            picsb.Append(string.Format("<Image><Path>{0}</Path><Url>{1}</Url></Image>", item["new"], item["old"]));
                        }
                        else
                        {
                            picsb.Append(string.Format("<Image><Path>{0}</Path><Url>{2}{1}</Url></Image>", item["new"], item["old"], downGroup.ImageDomain));
                        }
                    }

                    Task.Run(() =>
                    {
                        string bucketName         = string.Empty;
                        IResultResponse resBucket = ApiRequest.GetResponse(upGroup.Domain, "material.oss.bucket.name", new Dictionary <string, string>()
                        {
                        });
                        if (resBucket != null && resBucket.Success)
                        {
                            bucketName = Utils.ToString(resBucket.Content);
                        }

                        IResultResponse pic = ApiRequest.GetResponse(downGroup.Domain, "material.upload.saveremoteimage", new Dictionary <string, string>()
                        {
                            { "Module", "Product" },
                            { "FKId", connector.SellerId.ToString() },
                            { "FKFlag", "2" },
                            { "Images", (picsb.ToString()) },
                            { "BucketName", bucketName }
                        });
                    });
                    #endregion
                }
                else
                {
                    return(ResultResponse.ExceptionResult(error));
                }
                return(ResultResponse.GetSuccessResult(val));
            }
            else
            {
                return(result);
            }
        }