private void SetRegContent(ServiceList model)
        {
            var inList   = new List <string>();
            var outList  = new List <string>();
            var inPorts  = new List <string>();
            var outPorts = new List <string>();
            var inStr    = Request["inAddr"];

            if (!string.IsNullOrWhiteSpace(inStr))
            {
                inList = inStr.Split(',').ToList();
            }
            var outStr = Request["outAddr"];

            if (!string.IsNullOrWhiteSpace(outStr))
            {
                outList = outStr.Split(',').ToList();
            }
            var inPortStr = Request["inPort"];

            if (!string.IsNullOrWhiteSpace(inStr))
            {
                inPorts = inPortStr.Split(',').ToList();
            }
            var outPortStr = Request["outPort"];

            if (!string.IsNullOrWhiteSpace(inStr))
            {
                outPorts = outPortStr.Split(',').ToList();
            }
            var cfg = new ServiceConf
            {
                InAddr  = inList.Zip(inPorts, (t, p) => !string.IsNullOrEmpty(p) ? t + ":" + p : t).ToList(),
                OutAddr = outList.Zip(outPorts, (t, p) => !string.IsNullOrEmpty(p) ? t + ":" + p : t).ToList(),
                Remarks = model.Remark
            };

            model.RegContent = JsonConvert.SerializeObject(cfg);
        }
        public ActionResult ExportToExcel()
        {
            int count;
            var list =
                ((List <ServiceList>)Session["list"] ?? Rep.QueryByPage(0, int.MaxValue, out count)).Where(
                    _typeFilter.Compile()).ToList();
            const string thHtml = "<th>{0}</th>";
            const string tdHtml = "<td>{0}</td>";

            var sb = new StringBuilder();

            sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
            sb.Append("<tr>");
            sb.AppendFormat(thHtml, "");
            sb.AppendFormat(thHtml, "服务ID");
            sb.AppendFormat(thHtml, "二级服务ID");
            sb.AppendFormat(thHtml, "内网IP");
            sb.AppendFormat(thHtml, "内网端口");
            sb.AppendFormat(thHtml, "外网IP");
            sb.AppendFormat(thHtml, "外网端口");
            sb.AppendFormat(thHtml, "服务名称");
            sb.AppendFormat(thHtml, "二级服务名称");
            sb.AppendFormat(thHtml, "版本");
            sb.AppendFormat(thHtml, "备注");
            sb.Append("</tr>");

            var rowIndex = 1;

            foreach (var item in list)
            {
                sb.Append("<tr>");
                sb.AppendFormat(tdHtml, rowIndex++);
                sb.AppendFormat(tdHtml, item.PrimaryId);
                sb.AppendFormat(tdHtml, item.SecondaryId);

                var conf = new ServiceConf();
                if (!string.IsNullOrWhiteSpace(item.RegContent))
                {
                    conf = JsonConvert.DeserializeObject <ServiceConf>(item.RegContent);
                }
                var inList  = conf.InAddr ?? new List <string>();
                var outList = conf.OutAddr ?? new List <string>();

                var inFlag = inList.FirstOrDefault(t => t.Contains(item.Host)) != null;
                var inAddr = inFlag
                    ? inList.First(t => t.Contains(item.Host))
                             .Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries)
                    : new string[0];
                sb.AppendFormat(tdHtml, item.Host);

                sb.AppendFormat(tdHtml, inFlag ? inAddr.Length > 1 ? inAddr[1] : "" : "");
                var outAddr = new List <string>();
                var outPort = new List <string>();
                if (outList.Any())
                {
                    var @out = outList.Select(t =>
                    {
                        var arr = t.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                        return(new { Addr = arr[0], Port = arr.Length > 1 ? arr[1] : "" });
                    }).ToList();
                    outAddr = @out.Select(t => t.Addr).ToList();
                    outPort = @out.Select(t => t.Port).ToList();
                }
                sb.AppendFormat(tdHtml, string.Join(",", outAddr));
                sb.AppendFormat(tdHtml, string.Join(",", outPort));

                sb.AppendFormat(tdHtml, item.ServiceName);
                sb.AppendFormat(tdHtml, item.SecondaryName);
                sb.AppendFormat(tdHtml, item.Version);
                sb.AppendFormat(tdHtml, item.Remark);
                sb.Append("</tr>");
            }
            sb.Append("</table>");
            return(File(Encoding.UTF8.GetBytes(sb.ToString()), "application/excel", "服务列表.xls"));
        }