Esempio n. 1
0
        /// <summary>
        /// 统计月度数据
        /// </summary>
        /// <param name="context"></param>
        public void CountYue(HttpContext context)
        {
            string year = context.Request["year"];
            string yue = context.Request["yue"];
            string retext = "{{ \"ok\":{0},\"msg\":\"{1}\",\"d\":@替换对象@ }}";
            bool ok = false;
            string mesg = "";
            DateTime str = new DateTime();//起始日期
            DateTime end = new DateTime();//结束日期
            DateTime day = DateTime.Parse(year + "-" + yue + "-1");
            RetTjQuJian(day, ref str, ref end);

            ok = prScDate(str, end, ref mesg);//检查站点数据是否上传

            if (ok)
            {
                try
                {
                    CountCWGas Cw = new CountCWGas(str, end);//创建财务报表统计
                    Cw.year = int.Parse(year);//设置统计月度
                    Cw.yue = int.Parse(yue);
                    Cw.getCWData();//生成财务数据
                    System.Threading.Thread.Sleep(1000);//延时1秒
                    CreateCWExcel(year, yue, context, Cw);//生成财务报表Excel pdf swf文档

                    CountYueGas TJ = new CountYueGas(str, end);//创建月度统计对象
                    TJ.year = int.Parse(year);//设置统计月度
                    TJ.yue = int.Parse(yue);
                    TJ.CountBzDay();//开始统计
                    CreateYueExcl(year, yue, context, TJ);//生成Excel 和 Html 的月报表
                    ok = true;
                    mesg = "数据已经重新生成完毕!";
                }
                catch (Exception e)
                {
                    ok = false;
                    mesg = e.Message + "<br/><span  style='font-size: 18; color: #FF0000'>请检查站点上报数据是否完整</span>";
                }
            }

            retext = string.Format(retext, ok.ToString().ToLower(), mesg);
            retext = retext.Replace("@替换对象@", "{}");
            Sys.DebugMes(retext);
            context.Response.Write(retext);
        }
