/// <summary> /// 获得根节点地区信息 /// </summary> /// <param name="rootAreas">根节点存储</param> /// <param name="area">当前判断的市级区域</param> /// <param name="areaResult">当前区域的数据</param> /// <param name="parentAreaResult">当前市级数据</param> private static void GetRootAreaResult(List <AreaResultModel> rootAreas, t_bp_area area, AreaResultModel areaResult, AreaResultModel parentAreaResult) { var existAreas = rootAreas.Where(t => t.AreaCode == area.AREACODE).ToList(); if (existAreas.Count > 0)//认为已经有本区域的数据存在,直接在上面加就好了 { var areaIndex = rootAreas.IndexOf(existAreas.First()); rootAreas[areaIndex].TotalCount += areaResult.TotalCount; rootAreas[areaIndex].UnqualifuCount += areaResult.UnqualifuCount; rootAreas[areaIndex].UnqualifyFactoryCount += areaResult.UnqualifyFactoryCount; rootAreas[areaIndex].FactoryCount += areaResult.FactoryCount; } else { rootAreas.Add(parentAreaResult); } }
/// <summary> /// 根据机构分组统计之后,塞到对应的地区中 /// </summary> /// <param name="model"></param> /// <returns></returns> public ActionResult Search(SysSearchModel model) { model.GroupType = "Custom"; var response = GetStatisData(model); DhtmlxGrid grid = new DhtmlxGrid(); /* * 1.查出所有报告数量以及分组统计不合格报告数量 * 2.countByArea 存储该地区报告总数 * 3.需要一个存储该地区所有不合格报告数量 * 4.存储改地区所有有不合格报告数量的厂家 厂家总数 * */ if (response.IsValid) { var bucks = response.Aggs.Terms("Custom").Buckets; Dictionary <string, int> countByArea, unQualifyCount, countUnitByArea, unQualifyUnitCountByArea; GetSearchResult(bucks, out countByArea, out unQualifyCount, out countUnitByArea, out unQualifyUnitCountByArea); var allAreas = AreaService.GetAllArea(); /* * 1.从所有的地区中选择名字相对应的地区,判断是否为市级节点,是直接加入,不是的话需要判断本节点所属的市级节点是否存在,如果存在直接加上,不存在则增加一条数值为0的记录 */ var index = 1; var rootAreas = new List <AreaResultModel>(); var childAreas = new List <AreaResultModel>(); foreach (var item in countByArea) { if (item.Key.IsNullOrEmpty()) { continue; } var unQualifyCountRow = 0; var unitCountByArea = 0; var unqualifyUnitCount = 0; var isUnqualify = unQualifyCount.TryGetValue(item.Key, out unQualifyCountRow); //isUnqualify 标识是否有不合格报告 var isUnitCount = countUnitByArea.TryGetValue(item.Key, out unitCountByArea); var isUnqualifyUnitCount = unQualifyUnitCountByArea.TryGetValue(item.Key, out unqualifyUnitCount); List <t_bp_area> areas = new List <t_bp_area>(); var areass = allAreas.Where(t => t.AREANAME == item.Key); if (areass != null) { areas = areass.ToList(); } if (areas != null && areas.Count > 0) { var area = areas.First(); logger.Debug("areasfirst"); AreaResultModel areaResult = new AreaResultModel() { AreaCode = area.AREACODE, ParentCode = area.PAREACODE, Name = area.AREANAME, TotalCount = (int)item.Value, UnqualifuCount = unQualifyCountRow, FactoryCount = unitCountByArea, UnqualifyFactoryCount = unqualifyUnitCount }; if (area.PAREACODE == "45")//市 { GetRootAreaResult(rootAreas, area, areaResult, areaResult); } else //市辖区,县等 { childAreas.Add(areaResult); var parentCode = area.PAREACODE; if (parentCode != null) { List <t_bp_area> parentAreas = new List <t_bp_area>(); var parentAreass = allAreas.Where(t => t.AREACODE == parentCode); if (parentAreass != null) { parentAreas = parentAreass.ToList(); } if (parentAreas != null && parentAreas.Count > 0) { var parentArea = parentAreas.First(); //获得所属市地区信息 AreaResultModel parentareaResult = new AreaResultModel() { AreaCode = parentArea.AREACODE, Name = parentArea.AREANAME, TotalCount = 0, UnqualifuCount = 0, FactoryCount = 0, UnqualifyFactoryCount = 0 }; GetRootAreaResult(rootAreas, parentArea, areaResult, parentareaResult); } } } } } foreach (var item in rootAreas) { DhtmlxGridRow row = new DhtmlxGridRow(item.AreaCode); row.AddCell(index++); row.AddCell(item.Name); row.AddCell(item.TotalCount); row.AddCell(item.UnqualifuCount); row.AddCell(item.TotalCount == 0 ? "0" : Math.Round(((item.UnqualifuCount * 1.00 / item.TotalCount) * 100), 2).ToString() + "%"); row.AddCell(item.FactoryCount); row.AddCell(item.UnqualifyFactoryCount); row.AddCell(item.FactoryCount == 0 ? "0" : Math.Round(((item.UnqualifyFactoryCount * 1.00 / item.FactoryCount) * 100), 2).ToString() + "%"); row.AddCell(string.Empty); //同比 row.AddCell(string.Empty); //环比 if (item.TotalCount > 0) { row.AddLinkJsCell("详情查看", "showItemKeyGrid(\"{0}\")".Fmt(item.Name)); } List <AreaResultModel> thisChildAreas = new List <AreaResultModel>(); var thisChildAreass = childAreas.Where(t => t.ParentCode == item.AreaCode); if (thisChildAreass != null) { thisChildAreas = thisChildAreass.ToList(); } if (thisChildAreas != null && thisChildAreas.Count > 0) { var childIndex = 1; foreach (var childItem in thisChildAreas) { DhtmlxGridRow childRow = new DhtmlxGridRow(childItem.AreaCode); childRow.AddCell(childIndex++); childRow.AddCell(childItem.Name); childRow.AddCell(childItem.TotalCount); childRow.AddCell(childItem.UnqualifuCount); childRow.AddCell(childItem.TotalCount == 0 ? "0" : Math.Round(((childItem.UnqualifuCount * 1.00 / childItem.TotalCount) * 100), 2).ToString() + "%"); childRow.AddCell(childItem.FactoryCount); childRow.AddCell(childItem.UnqualifyFactoryCount); childRow.AddCell(childItem.FactoryCount == 0 ? "0" : Math.Round(((childItem.UnqualifyFactoryCount * 1.00 / childItem.FactoryCount) * 100), 2).ToString() + "%"); childRow.AddCell(string.Empty); //同比 childRow.AddCell(string.Empty); //环比 if (childItem.UnqualifuCount > 0) //有不合格报告才显示详情查看 { //TODO 由于改了实现方式,将市辖区,县的信息塞到了市中,在不合格详情查看时需要增加如果是市,则需要查本市所有的不合格数据 childRow.AddLinkJsCell("详情查看", "showItemKeyGrid(\"{0}\")".Fmt(childItem.Name)); } row.AddRow(childRow); } } grid.AddGridRow(row); } //foreach (var item in countByArea) //{ // var unQualifyCountRow = 0; // var unitCountByArea = 0; // var unqualifyUnitCount = 0; // var isUnqualify = unQualifyCount.TryGetValue(item.Key, out unQualifyCountRow); //isUnqualify 标识是否有不合格报告 // var isUnitCount = countUnitByArea.TryGetValue(item.Key, out unitCountByArea); // var isUnqualifyUnitCount = unQualifyUnitCountByArea.TryGetValue(item.Key, out unqualifyUnitCount); // DhtmlxGridRow row = new DhtmlxGridRow(item.Key); // row.AddCell(index++); // row.AddCell(item.Key); // row.AddCell(item.Value); // row.AddCell(isUnqualify ? unQualifyCountRow : 0); // row.AddCell(item.Value == 0 ? "0" : Math.Round(((unQualifyCountRow * 1.00 / item.Value) * 100), 2).ToString() + "%"); // row.AddCell(unitCountByArea.ToString()); // row.AddCell(unqualifyUnitCount.ToString()); // row.AddCell(unitCountByArea == 0 ? "0" : Math.Round(((unqualifyUnitCount * 1.00 / unitCountByArea) * 100), 2).ToString() + "%"); // row.AddCell(string.Empty);//同比 // row.AddCell(string.Empty);//环比 // if (isUnqualify)//有不合格报告才显示详情查看 // { // row.AddLinkJsCell("详情查看", "showItemKeyGrid(\"{0}\")".Fmt(item.Key)); // } // grid.AddGridRow(row); //} } string str = grid.BuildRowXml().ToString(System.Xml.Linq.SaveOptions.DisableFormatting); return(Content(str, "text/xml")); }