using Nancy;
using Learun.Util;
using System.Collections.Generic;
using Learun.Application.TwoDevelopment.EducationalAdministration;
using static Learun.Application.WebApi.Modules.StuInfoFreshApi;
using System;
using System.IO;
using System.Linq;
using Learun.Application.Base.SystemModule;
using Learun.Application.OA;
using Learun.Application.OA.File.FileInfo;
using Learun.Application.TwoDevelopment.LogisticsManagement;
using Learun.Application.TwoDevelopment.LR_Desktop;
using Learun.Application.WorkFlow;
using Microsoft.Ajax.Utilities;

namespace Learun.Application.WebApi
{
    /// <summary> 
    /// 版 本 Learun-ADMS-Ultimate V7.0.0 力软敏捷开发框架  
    /// Copyright (c) 2013-2018 上海力软信息技术有限公司  
    /// 创 建:超级管理员 
    /// 日 期:2019-08-19 17:50 
    /// 描 述:教师注册 
    /// </summary>

    public class StatisticsApi : BaseNoLoginApi
    {
        private EmpInfoIBLL empInfoIBLL = new EmpInfoBLL();
        private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
        private ClassInfoIBLL classInfoIBLL = new ClassInfoBLL();
        private ClassroomInfoIBLL classroomInfoIBLL = new ClassroomInfoBLL();
        private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
        private TeachSwitchIBLL teachSwitchIBLL = new TeachSwitchBLL();
        private OpenLessonPlanOfElectiveIBLL openLessonPlanOfElectiveIBLL = new OpenLessonPlanOfElectiveBLL();
        private StuScoreIBLL stuScoreIBLL = new StuScoreBLL();
        private ArrangeLessonTermIBLL arrangeLessonTermIBLL = new ArrangeLessonTermBLL();
        private StuScoreNotPassIBLL stuScoreNotPassIBLL = new StuScoreNotPassBLL();
        private StuScoreNotPassTwoIBLL stuScoreNotPassTwoIBLL = new StuScoreNotPassTwoBLL();
        private EADateArrangeIBLL eADateArrangeIBLL = new EADateArrangeBLL();
        private NewsIBLL newsIbll = new NewsBLL();
        private NoticeIBLL noticeIBLL = new NoticeBLL();
        private SYS_SendMessageIBLL sendMessageIBLL = new SYS_SendMessageBLL();
        private Sys_SendFileIBLL sys_SendFileIBLL = new Sys_SendFileBLL();
        private FileInfoIBLL fileInfoIBLL = new FileInfoBLL();
        private Sys_UpdateRecordIBLL sys_UpdateRecordIBLL = new Sys_UpdateRecordBLL();
        private LessonInfoIBLL lessonInfoIBLL = new LessonInfoBLL();
        private CdLessonSortDetailIBLL cdLessonSortDetailIBLL = new CdLessonSortDetailBLL();
        private NWFSchemeIBLL nWFSchemeIBLL = new NWFSchemeBLL();
        private NWFProcessIBLL processIbll = new NWFProcessBLL();
        private DataItemIBLL dataItemIbll = new DataItemBLL();
        private StuPunishmentIBLL stuPunishmentIBLL = new StuPunishmentBLL();
        private StuEncourgementIBLL stuEncourgementIBLL = new StuEncourgementBLL();
        private AccommodationIBLL accommodationIBLL = new AccommodationBLL();
        private StuAttendanceIBLL stuAttendanceIBLL = new StuAttendanceBLL();
        StuInfoBasicTwoIBLL stuInfoBasicTwoIbll=new StuInfoBasicTwoBLL();


        /// <summary> 
        /// 注册接口 
        /// <summary> 
        public StatisticsApi()
            : base("/Statistics")
        {
            Get["/electiveCcourse"] = ElectiveCourse;//选修课
            Get["/semesterAndYear"] = SemesterAndYear;//当前学年学期
            Get["/scoreEntry"] = ScoreEntry;//成绩录入
            Post["/classHour"] = ClassHour;//课时
            Post["/teacherWorkload"] = TeacherWorkload;//教师工作量
            Get["/makeUpExam"] = MakeUpExam;//补考
            Post["/eaDateArrange"] = EADateArrange;//教学工作安排
            Get["/oaNews"] = OaNews;//新闻公告
            Get["/oaEmails"] = OaEmails;//邮件
            Get["/sendFiles"] = SendFiles;//公文
            Get["/cloudFiles"] = CloudFiles;//云盘
            Get["/operationLog"] = OperationLog;//操作日志
            Get["/schoolInfo"] = SchoolInfo;//学校信息
            Get["/nwfInfo"] = NwfInfo;//流程信息
            Get["/stuPunishment"] = StuPunishmentInfo;//学生班级处分
            Get["/stuEncourgement"] = StuEncourgementInfo;//学生班级奖励
            Get["/dormitoryInfo"] = DormitoryInfo;//宿舍信息
            Get["/stuAttendance"] = StuAttendance;//全校考勤
            Post["/getStuInfo"] = GetStuNoByAccount;
            Post["/getEmpInfo"] = GetEmpNoByAccount;



        }