Esempio n. 2
0
        /// <summary>
        /// 创建 财务附表表Excel
        /// </summary>
        private bool CreateCWExcel(string year, string yue, HttpContext context, CountCWGas Cw)
        {
            string template = HttpContext.Current.Server.MapPath("~/CNGGAS/BB/template/单位统计模板.xls");//模板文件
            string newFile = HttpContext.Current.Server.MapPath("~/CNGGAS/BB/" + year + "/" + yue + "/财务附表.xls");//报表文件文件
            string pdfFile = HttpContext.Current.Server.MapPath("~/CNGGAS/BB/" + year + "/" + yue + "/财务附表.pdf");//报表文件文件
            string swfFile = HttpContext.Current.Server.MapPath("~/CNGGAS/BB/" + year + "/" + yue + "/财务附表.swf");//报表文件文件
            string viewPaht = HttpContext.Current.Server.MapPath("~/CNGGAS/BB/" + year + "/" + yue);//报表文件文件目录
            if (System.IO.Directory.Exists(viewPaht) == false)
            {
                FileManager.CreateFolder(viewPaht);
            }
            bool ok = FileManager.CopyFile(template, newFile);
            if (ok == false)
            {
                return false;
            }

            MyExcel ME = new MyExcel();
            ME.Open(newFile);

            #region 第一步 IC卡充值,消费 写入

            ME.ActivateSheet("IC卡消费、充值统计");
            string txt = string.Format("系统统计时间:{0} 当班(白班)接班 至 {1} 当班(夜班)交班", Cw.Str.ToShortDateString(),
                                       Cw.End.ToShortDateString());
            ME.WriteStr(txt, 3, 1);//时间范围
            txt = string.Format("系统统计时间:{0} 至 {1} ", Cw.Str.ToShortDateString(),
                                       Cw.End.ToShortDateString());
            ME.WriteStr(txt, 33, 1);//时间范围

            foreach (CW_zdGunYuGouMod my in Cw.myGunYuGou)
            {
                string sheetName = "";
                int row = 0;//储存底数报表对应行号

                ME.ActivateSheet("IC卡消费、充值统计");
                if (my.Zd == 2)
                {
                    sheetName = "月度汇总(南高)";
                    row = 10;
                    ME.WriteStr(my.充值金额.ToString(), 36, 5);//充值金额
                    ME.WriteStr(Cw.Str.ToShortDateString() + " 0:00:00", 36, 3);//起始时间
                    ME.WriteStr(Cw.End.ToShortDateString() + " 23:59:59", 36, 4);//结束时间
                }
                if (my.Zd == 3)
                {
                    row = 17;
                    sheetName = "月度汇总(西路)";
                    ME.WriteStr(my.充值金额.ToString(), 37, 5);//充值金额
                    ME.WriteStr(Cw.Str.ToShortDateString() + " 0:00:00", 37, 3);//起始时间
                    ME.WriteStr(Cw.End.ToShortDateString() + " 23:59:59", 37, 4);//结束时间
                }
                if (my.Zd == 4)
                {
                    row = 5;
                    sheetName = "月度汇总(麻柳沱)";
                    ME.WriteStr(my.充值金额.ToString(), 35, 5);//充值金额
                    ME.WriteStr(Cw.Str.ToShortDateString() + " 0:00:00", 35, 3);//起始时间
                    ME.WriteStr(Cw.End.ToShortDateString() + " 23:59:59", 35, 4);//结束时间
                }

                //每枪 预购金额
                for (int i = 0; i < my.Guns; i++)
                {
                    ME.WriteStr(my.GunYuGou[i].GunStr, row + i, 3);//起始时间
                    ME.WriteStr(my.GunYuGou[i].GunEnd, row + i, 4);//结束时间
                    ME.WriteStr(my.GunYuGou[i].预购金额.ToString(), row + i, 5);//预购金额
                }
            }
            #endregion

            #region 第二部 公交车数据写入
            foreach (CW_zdGunYuGouMod my in Cw.myGunYuGou)
            {
                ME.ActivateSheet("公交月度");
                if (my.Zd == 2)
                {
                    continue;
                }
                if (my.Zd == 3 || my.Zd == 4)
                {
                    for (int i = 0; i < my.GongJiao.Length; i++)
                    {
                        int col = 0;
                        if (my.Zd == 3)
                        {
                            ME.WriteStr(my.GongJiao[i].日期, 5 + i, 1);//写入日期
                            ME.WriteStr(my.GongJiao[i].手工记账.ToString(), 5 + i, 2);//写入手工记账
                            ME.WriteStr(my.GongJiao[i].刷卡记账.ToString(), 5 + i, 3);//写入手工记账
                            ME.WriteStr(my.GongJiao[i].停业时间.ToString(), 5 + i, 5);//写入手工记账
                        }
                        if (my.Zd == 4)
                        {
                            ME.WriteStr(my.GongJiao[i].手工记账.ToString(), 5 + i, 6);//写入手工记账
                            ME.WriteStr(my.GongJiao[i].刷卡记账.ToString(), 5 + i, 7);//写入手工记账
                            ME.WriteStr(my.GongJiao[i].停业时间.ToString(), 5 + i, 9);//写入手工记账
                        }
                    }
                }
            }
            ME.WriteStr(Cw.Days.ToString(), 43, 2);//写入天数

            #endregion

            #region 第三步 记账单位合计数写入 , 记账单位 分站合计数

            string sheet = "";
            CW_月度统计Mod d = null;
            CW_JiZhangDanWen[] jz = null;
            for (int i = 0; i < 4; i++)
            {
                switch (i)
                {
                    case 0: { sheet = "月度汇总"; d = Cw.月度汇总; jz = Cw.记账单位合计; } break;//总表合计
                    case 1: { sheet = "月度汇总(南高)"; d = Cw.myData[0]; jz = Cw.myGunYuGou[0].JiZhang; } break;//南高
                    case 2: { sheet = "月度汇总(西路)"; d = Cw.myData[1]; jz = Cw.myGunYuGou[1].JiZhang; } break;//西路
                    case 3: { sheet = "月度汇总(麻柳沱)"; d = Cw.myData[2]; jz = Cw.myGunYuGou[2].JiZhang; } break;//麻柳沱
                }

                ME.ActivateSheet(sheet);
                ME.WriteStr(d.预购刷卡气量.ToString(), 4, 4);
                ME.WriteStr(d.刷卡金额.ToString(), 4, 5);
                ME.WriteStr(d.交款气量.ToString(), 4, 6);
                ME.WriteStr(d.交款金额.ToString(), 4, 7);

                for (int j = 0; j < jz.Length; j++)
                {
                    ME.WriteStr(jz[j].手工.ToString(), 4 + (j + 1) * 2, 3);
                    ME.WriteStr(jz[j].刷卡.ToString(), 5 + (j + 1) * 2, 3);
                    if (jz[j].单位名称 == "公交公司")
                    {
                        continue;
                    }
                    ME.WriteStr(jz[j].价格.ToString(), 4 + (j + 1) * 2, 5);
                }
            }

            #endregion

            #region 第四步  记账单位表统计

            string SQL = @"SELECT a.[日期]
                                                  ,a.[记账单位名称]
                                                  ,sum(a.[刷卡记账气量]) as 刷卡
                                                  ,sum(a.[手工记账气量]) as 手工
                                                  ,b.编号
                                              FROM [CNGQT].[dbo].[SC_记账明细] a LEFT JOIN cngqt.dbo.SC_记账单位名称 b
                                              on b.记账单位名称=a.[记账单位名称]
                                            where 日期 between '@起始日期@' and '@结束日期@'
                                             group by a.日期,a.记账单位名称,b.编号 order by 日期";
            SQL = SQL.Replace("@起始日期@", Cw.Str.ToShortDateString());
            SQL = SQL.Replace("@结束日期@", Cw.End.ToShortDateString());
            DAL dal = new DAL();
            DataTable dt = dal.RunSqlDataTable(SQL);
            ME.ActivateSheet("记账单位统计表");
            // ME.WriteStr(Cw.Days.ToString(), 33, 5); //插入统计天数

            for (int i = 0; i < Cw.Days; i++)//写入日期标题)
            {
                string dtext = Cw.Str.AddDays(i).ToString("MM月dd日");
                ME.WriteStr(dtext, 1, 3 + i);
            }

            foreach (DataRow row in dt.Rows)
            {
                DateTime rq = DateTime.Parse(row["日期"].ToString());
                int col = (rq - Cw.Str).Days;//取日期间隔 确定列数
                int r = int.Parse(row["编号"].ToString());
                double sk = double.Parse(row["刷卡"].ToString());
                double sg = double.Parse(row["手工"].ToString());
                ME.WriteStr(sk.ToString(), r * 2 + 1, 3 + col);
                ME.WriteStr(sg.ToString(), r * 2, 3 + col);
            }
            ME.HideSheet("记账单位统计表");

            #endregion

            #region 最后一步:生成 excel,pdf,Swf 文档
            ME.Save();
            ME.SavePdf(pdfFile);//保存为pdf文档
            Sys.Pdf2Swf(pdfFile, swfFile);//生成 swf文件
            //转换为图片
            //myConvert.ConvertPDF2Image(viewPaht + "\\" + "me.pdf", viewPaht + "\\", "me", 1, gg,
            //                           ImageFormat.Jpeg, myConvert.pdfType.Two);
            ME.Save();
            ME.Close();
            #endregion

            return true;
        }