コード例 #1
0
        public ActionResult ClassListExport()
        {
            var vm = new Models.AttendanceReport.ClassList();

            using (var db = new XkSystem.Models.DbContext())
            {
                #region 准备数据
                //开始日期
                if (string.IsNullOrEmpty(vm.DateSearchFrom))
                {
                    vm.DateSearchFrom = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).ToString(XkSystem.Code.Common.StringToDate);
                }
                //结束日期
                if (string.IsNullOrEmpty(vm.DateSearchTo))
                {
                    vm.DateSearchTo = DateTime.Now.ToString(XkSystem.Code.Common.StringToDate);
                }

                var fromDate = Convert.ToDateTime(vm.DateSearchFrom);
                var toDate   = Convert.ToDateTime(vm.DateSearchTo).AddDays(1);

                //考勤类型
                vm.AttendanceTypeList = AttendanceTypeController.SelectAbnormalList();

                var tbSurveryDataList = from p in db.Table <Basis.Entity.tbClassStudent>()
                                        join m in db.Table <Entity.tbAttendance>() on p.tbStudent.Id equals m.tbStudent.Id
                                        where m.AttendanceDate >= fromDate && m.AttendanceDate < toDate &&
                                        p.tbStudent.IsDeleted == false &&
                                        p.tbClass.IsDeleted == false &&
                                        m.tbAttendanceType.IsDeleted == false &&
                                        m.tbOrg.IsDeleted == false &&
                                        m.tbPeriod.IsDeleted == false
                                        select new
                {
                    OrgId               = m.tbOrg.Id,
                    OrgName             = m.tbOrg.OrgName,
                    OrgNo               = m.tbOrg.No,
                    StudentId           = m.tbStudent.Id,
                    StudentCode         = m.tbStudent.StudentCode,
                    StudentName         = m.tbStudent.StudentName,
                    ClassId             = p.tbClass.Id,
                    ClassName           = p.tbClass.ClassName,
                    ClassNo             = p.tbClass.No,
                    AttendanceTypeId    = m.tbAttendanceType.Id,
                    AttendanceTypeName  = m.tbAttendanceType.AttendanceTypeName,
                    AttendanceTypeValue = m.tbAttendanceType.AttendanceValue,
                    GradeId             = p.tbClass.tbGrade.Id,
                    GradeName           = p.tbClass.tbGrade.GradeName,
                    GradeNo             = p.tbClass.tbGrade.No
                };

                if (string.IsNullOrEmpty(vm.SearchText) == false)
                {
                    tbSurveryDataList = tbSurveryDataList.Where(d => vm.SearchText.Contains(d.ClassName) || vm.SearchText.Contains(d.GradeName));
                }

                vm.AttendanceClassList = (from p in tbSurveryDataList
                                          group p by new
                {
                    gradeId = p.GradeId,
                    gradeName = p.GradeName,
                    gradeNo = p.GradeNo,
                    classId = p.ClassId,
                    className = p.ClassName,
                    classNo = p.ClassNo,
                    attendanceTypeId = p.AttendanceTypeId,
                    attendanceTypeName = p.AttendanceTypeName
                } into g
                                          select new Dto.AttendanceReport.ClassList
                {
                    GradeId = g.Key.gradeId,
                    GradeName = g.Key.gradeName,
                    GradeNo = g.Key.gradeNo,
                    ClassId = g.Key.classId,
                    ClassName = g.Key.className,
                    ClassNo = g.Key.classNo,
                    AttendanceTypeId = g.Key.attendanceTypeId,
                    AttendanceTypeName = g.Key.attendanceTypeName,
                    AttendanceTypeCount = g.Count(),
                    AttendanceTypeSum = g.Select(d => d.AttendanceTypeValue).Sum(),
                    AttendanceTypeAvg = g.Select(d => d.AttendanceTypeValue).Average()
                }).Distinct().ToList();
                #endregion
                var file      = System.IO.Path.GetTempFileName();
                var sheetList = new List <Code.NpoiHelper.DataTableToExcelPram>();
                #region 全校考勤
                int surveyOptionCount = vm.AttendanceTypeList.Count();
                var allColumnLength   = surveyOptionCount + 1;
                var arrColumns        = new string[allColumnLength];

                for (int i = 0; i < arrColumns.Length; i++)
                {
                    arrColumns[i] = (i + 1).ToString();
                }

                var sheet = new Code.NpoiHelper.DataTableToExcelPram();
                sheet.isColumnWritten = false;
                sheet.isWriteHeader   = true;
                sheet.strHeaderText   = "全校考勤";
                //开始表格
                var dt      = Code.Common.ArrayToDataTable(arrColumns);
                var regions = new List <NPOI.SS.Util.CellRangeAddress>();
                #region 增加标题
                var arrAttendanceTypeID   = new string[allColumnLength];
                var arrAttendanceTypeName = new string[allColumnLength];
                var index = 0;
                for (int i = 0; i < surveyOptionCount; i++)
                {
                    index++;
                    arrAttendanceTypeID[index]   = vm.AttendanceTypeList[i].Value.ToString();
                    arrAttendanceTypeName[index] = vm.AttendanceTypeList[i].Text.ToString();
                }
                dt.Rows.Add(arrAttendanceTypeName);
                #endregion
                #region DataList
                string[] arrSurveyData = new string[allColumnLength];
                arrSurveyData[0] = "异常人数";
                var indexR = 1;
                foreach (var type in vm.AttendanceTypeList)
                {
                    var typeCount = vm.AttendanceClassList.Where(d => d.AttendanceTypeId == type.Value.ConvertToInt()).Count();
                    if (typeCount > decimal.Zero)
                    {
                        arrSurveyData[indexR] = typeCount.ToString();
                    }
                    else
                    {
                        arrSurveyData[indexR] = "";
                    }
                    indexR++;
                }
                dt.Rows.Add(arrSurveyData);
                #endregion
                dt.Rows[0][0] = "考勤类型";
                sheet.data    = dt;
                sheet.regions = regions;
                sheetList.Add(sheet);
                #endregion
                #region 班级考勤
                var sheetClass = new Code.NpoiHelper.DataTableToExcelPram();
                sheetClass.isColumnWritten = false;
                sheetClass.isWriteHeader   = true;
                sheetClass.strHeaderText   = "班级考勤";
                //开始表格
                var dtClass      = Code.Common.ArrayToDataTable(arrColumns);
                var regionsClass = new List <NPOI.SS.Util.CellRangeAddress>();
                #region 增加标题
                var arrAttendanceTypeIDClass   = new string[allColumnLength];
                var arrAttendanceTypeNameClass = new string[allColumnLength];
                var indexClass = 0;
                for (int i = 0; i < surveyOptionCount; i++)
                {
                    indexClass++;
                    arrAttendanceTypeIDClass[indexClass]   = vm.AttendanceTypeList[i].Value.ToString();
                    arrAttendanceTypeNameClass[indexClass] = vm.AttendanceTypeList[i].Text.ToString();
                }
                dtClass.Rows.Add(arrAttendanceTypeNameClass);
                #endregion
                #region DataList
                foreach (var a in vm.AttendanceClassList.GroupBy(d => new { d.ClassId, d.ClassName, d.ClassNo }).Select(g => new { g.Key.ClassId, g.Key.ClassName, g.Key.ClassNo }).OrderBy(g => g.ClassNo))
                {
                    string[] arrSurveyDataClass = new string[allColumnLength];
                    arrSurveyDataClass[0] = a.ClassName;
                    var indexRClass = 1;
                    foreach (var type in vm.AttendanceTypeList)
                    {
                        var typeCountAll = vm.AttendanceClassList.Where(d => d.AttendanceTypeId == type.Value.ConvertToInt() && d.ClassId == a.ClassId).Count();
                        if (typeCountAll > decimal.Zero)
                        {
                            arrSurveyDataClass[indexRClass] = typeCountAll.ToString();
                        }
                        else
                        {
                            arrSurveyDataClass[indexRClass] = "";
                        }
                        indexRClass++;
                    }
                    dtClass.Rows.Add(arrSurveyDataClass);
                }
                #endregion
                dtClass.Rows[0][0] = "行政班级";
                sheetClass.data    = dtClass;
                sheetClass.regions = regionsClass;
                sheetList.Add(sheetClass);
                #endregion
                Code.NpoiHelper.DataTableToExcel(file, sheetList);
                if (!String.IsNullOrEmpty(file))
                {
                    return(File(file, Code.Common.DownloadType, Code.Common.ExportByExcel));
                }
                else
                {
                    return(View());
                }
            }
        }