        private Response SemesterAndYear(dynamic _)
        {
            var b = Common.GetSemesterAndYear();
            object result = new { b.Semester, b.AcademicYearLong, b.AcademicYearShort };
            return Success(result);
        }
        private Response ElectiveCourse(dynamic _)
        {
            string pagination =
                "{\"rows\":1000,\"page\":1,\"sidx\":\"AcademicYearNo,Semester\",\"sord\":\"desc\",\"records\":0,\"total\":0}";
            string queryJson = "{}";

            Pagination paginationobj = pagination.ToObject<Pagination>();
            var data = openLessonPlanOfElectiveIBLL.GetPageListOfMerge(paginationobj, queryJson).OrderByDescending(x => x.AcademicYearNo).ThenByDescending(x => x.Semester).ThenBy(x => x.LessonNo);

            //选修课数量
            var lessonNum = data.Count();
            //选修课报名人数
            var peopleNum = data.Sum(a => a.StuNumOfApply);
            //课程名称
            List<string> nameList = data.Select(a => a.LessonName).ToList();
            //各个课程的报名人数上限
            List<int?> maxNumList = data.Select(a => a.StuNumMax).ToList();
            //各个课程的报名人数
            List<int?> numList = data.Select(a => a.StuNumOfApply).ToList();
            object result = new { lessonNum, peopleNum, nameList, maxNumList, numList };

            return Success(result);
        }
        public Response GetEmpNoByAccount(dynamic _)
        {
            string account = this.Request.Form.account.ToString();
            var stuEntity = empInfoIBLL.GetEmpInfoEntityByEmpNo(account);
            return Success(stuEntity);
        }
        public Response GetStuNoByAccount(dynamic _)
        {
            string account = this.Request.Form.account.ToString();
            var stuEntity = stuInfoBasicIBLL.GetStuNoByAccount(account);
            return Success(stuEntity);
        }
        private Response ScoreEntry(dynamic _)
        {
            var data = stuScoreIBLL.GetList("{}");
            //已完成录入
            var finishNum = data.Count(a => a.CheckMark == "1");
            //未完成录入
            var unFinishNum = data.Count(a => a.CheckMark == "0");
            //录入率
            var finishRate = (Convert.ToDouble(finishNum) / Convert.ToDouble(data.Count())).ToString("0.00%");
            var unFinishRate = (Convert.ToDouble(unFinishNum) / Convert.ToDouble(data.Count())).ToString("0.00%");

            object result = new { finishNum, unFinishNum, finishRate, unFinishRate };

            return Success(result);
        }

        private Response ClassHour(dynamic _)
        {
            string semester = this.Request.Form.semester.ToString();
            string year = this.Request.Form.year.ToString();
            var data = arrangeLessonTermIBLL.GetList("{}").ToList()
                .Where(a => a.AcademicYearNo == year && a.Semester == semester);

            var data1 = data.GroupBy(a => a.LessonDate.ToDate().Month)
            .Select(a => new { a.Key, num = a.Count() })
            .OrderBy(a => a.Key);
            //总课时数
            var allNum = data.Count();
            var month = data1.Select(a => a.Key).ToList();
            var num = data1.Select(a => a.num);

            object result = new { allNum, month, num };


            return Success(result);
        }

