Ejemplo n.º 1
0
        public ContentResult Export(int year, int month)
        {
            var date  = new DateTime(year, month, 1);
            var book  = new Workbook();
            var sheet = book.Worksheets[0];

            sheet.Name = "考勤统计";
            sheet.Cells[0, 0].PutValue("序号");
            sheet.Cells.SetColumnWidthPixel(0, 40);
            var style = sheet.Cells[0, 0].GetStyle();

            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[0, 0].SetStyle(style);

            sheet.Cells.Merge(0, 0, 2, 1);
            sheet.Cells[0, 1].PutValue("姓名");
            sheet.Cells.SetColumnWidthPixel(1, 60);
            style = sheet.Cells[0, 1].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[0, 1].SetStyle(style);

            sheet.Cells.Merge(0, 1, 2, 1);
            sheet.Cells[0, 2].PutValue("日期及出缺勤情况");
            style = sheet.Cells[0, 2].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[0, 2].SetStyle(style);

            var i = 0;

            while (date.AddDays(i).Month == date.Month)
            {
                i++;

                sheet.Cells[1, 1 + i].PutValue(i);
                sheet.Cells.SetColumnWidthPixel(1 + i, 30);
            }
            sheet.Cells.Merge(0, 2, 1, i);
            sheet.Cells[0, 1 + i + 1].PutValue("缺勤");
            sheet.Cells.SetColumnWidthPixel(1 + i + 1, 60);
            style = sheet.Cells[0, 1 + i + 1].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[0, 1 + i + 1].SetStyle(style);
            sheet.Cells.Merge(0, 1 + i + 1, 1, 6);

            sheet.Cells[1, 1 + i + 1].PutValue("病假");
            style = sheet.Cells[1, 1 + i + 1].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[1, 1 + i + 1].SetStyle(style);

            sheet.Cells[1, 1 + i + 2].PutValue("事假");
            style = sheet.Cells[1, 1 + i + 2].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[1, 1 + i + 2].SetStyle(style);

            sheet.Cells[1, 1 + i + 3].PutValue("调休");
            style = sheet.Cells[1, 1 + i + 3].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[1, 1 + i + 3].SetStyle(style);

            sheet.Cells[1, 1 + i + 4].PutValue("公休");
            style = sheet.Cells[1, 1 + i + 4].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[1, 1 + i + 4].SetStyle(style);

            sheet.Cells[1, 1 + i + 5].PutValue("出差");
            style = sheet.Cells[1, 1 + i + 5].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[1, 1 + i + 5].SetStyle(style);

            sheet.Cells[1, 1 + i + 6].PutValue("其他");
            style = sheet.Cells[1, 1 + i + 6].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            sheet.Cells[1, 1 + i + 6].SetStyle(style);

            var user = OperatorProvider.Provider.Current();
            var bll  = new WorkmeetingBLL();
            var data = bll.GetSigninData(user.DeptId, year, month);

            for (int j = 0; j < data.Count; j++)
            {
                sheet.Cells[j + 2, 0].PutValue(j + 1);
                sheet.Cells[j + 2, 1].PutValue(data[j].UserName);

                var cnt1 = 0d;
                var cnt2 = 0d;
                var cnt3 = 0d;
                var cnt4 = 0d;
                var cnt5 = 0d;
                var cnt6 = 0d;

                var m = 0;
                while (date.AddDays(m).Month == date.Month)
                {
                    var signins = data[j].Signins.Where(x => x.MeetingStartTime > date.AddDays(m) && x.MeetingStartTime < date.AddDays(m + 1)).ToList();

                    if (signins.Count > 0)
                    {
                        var g = signins.GroupBy(x => new { x.MeetingId, x.MeetingStartTime }).OrderByDescending(x => x.Key.MeetingStartTime).First();
                        switch (g.Count())
                        {
                        case 1:
                            if (g.First().IsSignin)
                            {
                                sheet.Cells[j + 2, m + 2].PutValue("/");
                            }
                            else
                            {
                                sheet.Cells[j + 2, m + 2].PutValue(g.First().Reason);
                                switch (g.First().Reason)
                                {
                                case "病假":
                                    cnt1 = cnt1 + 0.5;
                                    break;

                                case "事假":
                                    cnt2 = cnt2 + 0.5;
                                    break;

                                case "调休":
                                    cnt3 = cnt3 + 0.5;
                                    break;

                                case "公休":
                                    cnt4 = cnt4 + 0.5;
                                    break;

                                case "出差":
                                    cnt5 = cnt5 + 0.5;
                                    break;

                                case "其他":
                                    cnt6 = cnt6 + 0.5;
                                    break;

                                default:
                                    break;
                                }
                            }
                            break;

                        case 2:
                            var start = g.OrderBy(x => x.CreateDate).First();
                            var end   = g.OrderBy(x => x.CreateDate).Last();
                            switch (g.Count(x => x.IsSignin))
                            {
                            case 0:
                                sheet.Cells[j + 2, m + 2].PutValue(start.Reason);
                                switch (start.Reason)
                                {
                                case "病假":
                                    cnt1 = cnt1 + 0.5;
                                    break;

                                case "事假":
                                    cnt2 = cnt2 + 0.5;
                                    break;

                                case "调休":
                                    cnt3 = cnt3 + 0.5;
                                    break;

                                case "公休":
                                    cnt4 = cnt4 + 0.5;
                                    break;

                                case "出差":
                                    cnt5 = cnt5 + 0.5;
                                    break;

                                case "其他":
                                    cnt6 = cnt6 + 0.5;
                                    break;

                                default:
                                    break;
                                }
                                switch (end.Reason)
                                {
                                case "病假":
                                    cnt1 = cnt1 + 0.5;
                                    break;

                                case "事假":
                                    cnt2 = cnt2 + 0.5;
                                    break;

                                case "调休":
                                    cnt3 = cnt3 + 0.5;
                                    break;

                                case "公休":
                                    cnt4 = cnt4 + 0.5;
                                    break;

                                case "出差":
                                    cnt5 = cnt5 + 0.5;
                                    break;

                                case "其他":
                                    cnt6 = cnt6 + 0.5;
                                    break;

                                default:
                                    break;
                                }
                                break;

                            case 1:
                                var reason = start.IsSignin ? end.Reason : start.Reason;
                                sheet.Cells[j + 2, m + 2].PutValue(reason);
                                switch (reason)
                                {
                                case "病假":
                                    cnt1 = cnt1 + 0.5;
                                    break;

                                case "事假":
                                    cnt2 = cnt2 + 0.5;
                                    break;

                                case "调休":
                                    cnt3 = cnt3 + 0.5;
                                    break;

                                case "公休":
                                    cnt4 = cnt4 + 0.5;
                                    break;

                                case "出差":
                                    cnt5 = cnt5 + 0.5;
                                    break;

                                case "其他":
                                    cnt6 = cnt6 + 0.5;
                                    break;

                                default:
                                    break;
                                }
                                break;

                            default:
                                sheet.Cells[j + 2, m + 2].PutValue("/");
                                break;
                            }
                            break;

                        default:
                            break;
                        }
                    }

                    m++;
                }


                if (cnt1 > 0)
                {
                    sheet.Cells[j + 2, m + 2].PutValue(cnt1);
                }
                if (cnt2 > 0)
                {
                    sheet.Cells[j + 2, m + 2 + 1].PutValue(cnt2);
                }
                if (cnt3 > 0)
                {
                    sheet.Cells[j + 2, m + 2 + 2].PutValue(cnt3);
                }
                if (cnt4 > 0)
                {
                    sheet.Cells[j + 2, m + 2 + 3].PutValue(cnt4);
                }
                if (cnt5 > 0)
                {
                    sheet.Cells[j + 2, m + 2 + 4].PutValue(cnt5);
                }
                if (cnt6 > 0)
                {
                    sheet.Cells[j + 2, m + 2 + 5].PutValue(cnt6);
                }
            }

            style = sheet.Cells[0, 0].GetStyle();
            style.HorizontalAlignment = TextAlignmentType.Center;
            style.VerticalAlignment   = TextAlignmentType.Center;
            style.Borders[BorderType.TopBorder].Color        = System.Drawing.Color.Black;
            style.Borders[BorderType.TopBorder].LineStyle    = CellBorderType.Thin;
            style.Borders[BorderType.BottomBorder].Color     = System.Drawing.Color.Black;
            style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
            style.Borders[BorderType.LeftBorder].Color       = System.Drawing.Color.Black;
            style.Borders[BorderType.LeftBorder].LineStyle   = CellBorderType.Thin;
            style.Borders[BorderType.RightBorder].Color      = System.Drawing.Color.Black;
            style.Borders[BorderType.RightBorder].LineStyle  = CellBorderType.Thin;

            var range = sheet.Cells.CreateRange(0, 0, data.Count + 2, i + 8);

            range.ApplyStyle(style, new StyleFlag()
            {
                All = true
            });

            book.Save(System.Web.HttpContext.Current.Response, "考勤统计表.xlsx", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Xlsx));

            return(Content(null));
        }