public void DownloadInfectionStatisticsFile(int year, string templateFile) { var response = this.GetInfectionStatisticsData(year); SheetParameterContainer sheetParameterContainer = new SheetParameterContainer() { SheetName = "统计总表" }; dynamic[] categorys = new dynamic[] { new { category = "001", rowIndex = 7 }, //上呼吸道感染人次 new { category = "002", rowIndex = 9 }, //下呼吸道感染人次 new { category = "003", rowIndex = 14 }, //使用导尿管感染人次 new { category = "004", rowIndex = 17 }, //未使用导尿管感染人次 new { category = "005", rowIndex = 19 }, //疥疮感染人次 // new { category = "usedPipe", rowIndex = 13 }, //使用导尿管人日数 }; List <ElementFormatter> elementFormatters = new List <ElementFormatter>(); // 生成年份参数 sheetParameterContainer.ParameterList.Add(new Parameter() { Name = "year", RowIndex = 0, ColumnIndex = 1 }); elementFormatters.Add(new CellFormatter(sheetParameterContainer["year"], year)); for (int i = 0; i < categorys.Length; i++) { var item = categorys[i]; elementFormatters.Add(NewTableFormatter(response, sheetParameterContainer, item.rowIndex, item.category)); } #region 住民总人日数 int row = 2, col = 0; int queryMonth = 0; IReportManageService reportManageService = IOCContainer.Instance.Resolve <IReportManageService>(); var dbSet = unitOfWork.GetRepository <LTC_IPDREG>().dbSet.Where(o => o.ORGID == orgId && (o.IPDFLAG == "I") && o.INDATE.HasValue && ((DateTime)o.INDATE).Year == year).AsQueryable(); var ipd = (from a in dbSet let Year = SqlFunctions.DatePart("Year", (DateTime)a.INDATE) let Month = SqlFunctions.DatePart("Month", (DateTime)a.INDATE) group a by new { Year, Month } into g where g.Key.Year == year select new StatisticItem { Year = g.Key.Year, Month = g.Key.Month, Total = g.Count() }); var ipdRegList = ipd.ToList(); int maxMonth = 0; if (ipdRegList != null && ipdRegList.Count > 0) { maxMonth = ipdRegList.OrderByDescending(s => s.Month).FirstOrDefault().Month; } for (int j = 1; j <= 12; j++) { decimal leaveHospTotal = 0; decimal unPlanIpdTotal = 0; col = j; if (col > maxMonth) { queryMonth = 0; } else { queryMonth = col; } decimal total = unitOfWork.GetRepository <LTC_IPDREG>() .dbSet.Count( o => o.ORGID == orgId && (o.IPDFLAG == "I") && o.INDATE.HasValue && ((DateTime)o.INDATE).Year == year && ((DateTime)o.INDATE).Month <= queryMonth); decimal ipdRegInTotal = total * DateTime.DaysInMonth(year, j); //当月在院住民总人日数 decimal ipdRegOutTotal = reportManageService.OutLeaveUnPlanTotal(year, col, reportManageService.GetIpdOutTotal(year)); //当月结案的人日次数 if (ipdRegInTotal == 0 && ipdRegOutTotal == 0) { leaveHospTotal = 0; unPlanIpdTotal = 0; } else { leaveHospTotal = reportManageService.OutLeaveUnPlanTotal(year, col, reportManageService.GetLeaveHospTotal(year)); // 当月请假的人日次数 unPlanIpdTotal = reportManageService.OutLeaveUnPlanTotal(year, col, reportManageService.GetUnPlanIpdTotal(year)); //当月非计划住院人日次数 } decimal ipdRegCount = ipdRegInTotal + ipdRegOutTotal - leaveHospTotal - unPlanIpdTotal; //当月住民总人日数 elementFormatters.Add(new CellFormatter(new Parameter() { Name = string.Format("{0}_{1}", row, col), RowIndex = row, ColumnIndex = col }, ipdRegCount)); } #endregion #region 使用导尿管人日数 row = 13; for (int j = 1; j <= 12; j++) { decimal sTotal = 0; col = j; if (col <= maxMonth) { sTotal = reportManageService.OutLeaveUnPlanTotal(year, col, reportManageService.GetUsedPipeDaysTotal(year)); } else { sTotal = 0; } elementFormatters.Add(new CellFormatter(new Parameter() { Name = string.Format("{0}_{1}", row, col), RowIndex = row, ColumnIndex = col }, sTotal)); } #endregion ExportHelper.ExportToWeb(templateFile, Path.GetFileName(templateFile), new SheetFormatter("统计总表", elementFormatters.Where(it => it != null).ToArray())); }
protected override void Operation(WordDocument doc) { doc.ReplaceText("Org", GetOrgName(SecurityHelper.CurrentPrincipal.OrgId)); DateTime now = StartDate; doc.ReplaceText("year", now.Year.ToString()); doc.ReplaceText("month", now.Month.ToString()); IReportManageService reportManageService = IOCContainer.Instance.Resolve <IReportManageService>(); decimal total = reportManageService.GetResidentTotal(now); decimal ipdRegInTotal = total * DateTime.DaysInMonth(now.Year, now.Month); //当月在院住民总人日数 decimal ipdRegOutTotal = OutLeaveUnPlanTotal(now.Year, now.Month, reportManageService.GetIpdOutTotal(now.Year)); //当月结案的人日次数 decimal leaveHospTotal = OutLeaveUnPlanTotal(now.Year, now.Month, reportManageService.GetLeaveHospTotal(now.Year)); // 当月请假的人日次数 decimal unPlanIpdTotal = OutLeaveUnPlanTotal(now.Year, now.Month, reportManageService.GetUnPlanIpdTotal(now.Year)); //当月非计划住院人日次数 decimal ipdRegCount = ipdRegInTotal + ipdRegOutTotal - leaveHospTotal - unPlanIpdTotal; //当月住民总人日数 if (ipdRegCount == 0) { doc.ReplaceText("UTotal", "0"); doc.ReplaceText("STotal", "0"); doc.ReplaceText("CTotal", "0"); doc.ReplaceText("NTotal", "0"); doc.ReplaceText("RTotal", "0"); doc.ReplaceText("N0", "0"); doc.ReplaceText("N1", "0"); doc.ReplaceText("N2", "0"); doc.ReplaceText("N3", "0"); doc.ReplaceText("N4", "0"); doc.ReplaceText("N5", "0"); doc.ReplaceText("R0", "0"); doc.ReplaceText("R1", "0"); doc.ReplaceText("R2", "0"); doc.ReplaceText("R3", "0"); doc.ReplaceText("R4", "0"); doc.ReplaceText("R5", "0"); doc.ReplaceText("CompareNum", ""); doc.ReplaceText("ReasonInfo", ""); doc.ReplaceText("CompareState", ""); return; } doc.ReplaceText("CTotal", ipdRegCount.ToString("#0")); var list = reportManageService.GetInfection(now); var lastList = reportManageService.GetInfection(now.AddMonths(-1)); decimal nTotal = list.Sum(o => o.Total); decimal lastnTotal = lastList.Sum(o => o.Total); if (nTotal == 0) { doc.ReplaceText("NTotal", "0"); doc.ReplaceText("RTotal", "0"); } else { doc.ReplaceText("NTotal", nTotal.ToString("#0")); doc.ReplaceText("RTotal", (nTotal / ipdRegCount * 100).ToString("#0.0")); } if (nTotal < lastnTotal) { doc.ReplaceText("CompareNum", "较上月有所减少,"); } else if (nTotal == lastnTotal) { doc.ReplaceText("CompareNum", "较上月相同,"); } else if (nTotal > lastnTotal) { doc.ReplaceText("CompareNum", "较上月有所增加,"); } // 使用导尿管(膀胱)人日数 decimal blTotal = OutLeaveUnPlanTotal(now.Year, now.Month, reportManageService.GetUsedPipeDaysTotal(now.Year, "002")); // 使用导尿管(尿道)人日数 decimal urTotal = OutLeaveUnPlanTotal(now.Year, now.Month, reportManageService.GetUsedPipeDaysTotal(now.Year, "003")); decimal sTotal = blTotal + urTotal; //使用导尿管人日数 decimal uTotal = ipdRegCount - sTotal; doc.ReplaceText("STotal", sTotal.ToString("#0")); doc.ReplaceText("UTotal", uTotal.ToString("#0")); var keys = new[] { "001", "002", "003", "004", "005" }; var msgInfo = string.Empty; for (int i = 0; i < 5; i++) { if (nTotal == 0) { doc.ReplaceText("N" + i, "0"); doc.ReplaceText("R" + i, "0"); msgInfo += ""; continue; } var obj = list.FirstOrDefault(o => o.Type == keys[i]); if (obj != null) { if (i == 2) { doc.ReplaceText("N" + i, obj.Total.ToString()); doc.ReplaceText("R" + i, sTotal != 0 ? (obj.Total / sTotal * 100).ToString("#0.0") : "0"); msgInfo += obj.Total == 0 ? "" : (",当月使用存留导尿管泌尿道感染人次" + obj.Total.ToString() + "位"); } else if (i == 3) { doc.ReplaceText("N" + i, obj.Total.ToString()); doc.ReplaceText("R" + i, uTotal != 0 ? (obj.Total / uTotal * 100).ToString("#0.0") : "0"); msgInfo += obj.Total == 0 ? "" : (",当月未使用存留导尿管泌尿道感染人次" + obj.Total.ToString() + "位"); } else { doc.ReplaceText("N" + i, obj.Total.ToString()); doc.ReplaceText("R" + i, (obj.Total / ipdRegCount * 100).ToString("#0.0")); } } else { doc.ReplaceText("N" + i, "0"); doc.ReplaceText("R" + i, "0"); msgInfo += ""; } } var non1 = list.Where(o => o.Type == "001" || o.Type == "002").Sum(o => o.Total); msgInfo += non1 == 0 ? "" : (",当月呼吸道感染人次" + non1.ToString() + "位"); var n5 = list.Where(o => o.Type == "003" || o.Type == "004").Sum(o => o.Total); doc.ReplaceText("N5", n5.ToString()); doc.ReplaceText("R5", n5 != 0 ? (n5 / ipdRegCount * 100).ToString("#0.0") : "0"); msgInfo += n5 == 0 ? "" : (",当月泌尿道感染人次" + non1.ToString() + "位"); var n4 = list.Where(o => o.Type == "005").Sum(o => o.Total); msgInfo += n4 == 0 ? "" : (",当月皮肤感染人次" + n4.ToString() + "位"); doc.ReplaceText("ReasonInfo", msgInfo); }