        private Response TeacherWorkload(dynamic _)
        {
            string semester = this.Request.Form.semester.ToString();
            string year = this.Request.Form.year.ToString();
            var data = arrangeLessonTermIBLL.GetList("{}").ToList()
                .Where(a => a.AcademicYearNo == year && a.Semester == semester)
                .GroupBy(a => a.EmpNo).Select(a => new { a.Key, num = a.Count() }).OrderByDescending(a => a.num).Take(10);
            List<object> result = new List<object>();
            foreach (var item in data)
            {
                var empEntity = empInfoIBLL.GetEmpInfoEntityByEmpNo(item.Key);
                var photoPath = string.Empty;
                if (empEntity != null)
                {
                    var annexEntity = annexesFileIBLL.GetEntityByFolderId(empEntity.Photo);
                    photoPath = annexEntity?.F_FilePath;
                    if (!string.IsNullOrEmpty(photoPath))
                    {
                        photoPath = "/" + photoPath.Substring(photoPath.IndexOf("Resource"));
                    }
                }
                result.Add(new { empName = empEntity?.EmpName, photoUrl = photoPath, item.num });
            }

            return Success(result);
        }

        private Response MakeUpExam(dynamic _)
        {
            var currentYearAndSe = Common.GetSemesterAndYear();
            var currentYear = currentYearAndSe.AcademicYearShort.Substring(0, 2).ToInt() - 2;
            var currentSemester = currentYearAndSe.Semester;
            List<object> list = new List<object>();

            for (int i = 1; i < 4; i++)
            {
                if (currentSemester == "2")
                {
                    currentYear = currentYear + 1;
                    currentSemester = "1";
                }
                else
                {
                    currentSemester = "2";
                }
                var yearTwo = $"{currentYear.ToString()}-{(currentYear + 1).ToString()}";
                list.Add(new { year = yearTwo, semester = currentSemester });

            }
            list.Add(new { year = currentYearAndSe.AcademicYearShort, semester = currentYearAndSe.Semester });

            List<string> yearAndSemesterList = new List<string>();
            List<string> rateList = new List<string>();
            var currentPassNum = 0;
            var currentRate = string.Empty;
            foreach (dynamic item in list)
            {
                var paramYear = item.year.ToString();
                var paramSemester = item.semester.ToString();

                var all = stuScoreIBLL.GetList("{}").Where(a => a.AcademicYearNo == paramYear && a.Semester == paramSemester).ToList()
                    .GroupBy(a => a.StuNo).Count();
                var pass1 = stuScoreNotPassIBLL.GetList("{}")
                    .Where(a => a.AcademicYearNo == paramYear && a.Semester == paramSemester)
                    .Select(a => a.StuNo)
                    .ToList();
                var pass2 = stuScoreNotPassTwoIBLL.GetList("{}")
                    .Where(a => a.AcademicYearNo == paramYear && a.Semester == paramSemester)
                    .Select(a => a.StuNo).ToList();
                pass1.AddRange(pass2);
                pass1 = pass1.Distinct().ToList();
                var rate = (Convert.ToDouble(pass1.Count()) / Convert.ToDouble(all) * 100).ToString("0.00");
                yearAndSemesterList.Add($"{paramYear}学年 第{paramSemester}学期");
                double doubleRate;
                if (!double.TryParse(rate, out doubleRate))
                {
                    rate = "0";
                }
                rateList.Add(rate);

                //记录本学期
                if (paramYear == currentYearAndSe.AcademicYearShort && paramSemester == currentYearAndSe.Semester)
                {
                    currentPassNum = pass1.Count();
                    currentRate = rate;

                }

            }
            return Success(new { currentPassNum, currentRate, yearAndSemesterList, rateList });
        }


        private Response EADateArrange(dynamic _)
        {
            string year = this.Request.Form.year.Value;
            string semester = this.Request.Form.semester.Value;
            string queryJson = "{}";
            if (!string.IsNullOrEmpty(year))
            {
                queryJson = $"{{\"AcademicYearNo\":\"{year}\",\"Semester\":\"{semester}\"}}";
                if (string.IsNullOrEmpty(semester))
                {
                    queryJson = $"{{\"AcademicYearNo\":\"{year}\"}}";
                }

            }

            string pagination =
                "{\"rows\":30,\"page\":1,\"sidx\":\"AcademicYearNo,Semester\",\"sord\":\"desc\",\"records\":0,\"total\":0}";
            Pagination paginationobj = pagination.ToObject<Pagination>();
            var data = eADateArrangeIBLL.GetPageList(paginationobj, queryJson);
            return Success(data);
        }