コード例 #2
0
        public ActionResult ClassList()
        {
            var vm = new Models.AttendanceReport.ClassList();

            using (var db = new XkSystem.Models.DbContext())
            {
                //开始日期
                if (string.IsNullOrEmpty(vm.DateSearchFrom))
                {
                    vm.DateSearchFrom = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).ToString(XkSystem.Code.Common.StringToDate);
                }
                //结束日期
                if (string.IsNullOrEmpty(vm.DateSearchTo))
                {
                    vm.DateSearchTo = DateTime.Now.ToString(XkSystem.Code.Common.StringToDate);
                }

                var fromDate = Convert.ToDateTime(vm.DateSearchFrom);
                var toDate   = Convert.ToDateTime(vm.DateSearchTo).AddDays(1);

                //考勤类型
                vm.AttendanceTypeList = AttendanceTypeController.SelectAbnormalList();

                var tbSurveryDataList = from p in db.Table <Basis.Entity.tbClassStudent>()
                                        join m in db.Table <Entity.tbAttendance>() on p.tbStudent.Id equals m.tbStudent.Id
                                        where m.AttendanceDate >= fromDate && m.AttendanceDate < toDate &&
                                        p.tbStudent.IsDeleted == false &&
                                        p.tbClass.IsDeleted == false &&
                                        m.tbAttendanceType.IsDeleted == false &&
                                        m.tbOrg.IsDeleted == false &&
                                        m.tbPeriod.IsDeleted == false
                                        select new
                {
                    OrgId               = m.tbOrg.Id,
                    OrgName             = m.tbOrg.OrgName,
                    OrgNo               = m.tbOrg.No,
                    StudentId           = m.tbStudent.Id,
                    StudentCode         = m.tbStudent.StudentCode,
                    StudentName         = m.tbStudent.StudentName,
                    ClassId             = p.tbClass.Id,
                    ClassName           = p.tbClass.ClassName,
                    ClassNo             = p.tbClass.No,
                    AttendanceTypeId    = m.tbAttendanceType.Id,
                    AttendanceTypeName  = m.tbAttendanceType.AttendanceTypeName,
                    AttendanceTypeValue = m.tbAttendanceType.AttendanceValue,
                    GradeId             = p.tbClass.tbGrade.Id,
                    GradeName           = p.tbClass.tbGrade.GradeName,
                    GradeNo             = p.tbClass.tbGrade.No
                };

                if (string.IsNullOrEmpty(vm.SearchText) == false)
                {
                    tbSurveryDataList = tbSurveryDataList.Where(d => vm.SearchText.Contains(d.ClassName) || vm.SearchText.Contains(d.GradeName));
                }

                vm.AttendanceClassList = (from p in tbSurveryDataList
                                          group p by new
                {
                    gradeId = p.GradeId,
                    gradeName = p.GradeName,
                    gradeNo = p.GradeNo,
                    classId = p.ClassId,
                    className = p.ClassName,
                    classNo = p.ClassNo,
                    attendanceTypeId = p.AttendanceTypeId,
                    attendanceTypeName = p.AttendanceTypeName
                } into g
                                          select new Dto.AttendanceReport.ClassList
                {
                    GradeId = g.Key.gradeId,
                    GradeName = g.Key.gradeName,
                    GradeNo = g.Key.gradeNo,
                    ClassId = g.Key.classId,
                    ClassName = g.Key.className,
                    ClassNo = g.Key.classNo,
                    AttendanceTypeId = g.Key.attendanceTypeId,
                    AttendanceTypeName = g.Key.attendanceTypeName,
                    AttendanceTypeCount = g.Count(),
                    AttendanceTypeSum = g.Select(d => d.AttendanceTypeValue).Sum(),
                    AttendanceTypeAvg = g.Select(d => d.AttendanceTypeValue).Average()
                }).Distinct().ToList();
                return(View(vm));
            }
        }