        private Response OaNews(dynamic _)
        {
            var beginTime = DateTime.Now.AddMonths(-12);
            var data = noticeIBLL.GetList("", "");
            var news = data.Where(a => a.F_ReleaseTime >= beginTime && a.F_ReleaseTime <= DateTime.Now);
            var monthNews = news.GroupBy(a => a.F_ReleaseTime.ToDate().Month).Select(a => new { a.Key, num = a.Count() }).OrderBy(a => a.Key);
            var monthList = monthNews.Select(a => a.Key).ToList();
            var numList = monthNews.Select(a => a.num).ToList();
            return Success(new { allNum = data.Count(), monthList, numList });


        }


        private Response OaEmails(dynamic _)
        {
            var beginTime = DateTime.Now.AddMonths(-12);
            var data = sendMessageIBLL.GetList();
            var emails = data.Where(a => a.SENDTIME >= beginTime && a.SENDTIME <= DateTime.Now);
            var monthEmails = emails.GroupBy(a => a.SENDTIME.ToDate().Month).Select(a => new { a.Key, num = a.Count() })
                .OrderBy(a => a.Key);
            var monthList = monthEmails.Select(a => a.Key).ToList();
            var numList = monthEmails.Select(a => a.num).ToList();

            return Success(new { allNum = data.Count(), monthList, numList });
        }
        private Response SendFiles(dynamic _)
        {
            var beginTime = DateTime.Now.AddMonths(-12);
            var data = sys_SendFileIBLL.GetList().Where(a => a.STypeId == 1);
            var emails = data.Where(a => a.SendTime >= beginTime && a.SendTime <= DateTime.Now);
            var monthEmails = emails.GroupBy(a => a.SendTime.ToDate().Month).Select(a => new { a.Key, num = a.Count() })
                .OrderBy(a => a.Key);
            var monthList = monthEmails.Select(a => a.Key).ToList();
            var numList = monthEmails.Select(a => a.num).ToList();

            return Success(new { allNum = data.Count(), monthList, numList });
        }
        private Response CloudFiles(dynamic _)
        {
            var beginTime = DateTime.Now.AddMonths(-12);
            var data = fileInfoIBLL.GetList();
            var emails = data.Where(a => a.F_CreateDate >= beginTime && a.F_CreateDate <= DateTime.Now);
            var monthEmails = emails.GroupBy(a => a.F_CreateDate.ToDate().Month).Select(a => new { a.Key, num = a.Count() })
                .OrderBy(a => a.Key);
            var monthList = monthEmails.Select(a => a.Key).ToList();
            var numList = monthEmails.Select(a => a.num).ToList();

            return Success(new { allNum = data.Count(), monthList, numList });
        }


        private Response OperationLog(dynamic _)
        {
            var onLineNum = sys_UpdateRecordIBLL.GetOnlineUserNum().OnlineUserNum;
            var data = sys_UpdateRecordIBLL.GetLogList();
            var loginNum = data.Count(a => a.F_OperateType == "登录");
            var operationNum = data.Count();

            string[] aaa = { "null", "敏捷开发框架", "数字化智慧校园", "Learun.敏捷开发框架", "登录" };
            var ranking = data.GroupBy(a => a.F_Module)
                .Where(a => !aaa.Contains(a.Key))
                .Where(a => a.Key != null)
                .Select(a => new { a.Key, num = a.Count() }).OrderByDescending(a => a.num).Take(10);

            var name = ranking.Select(a => a.Key);
            var num = ranking.Select(a => a.num);

            return Success(new { onLineNum, loginNum, operationNum, name, num });
        }

        private Response SchoolInfo(dynamic _)
        {
            var empInfo = empInfoIBLL.GetAllList();
            var empNum = empInfo.Count();
            var wEmpNum = empInfo.Count(a => a.GenderNo == true);
            var mEmpNum = empInfo.Count(a => a.GenderNo == false);
            var stuInfo = stuInfoBasicIBLL.GetAllList();
            var stuNum = stuInfo.Count();
            var wStuNum = stuInfo.Count(a => a.GenderNo == true);
            var mStuNum = stuInfo.Count(a => a.GenderNo == false);
            //教育云平台
            //var stuInfo = stuInfoBasicTwoIbll.GetList("");
            //var stuNum = stuInfo.Count();
            //var wStuNum = stuInfo.Count(a => a.Sex == "1");
            //var mStuNum = stuInfo.Count(a => a.Sex == "0");
            var lessonData = lessonInfoIBLL.GetAllLesson();
            var lessonSortDetailData = cdLessonSortDetailIBLL.GetAllList();
            var lessonInfoData = lessonData.GroupJoin(lessonSortDetailData, a => a.LessonSortDetailNo,
                b => b.LessonSortDetailNo, (a, b) => new { a, b });
            var lessonInfoNum = lessonInfoData.Count();
            var lessonInfoSort = lessonInfoData.GroupBy(m => m.a.LessonSortDetailNo)
                .Select(m => new { name = string.IsNullOrEmpty(m.Key) ? "其他" : m.Key, num = m.Count() });
            List<object> lessonInfoSortNum = new List<object>();
            foreach (var item in lessonInfoSort)
            {

                var sortName = lessonSortDetailData.FirstOrDefault(a => a.LessonSortDetailNo == item.name)?.LessonSortDetailName;
                if (string.IsNullOrEmpty(sortName))
                {
                    sortName = "其他";
                }
                lessonInfoSortNum.Add(new { sortName, item.num });

            }
            var classinfoNum = classInfoIBLL.GetAllClass().Count();
            var classRoomNum = classroomInfoIBLL.GetAllList().Count();
            return Success(new { empNum, wEmpNum, mEmpNum, stuNum, wStuNum, mStuNum, lessonInfoNum, lessonInfoSortNum, classinfoNum, classRoomNum });

        }

        private Response NwfInfo(dynamic _)
        {
            var data = nWFSchemeIBLL.GetInfoList();
            var processData = processIbll.GetAllList();

            var dataItemDetails = dataItemIbll.GetDetailList("FlowSort");
            var joinData = data.Join(processData, a => a.F_SchemeId, b => b.F_SchemeId, (a, b) => new { a.F_Category, b.F_IsFinished });
            List<(string name, int num)> processList = new List<(string, int)>();
            List<string> processNum1 = new List<string>();
            foreach (var item in dataItemDetails)
            {
                processList.Add((item.F_ItemName, joinData.Count(a => a.F_Category == item.F_ItemName)));
                processNum1.Add(data.Count(a => a.F_Category == item.F_ItemName).ToString());
            }
            var processNum = data.Count();
            var runNum = joinData.Count(a => a.F_IsFinished == 0);
            var allNum = joinData.Count();

            processList = processList.OrderByDescending(a => Convert.ToInt32(a.num)).ToList();
            var processName = processList.Select(a => a.name).ToList();
            var processValue = processList.Select(a => a.num).ToList();


            return Success(new { processNum, runNum, allNum, processName, processValue, processNum1 });

        }

        private Response StuPunishmentInfo(dynamic _)
        {
            var data = stuPunishmentIBLL.GetAllList();
            var stuData = stuInfoBasicIBLL.GetAllList();
            var classData = classInfoIBLL.GetAllClass();
            var punishData = data.Join(stuData, a => a.StuNo, b => b.StuNo, (a, b) => new { a, b });
            var puClassData = classData.Join(punishData, a => a.ClassNo, b => b.b.ClassNo, (a, b) => new { a, b });
            var AllNum = punishData.Count();
            var TNum = punishData.Count(a => a.b.GenderNo == true);
            var MNum = punishData.Count(a => a.b.GenderNo == false);

            var classGroup = puClassData.GroupBy(a => a.a.Grade).Select(a => new { a.Key }).OrderBy(a => a.Key);
            var gradeName = new List<string>();
            var gradeNum = new List<string>();
            foreach (var gradeItem in classGroup)
            {
                gradeName.Add(gradeItem.Key);
                gradeNum.Add(puClassData.Where(a => a.a.Grade == gradeItem.Key).GroupBy(a => a.a.ClassNo).Count().ToString());

            }
            var gradeAllCount = puClassData.GroupBy(a => a.a.ClassNo).Count().ToString();

            return Success(new { AllNum, TNum, MNum, gradeAllCount, gradeName, gradeNum });

        }
        private Response StuEncourgementInfo(dynamic _)
        {
            var data = stuEncourgementIBLL.GetAllList();
            var stuData = stuInfoBasicIBLL.GetAllList();
            var classData = classInfoIBLL.GetAllClass();
            var punishData = data.Join(stuData, a => a.StuNo, b => b.StuNo, (a, b) => new { a, b });
            var puClassData = classData.Join(punishData, a => a.ClassNo, b => b.b.ClassNo, (a, b) => new { a, b });
            var AllNum = punishData.Count();
            var TNum = punishData.Count(a => a.b.GenderNo == true);
            var MNum = punishData.Count(a => a.b.GenderNo == false);

            var classGroup = puClassData.GroupBy(a => a.a.Grade).Select(a => new { a.Key, num = a.Count() }).OrderBy(a => a.Key);
            var gradeName = new List<string>();
            var gradeNum = new List<string>();
            foreach (var gradeItem in classGroup)
            {
                gradeName.Add(gradeItem.Key);
                gradeNum.Add(puClassData.Where(a => a.a.Grade == gradeItem.Key).GroupBy(a => a.a.ClassNo).Count().ToString());

            }
            var gradeAllCount = puClassData.GroupBy(a => a.a.ClassNo).Count();
            return Success(new { AllNum, TNum, MNum, gradeAllCount, gradeName, gradeNum });

        }

        private Response DormitoryInfo(dynamic _)
        {
            var dormitryInfoList = accommodationIBLL.GetDormitoryList();
            var data = accommodationIBLL.GetAllList();
            var dormitoryNum = data.Count(a => a.BuildType == "1");
            var roomNum = data.Count(a => a.BuildType == "4");
            var mRoomNum = data.Count(a => a.BuildType == "4" && a.Sex == "1");
            var wRoomNum = roomNum - mRoomNum;

            return Success(new { dormitryInfoList, dormitoryNum, roomNum, mRoomNum, wRoomNum });
        }

        private Response StuAttendance(dynamic _)
        {
            var beginTime = DateTime.Now.AddMonths(-12);
            var monthList = new List<DateTime>();
            for (int i = 0; i <= 12; i++)
            {
                monthList.Add(beginTime.AddMonths(i));
            }

            var data = stuAttendanceIBLL.GetAllList().Where(a => a.LessonDate >= beginTime && a.LessonDate <= DateTime.Now);
            var monthData = data.GroupBy(a => Convert.ToDateTime(a.LessonDate).Month).OrderBy(a => a.Key);
            var allattendanceNum = data.Count();
            var allAttendanceYesNum = data.Count(a => a.AttendOrNo == "是");
            var allAttendanceNoNum = allattendanceNum - allAttendanceYesNum;

            var allAttendanceYesRate =
                (Convert.ToDouble(allAttendanceYesNum) / Convert.ToDouble(allattendanceNum)).ToString("0.00");
            var allAttendanceNoRate =
                (Convert.ToDouble(allAttendanceNoNum) / Convert.ToDouble(allattendanceNum)).ToString("0.00");

            var attendanceNumList = monthData.Select(a => new { a.Key, allNum = a.Count(), yesNum = a.Count(b => b.AcademicYearNo == "是") }).ToList();

            var monthInfo = new List<string>();
            var currentYesValue = new List<string>();
            var currentNoValue = new List<string>();
            foreach (var monthItem in monthList)
            {
                var currentInfo = attendanceNumList.FirstOrDefault(a => a.Key == monthItem.Month);
                if (currentInfo != null)
                {
                    currentYesValue.Add((Convert.ToDouble(currentInfo.yesNum) / Convert.ToDouble(currentInfo.allNum)).ToString("0.00"));
                    currentNoValue.Add((Convert.ToDouble(currentInfo.allNum - currentInfo.yesNum) / Convert.ToDouble(currentInfo.allNum)).ToString("0.00"));

                }
                else
                {
                    currentYesValue.Add("0.00");
                    currentNoValue.Add("0.00");
                }
                monthInfo.Add(monthItem.ToString("yy-MM"));
            }



            var majorAttendanceInfo = data.GroupBy(a => a.MajorName).Select(a =>
                new { a.Key, allNum = a.Count(), yesNum = a.Count(b => b.AttendOrNo == "是") });
            var majorNameList = new List<string>();
            var majorValue = new List<string>();
            foreach (var majorItem in majorAttendanceInfo)
            {
                majorNameList.Add(majorItem.Key);
                majorValue.Add((Convert.ToDouble(majorItem.yesNum) / Convert.ToDouble(majorItem.allNum)).ToString("0.00"));
            }

            return Success(new { allAttendanceYesRate, allAttendanceNoRate, monthInfo, currentYesValue, currentNoValue, majorNameList, majorValue });

        }





        #region  获取数据 

        /// <summary> 
        /// 获取页面显示列表分页数据 
        /// <summary> 
        /// <param name="_"></param> 
        /// <returns></returns> 
        public Response GetPageList(dynamic _)
        {
            ReqPageParam parameter = this.GetReqData<ReqPageParam>();
            var data = empInfoIBLL.GetPageList(parameter.pagination, parameter.queryJson);
            var jsonData = new
            {
                rows = data,
                total = parameter.pagination.total,
                page = parameter.pagination.page,
                records = parameter.pagination.records
            };
            return Success(jsonData);
        }
        /// <summary> 
        /// 获取页面显示列表数据 
        /// <summary> 
        /// <param name="_"></param> 
        /// <returns></returns> 
        public Response GetList(dynamic _)
        {
            string queryJson = this.GetReqData();
            var data = empInfoIBLL.GetList(queryJson);
            return Success(data);
        }


        public Response RegisterButton(dynamic _)
        {
            var result = teachSwitchIBLL.FindFirst("js").ToString();
            return Success(result);
        }
        /// <summary> 
        /// 获取表单数据 
        /// <summary> 
        /// <param name="_"></param> 
        /// <returns></returns> 
        public Response GetForm(dynamic _)
        {
            string keyValue = this.GetReqData();
            var EmpInfoData = empInfoIBLL.GetEmpInfoEntity(keyValue);
            var jsonData = new
            {
                EmpInfo = EmpInfoData,
            };
            return Success(jsonData);
        }
        #endregion

        #region  提交数据 


        /// <summary>
        /// 头像
        /// </summary>
        /// <param name="_"></param>
        /// <returns></returns>
        private Response GetSavePhoto(dynamic _)
        {
            var model = this.GetReqData<PhotoModel>();

            var folderId = Guid.NewGuid().ToString();
            string filePath = Config.GetValue("AnnexesFile");
            string uploadDate = DateTime.Now.ToString("yyyyMMdd");
            string FileEextension = ".png";
            string fileGuid = Guid.NewGuid().ToString();
            string virtualPath = string.Format("{0}/{1}/{2}/{3}{4}", filePath, model.account, uploadDate, fileGuid, FileEextension);

            //创建文件夹
            string path = Path.GetDirectoryName(virtualPath);
            Directory.CreateDirectory(path);
            AnnexesFileEntity fileAnnexesEntity = new AnnexesFileEntity();
            if (!System.IO.File.Exists(virtualPath))
            {
                //byte[] bytes = Convert.FromBase64String(model.Base64Url.Replace("data:image/jpeg;base64,", ""));
                byte[] bytes = Convert.FromBase64String(model.Base64Url.Substring(model.Base64Url.IndexOf("base64,") + 7));
                FileInfo file = new FileInfo(virtualPath);
                FileStream fs = file.Create();
                fs.Write(bytes, 0, bytes.Length);
                fs.Close();

                //文件信息写入数据库
                fileAnnexesEntity.F_Id = fileGuid;
                fileAnnexesEntity.F_FileName = "userphoto.png";
                fileAnnexesEntity.F_FilePath = virtualPath;
                fileAnnexesEntity.F_FileSize = bytes.Length.ToString();
                fileAnnexesEntity.F_FileExtensions = FileEextension;
                fileAnnexesEntity.F_FileType = FileEextension.Replace(".", "");
                annexesFileIBLL.SaveEntity(folderId, fileAnnexesEntity);
            }

            var data = new
            {
                Url = virtualPath.Substring(virtualPath.IndexOf("Resource")),
                AnnexesFileId = fileGuid
            };

            return Success(data);
        }

        /// <summary> 
        /// 删除实体数据 
        /// <param name="_"></param> 
        /// <summary> 
        /// <returns></returns> 
        public Response DeleteForm(dynamic _)
        {
            string keyValue = this.GetReqData();
            empInfoIBLL.DeleteEntity(keyValue);
            return Success("删除成功!");
        }
        /// <summary> 
        /// 保存实体数据(新增、修改) 
        /// <param name="_"></param> 
        /// <summary> 
        /// <returns></returns> 
        public Response SaveForm(dynamic _)
        {
            ReqFormEntity parameter = this.GetReqData<ReqFormEntity>();
            EmpInfoEntity entity = parameter.strEntity.ToObject<EmpInfoEntity>();
            empInfoIBLL.SaveEntity(this.userInfo, parameter.keyValue, entity);
            return Success("保存成功!");
        }
        #endregion

        #region  私有类 

        /// <summary> 
        /// 表单实体类 
        /// <summary> 
        private class ReqFormEntity
        {
            public string keyValue { get; set; }
            public string strEntity { get; set; }
        }
        #endregion

    }
}