using System; using System.Data; using System.Linq; using System.Web.UI.WebControls; using SuperMap.RealEstate.Web.UI.WebControls; using Business = SuperMap.RealEstate.HighWay.Storage.Business; using HCC = HZQR.Common.Common; using HZQR.Common; namespace SuperMap.RealEstate.HighWay.Modules.SellData { public partial class YSSellmaster : Storage.UI.BasePage { #region 方法 -> 页面加载 protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; InitControls(); Business.CommonHelper.BindReportHeader(Label1, PassportInfo.ProvinceUnit, "门店销售流水汇总表", PassportInfo.CityAuthority, Transaction); //设置回车焦点按钮 SetControlClientAction(ButtonStatistics, false); } #endregion #region 方法 -> 初始化页面控件 private void InitControls() { SERVERPART_ID.Items.Clear(); foreach (Business.SERVERPART _SERVERPART in new Business.SERVERPART(Transaction).GetPassportServerPart( PassportInfo.CityAuthority, "1000,1001")) { ListItemEx _ListItemEx = new ListItemEx(); _ListItemEx.Value = _SERVERPART.SERVERPART_CODE; _ListItemEx.Text = _SERVERPART.SERVERPART_NAME; if (!string.IsNullOrWhiteSpace(Request["SERVERPART_ID"]) && Request["SERVERPART_ID"] == _SERVERPART.SERVERPART_ID_Encrypt) { _ListItemEx.Selected = true; SERVERPART_ID.Enabled = false; } SERVERPART_ID.Items.Add(_ListItemEx); } SERVERPARTSHOP_ID.Items.Clear(); if (!string.IsNullOrWhiteSpace(Request["SERVERPART_ID"])) { SERVERPARTSHOP_ID.Items.Add(new ListItemEx("全部", "1=1")); } //绑定对应的商家统计 if (SERVERPART_ID.SelectedValue != "") { foreach (Business.SERVERPARTSHOP _SERVERPARTSHOP in new Business.SERVERPARTSHOP(Transaction).FillCollection( "WHERE ISVALID = 1 AND SHOPTRADE NOT IN ('9032','9999') AND SERVERPART_CODE = '" + SERVERPART_ID.SelectedValue + "' AND NVL(STATISTIC_TYPE,1000) IN (1000,2000) ORDER BY SHOPREGION,SHOPTRADE,SHOPCODE")) { ListItemEx _ListItemEx = new ListItemEx(); _ListItemEx.Text = _SERVERPARTSHOP.SHOPNAME; _ListItemEx.Value = _SERVERPARTSHOP.SHOPCODE; SERVERPARTSHOP_ID.Items.Add(_ListItemEx); } } if (!string.IsNullOrWhiteSpace(Request["StatisticsDay"])) { StatisticsDay.Text = Request["StatisticsDay"].ToDecrypt(); ButtonStatistics_Click(ButtonStatistics, null); } else { StatisticsDay.Text = DateTime.Now.Date.AddDays(-1).ToString(); } } #endregion #region 方法 -> 绑定下拉框门店 protected void SERVERPART_ID_CallBackSetControl(object sender, ClientSetEventArgs e) { Label1.Text = SERVERPART_ID.SelectedItem.Text + "门店销售流水汇总表"; e.SetVisible(GridViewEx1, false); e.SetVisible(fieldset_summary, false); e.SetVisible(fieldset_detail, false); SERVERPARTSHOP_ID.Items.Clear(); //绑定对应的商家统计 if (!string.IsNullOrEmpty(e.Argument) && e.Argument != "1=1") { foreach (Business.SERVERPARTSHOP _SERVERPARTSHOP in new Business.SERVERPARTSHOP(Transaction).FillCollection( "WHERE ISVALID = 1 AND SHOPTRADE NOT IN ('9032','9999') AND SERVERPART_CODE = '" + SERVERPART_ID.SelectedValue + "' AND NVL(STATISTIC_TYPE,1000) IN (1000,2000) ORDER BY SHOPREGION,SHOPTRADE,SHOPCODE")) { ListItemEx _ListItemEx = new ListItemEx(); _ListItemEx.Text = _SERVERPARTSHOP.SHOPNAME; _ListItemEx.Value = _SERVERPARTSHOP.SHOPCODE; SERVERPARTSHOP_ID.Items.Add(_ListItemEx); } } e.SetValue(Label1, Label1.Text); e.SetDropDownListEx(SERVERPARTSHOP_ID); } #endregion #region 方法 -> 查询 protected void ButtonStatistics_Click(object sender, EventArgs e) { //获取查询的门店集合 if (string.IsNullOrEmpty(SERVERPART_ID.SelectedValue)) { Alert("请选择服务区!"); return; } Label1.Text = SERVERPART_ID.SelectedItem.Text + (SERVERPARTSHOP_ID.SelectedValue != "1=1" ? SERVERPARTSHOP_ID.SelectedItem.Text : "") + "
销售流水汇总表"; //查询数据 string WhereSQL = " AND A.SERVERPARTCODE = '" + SERVERPART_ID.SelectedValue + "'"; //查询门店编码 if (!string.IsNullOrEmpty(SERVERPARTSHOP_ID.SelectedValue) && SERVERPARTSHOP_ID.SelectedValue != "1=1") { WhereSQL += " AND A.SHOPCODE = '" + SERVERPARTSHOP_ID.SelectedValue + "'"; } else { string shopSqlWhere = ""; if (!string.IsNullOrEmpty(Request["SERVERPARTSHOP_ID"].ToDecrypt())) { shopSqlWhere += " AND SERVERPARTSHOP_ID IN (" + Request["SERVERPARTSHOP_ID"].ToDecrypt() + ")"; } else if (!string.IsNullOrEmpty(Request["SHOPNAME"].ToDecrypt())) { shopSqlWhere += " AND SHOPSHORTNAME = '" + Request["SHOPNAME"].ToDecrypt() + "'"; } else { if (!string.IsNullOrEmpty(Request["BUSINESS_TRADE"]) && Request["BUSINESS_TRADE"].ToDecrypt() != "1=1") { shopSqlWhere += " AND BUSINESS_TRADE IN (" + Request["BUSINESS_TRADE"].ToDecrypt() + ")"; } if (!string.IsNullOrEmpty(Request["SHOPTRADE"]) && Request["SHOPTRADE"].ToDecrypt() != "1=1") { shopSqlWhere += " AND SHOPTRADE IN (" + Request["SHOPTRADE"].ToDecrypt() + ")"; } if (!string.IsNullOrEmpty(Request["BUSINESS_TYPE"]) && Request["BUSINESS_TYPE"].ToDecrypt() != "1=1") { shopSqlWhere += " AND BUSINESS_TYPE IN (" + Request["BUSINESS_TYPE"].ToDecrypt() + ")"; } } switch (Request["SHOPREGION"]) { case "1": shopSqlWhere += " AND SHOPREGION < 30"; break; case "2": shopSqlWhere += " AND SHOPREGION >= 30"; break; } if (shopSqlWhere != "") { string shopSQLString = string.Format(@"SELECT WM_CONCAT(SERVERPART_CODE || SHOPCODE) FROM HIGHWAY_STORAGE.T_SERVERPARTSHOP WHERE SERVERPART_CODE = '{0}'{1}", SERVERPART_ID.SelectedValue, shopSqlWhere); DataTable dtServerpartShopCodes = new Business.SERVERPARTSHOP(Transaction).ExecuteDataTable(shopSQLString); if (dtServerpartShopCodes.Rows.Count > 0 && dtServerpartShopCodes.Rows[0][0].ToString() != "") { WhereSQL += " AND A.SERVERPARTCODE || A.SHOPCODE IN ('" + dtServerpartShopCodes.Rows[0][0].ToString().Replace(",", "','") + "')"; } } } //查询支付方式 if (!string.IsNullOrEmpty(PAYMENT_TYPE.SelectedValue) && PAYMENT_TYPE.SelectedValue != "1=1") { WhereSQL += " AND A.PAYMENT_TYPE = " + PAYMENT_TYPE.SelectedValue; } //查询抵扣方式 if (!string.IsNullOrEmpty(COUPON_TYPE.SelectedValue) && COUPON_TYPE.SelectedValue != "1=1") { WhereSQL += " AND A.COUPON_TYPE = " + COUPON_TYPE.SelectedValue; } //查询销售时间 if (!string.IsNullOrEmpty(StatisticsDay.Text.Trim())) { WhereSQL += " AND A.SELLMASTER_DATE >= " + DateTime.Parse(StatisticsDay.Text.Trim()).ToString("yyyyMMddHHmmss") + " AND A.SELLMASTER_DATE < " + DateTime.Parse(StatisticsDay.Text.Trim()).AddDays(1).ToString("yyyyMMddHHmmss"); } string SQLString = string.Format(@"SELECT A.*,B.COMMODITY_NAME,B.COMMODITY_BARCODE,B.SELLDETAILS_COUNT,B.SELLDETAILS_PRICE FROM HIGHWAY_SELLDATA.T_YSSELLMASTER A, HIGHWAY_SELLDATA.T_YSSELLDETAILS B WHERE A.SELLMASTER_CODE = B.SELLMASTER_CODE AND A.SELLMASTER_STATE {0}{1}", Request["SELLMASTER_STATE"] == "1" ? "= 1" : "NOT IN (0)", WhereSQL); DataTable dtSellmasterList = new ExchangeData.Business.SELLDATA(Transaction).ExecuteDataTable(SQLString); #region 按照流水主表进行分组,合并显示销售明细 var SummaryList = from p in dtSellmasterList.AsEnumerable() group p by new { t0 = p.Field("SELLMASTER_CODE"), t1 = p.Field("SELLMASTER_DATE"), t2 = p.Field("PAYMENT_GROUP"), t3 = p.Field("TICKET_CODE"), t4 = p.Field("SELLMASTER_COUNT"), t5 = p.Field("SELLMASTER_AMOUNT"), t6 = p.Field("SELLMASTER_OFFPRICE"), t7 = p.Field("CASH_AMOUNT"), t8 = p.Field("PAYMENT_TYPE"), t9 = p.Field("INTERNAL_AMOUNT"), t10 = p.Field("COUPON_TYPE"), t11 = p.Field("SELLMASTER_DESC"), t12 = p.Field("SELLMASTER_TYPE"), t13 = p.Field("MACHINECODE"), t14 = p.Field("SERVERPARTCODE"), t15 = p.Field("SHOPCODE"), TRANSFER_STATE = p.Field("TRANSFER_STATE"), } into g select new { SELLMASTER_CODE = g.Key.t0, SELLMASTER_DATE = g.Key.t1, PAYMENT_GROUP = g.Key.t2, TICKET_CODE = g.Key.t3, SELLMASTER_COUNT = g.Key.t4, SELLMASTER_AMOUNT = g.Key.t5, SELLMASTER_OFFPRICE = g.Key.t6, CASH_AMOUNT = g.Key.t7 == 0 && g.Key.t9 == 0 && g.Key.t10 < 2000 ? g.Key.t5 : g.Key.t7, PAYMENT_TYPE = g.Key.t8, INTERNAL_AMOUNT = g.Key.t7 == 0 && g.Key.t9 == 0 && g.Key.t10 >= 2000 ? g.Key.t5 : g.Key.t9, COUPON_TYPE = g.Key.t10, SELLMASTER_DESC = g.Key.t11, SELLMASTER_TYPE = g.Key.t12, MACHINECODE = g.Key.t13, SERVERPARTCODE = g.Key.t14, SHOPCODE = g.Key.t15, TRANSFER_STATE = g.Key.TRANSFER_STATE, SaleDetail = string.Join(",", g.Select(n => n.Field("COMMODITY_NAME") + "[" + n.Field("COMMODITY_BARCODE") + "](" + n.Field("SELLDETAILS_COUNT") + "*" + n.Field("SELLDETAILS_PRICE") + ")").ToArray()) }; #endregion DataTable dtSummary = dtSellmasterList.Clone(); dtSummary.Columns.Add("SaleDetail", typeof(string)); dtSummary.Columns.Add("TICKETBILL", typeof(decimal)); //微信支付 dtSummary.Columns.Add("OTHERPAY", typeof(decimal)); //支付宝支付 dtSummary.Columns.Add("YUNSHANFU", typeof(decimal)); //云闪付支付 #region 将linq的结果写入DataTable if (SummaryList.ToList().Count > 0) { SummaryList.ToList().ForEach(q => { DataRow _DataRow = dtSummary.NewRow(); string GroupPayDetail = ""; if (!string.IsNullOrWhiteSpace(q.SELLMASTER_DESC)) { //拆解组合支付的内容 foreach (string PayDetail in q.SELLMASTER_DESC.Split(',')) { switch (PayDetail.Split(':')[0]) { case "ALIPAY": _DataRow["OTHERPAY"] = PayDetail.Split(':')[1]; GroupPayDetail += (GroupPayDetail == "" ? "" : ",") + "支付宝:" + PayDetail.Split(':')[1]; break; case "WECHAT": _DataRow["TICKETBILL"] = PayDetail.Split(':')[1]; GroupPayDetail += (GroupPayDetail == "" ? "" : ",") + "微信:" + PayDetail.Split(':')[1]; break; case "UNIONPAY": _DataRow["YUNSHANFU"] = PayDetail.Split(':')[1]; GroupPayDetail += (GroupPayDetail == "" ? "" : ",") + "云闪付:" + PayDetail.Split(':')[1]; break; default: GroupPayDetail += (GroupPayDetail == "" ? "" : ",") + "其他 :" + PayDetail.Split(':')[1]; break; } } } _DataRow["SELLMASTER_CODE"] = q.SELLMASTER_CODE; _DataRow["SELLMASTER_DATE"] = q.SELLMASTER_DATE; _DataRow["PAYMENT_GROUP"] = q.PAYMENT_GROUP; _DataRow["TICKET_CODE"] = q.TICKET_CODE; _DataRow["SELLMASTER_COUNT"] = q.SELLMASTER_COUNT; _DataRow["SELLMASTER_AMOUNT"] = q.SELLMASTER_AMOUNT; _DataRow["SELLMASTER_OFFPRICE"] = q.SELLMASTER_OFFPRICE; _DataRow["CASH_AMOUNT"] = q.CASH_AMOUNT; _DataRow["PAYMENT_TYPE"] = q.PAYMENT_TYPE; _DataRow["INTERNAL_AMOUNT"] = q.INTERNAL_AMOUNT; _DataRow["COUPON_TYPE"] = q.COUPON_TYPE; if (q.TRANSFER_STATE == 0) { _DataRow["SELLMASTER_DESC"] = (GroupPayDetail == "" ? "" : GroupPayDetail + ",") + "人工确认转现金"; } else { _DataRow["SELLMASTER_DESC"] = GroupPayDetail; } _DataRow["SELLMASTER_TYPE"] = q.SELLMASTER_TYPE; _DataRow["MACHINECODE"] = q.MACHINECODE; _DataRow["SERVERPARTCODE"] = q.SERVERPARTCODE; _DataRow["SHOPCODE"] = q.SHOPCODE; _DataRow["SaleDetail"] = q.SaleDetail; dtSummary.Rows.Add(_DataRow); }); } #endregion //增加模糊查询条件筛选 string RowFilterSQL = ""; if (TextBox_Search.Text.Trim() != "") { foreach (SearchItem searchItem in GridViewSearch1.Items) { if (searchItem.Checked) { RowFilterSQL += (RowFilterSQL == "" ? "" : " or ") + searchItem.FieldName + " like '%" + TextBox_Search.Text.Trim() + "%'"; } } } if(Request["SELLMASTER_STATE"] == "1") { RowFilterSQL += (RowFilterSQL == "" ? "" : " and ") + "SELLMASTER_DESC like '%人工确认转现金%'"; } dtSummary.DefaultView.RowFilter = RowFilterSQL; //增加排序选项 foreach (OrderByItem orderByItem in GridViewOrderBy1.Items) { if (orderByItem.Checked) { dtSummary.DefaultView.Sort = orderByItem.FieldName + (GridViewOrderBy1.Checked ? " desc" : ""); } } dtSummary = dtSummary.DefaultView.ToTable(); GridViewEx1.DataSource = dtSummary; GridViewEx1.DataBind(); GridViewEx1.Visible = true; if (dtSummary.Rows.Count > 0 && dtSummary.Rows[0][0].ToString() != "0") { //交易笔数 TICKETCOUNT.Text = dtSummary.Rows.Count.ToString(); //销售金额 FACTAMOUNT.Text = dtSummary.Compute("sum(SELLMASTER_AMOUNT)", "").TryParseToDecimal() + " 元"; //优惠金额 OFFPRICE.Text = dtSummary.Compute("sum(SELLMASTER_OFFPRICE)", "").TryParseToDecimal() + " 元"; //现金支付 CASH.Text = dtSummary.Compute("sum(CASH_AMOUNT)", "PAYMENT_TYPE = 1000").TryParseToDecimal() + " 元"; //微信支付 TICKETBILL.Text = dtSummary.Compute("sum(CASH_AMOUNT)", "PAYMENT_TYPE = 1010").TryParseToDecimal() + dtSummary.Compute("sum(TICKETBILL)", "").TryParseToDecimal() + " 元"; //支付宝支付 OTHERPAY.Text = dtSummary.Compute("sum(CASH_AMOUNT)", "PAYMENT_TYPE = 1020").TryParseToDecimal() + dtSummary.Compute("sum(OTHERPAY)", "").TryParseToDecimal() + " 元"; //银行卡支付 CREDITCARD.Text = dtSummary.Compute("sum(CASH_AMOUNT)", "PAYMENT_TYPE = 1030").TryParseToDecimal() + " 元"; //银联记账 YUNSHANFU.Text = dtSummary.Compute("sum(CASH_AMOUNT)", "PAYMENT_TYPE = 1040").TryParseToDecimal() + dtSummary.Compute("sum(YUNSHANFU)", "").TryParseToDecimal() + " 元"; //企业会员 COUPONTYPE_2010.Text = dtSummary.Compute("sum(INTERNAL_AMOUNT)", "COUPON_TYPE = 2010").TryParseToDecimal() + " 元"; //电子优惠券 COUPONTYPE_2020.Text = dtSummary.Compute("sum(INTERNAL_AMOUNT)", "COUPON_TYPE = 2020").TryParseToDecimal() + " 元"; //大巴优惠券 COUPONTYPE_2030.Text = dtSummary.Compute("sum(INTERNAL_AMOUNT)", "COUPON_TYPE = 2030").TryParseToDecimal() + " 元"; //团购餐券 COUPONTYPE_2040.Text = dtSummary.Compute("sum(INTERNAL_AMOUNT)", "COUPON_TYPE = 2040").TryParseToDecimal() + " 元"; //促销流水 SELLMASTERTYPE_1010.Text = dtSummary.Compute("sum(SELLMASTER_AMOUNT)", "SELLMASTER_TYPE = 1010").TryParseToDecimal() + " 元"; //香烟销售 SELLMASTERTYPE_1020.Text = dtSummary.Compute("sum(SELLMASTER_AMOUNT)", "SELLMASTER_TYPE = 1020").TryParseToDecimal() + " 元"; //在线订单 SELLMASTERTYPE_1030.Text = dtSummary.Compute("sum(SELLMASTER_AMOUNT)", "SELLMASTER_TYPE = 1030").TryParseToDecimal() + " 元"; //稽核补录 SELLMASTERTYPE_1040.Text = dtSummary.Compute("sum(SELLMASTER_AMOUNT)", "SELLMASTER_TYPE = 1040").TryParseToDecimal() + " 元"; //计算客单均价 if (TICKETCOUNT.Text.TryParseToDecimal() > 0) { AVGTICKET.Text = (FACTAMOUNT.Text.TryParseToDecimal() / TICKETCOUNT.Text.TryParseToDecimal()).ToString("0.00") + " 元"; } else { AVGTICKET.Text = "0 元"; } //销售总数 SELLCOUNT.Text = dtSummary.Compute("sum(SELLMASTER_COUNT)", "").ToString(); //机器台数 MACHINECOUNT.Text = dtSummary.DefaultView.ToTable(true, "MACHINECODE").Rows.Count.ToString(); //统计日期 ENDACCOUNT_DATE.Text = StatisticsDay.Text; //显示统计项内容 fieldset_summary.Style.Add("display", "block"); fieldset_detail.Style.Add("display", "block"); } else { TICKETCOUNT.Text = "0"; FACTAMOUNT.Text = "0 元"; OFFPRICE.Text = "0 元"; CASH.Text = "0 元"; TICKETBILL.Text = "0 元"; OTHERPAY.Text = "0 元"; CREDITCARD.Text = "0 元"; YUNSHANFU.Text = "0 元"; COUPONTYPE_2010.Text = "0 元"; COUPONTYPE_2020.Text = "0 元"; COUPONTYPE_2030.Text = "0 元"; COUPONTYPE_2040.Text = "0 元"; SELLMASTERTYPE_1010.Text = "0 元"; SELLMASTERTYPE_1020.Text = "0 元"; SELLMASTERTYPE_1030.Text = "0 元"; SELLMASTERTYPE_1040.Text = "0 元"; AVGTICKET.Text = "0 元"; SELLCOUNT.Text = "0"; MACHINECOUNT.Text = "0"; ENDACCOUNT_DATE.Text = StatisticsDay.Text; fieldset_summary.Style.Add("display", "none"); fieldset_detail.Style.Add("display", "none"); } } #endregion #region 方法 -> 行绑定事件 protected void GridViewEx1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { string _SELLMASTER_CODE = GridViewEx1.DataKeys[e.Row.RowIndex]["SELLMASTER_CODE"].ToString(); string _PAYMENT_TYPE = GridViewEx1.DataKeys[e.Row.RowIndex]["PAYMENT_TYPE"].ToString(); string _COUPON_TYPE = GridViewEx1.DataKeys[e.Row.RowIndex]["COUPON_TYPE"].ToString(); string _SaleDetail = GridViewEx1.DataKeys[e.Row.RowIndex]["SaleDetail"].ToString(); e.Row.Attributes["onclick"] = GridViewEx1.GetOpenPopDialogClientScript("YSSellDetailList.aspx?SELLMASTER_CODE=" + _SELLMASTER_CODE.ToEncrypt() + "&SERVERPART_NAME=" + SERVERPART_ID.SelectedItem.Text.ToEncrypt() + "&TICKET_CODE=" + e.Row.Cells[2].Text.ToEncrypt() + "&SHOPNAME=" + SERVERPARTSHOP_ID.SelectedItem.Text.ToEncrypt()); if (_SaleDetail.Length > 20) { e.Row.ToolTip = _SaleDetail; e.Row.Cells[3].ToolTip = _SaleDetail; e.Row.Cells[3].Text = _SaleDetail.Substring(0, 20) + "..."; } //如果单元格显示0,则隐藏内容,只显示有值的支付金额 for (int CellCount = 6; CellCount < e.Row.Cells.Count - 2; CellCount++) { if (e.Row.Cells[CellCount].Text == "0" || e.Row.Cells[CellCount].Text == "0.00") { e.Row.Cells[CellCount].Text = ""; } } //解析支付方式 if (e.Row.Cells[7].Text != "") { foreach (ListItemEx listItemEx in PAYMENT_TYPE.Items) { if (listItemEx.Value == _PAYMENT_TYPE) { e.Row.Cells[8].Text = listItemEx.Text; break; } } } else { e.Row.Cells[8].Text = ""; } //解析抵扣金额 if (e.Row.Cells[9].Text != "") { foreach (ListItemEx listItemEx in COUPON_TYPE.Items) { if (listItemEx.Value == _COUPON_TYPE) { e.Row.Cells[10].Text = listItemEx.Text; break; } } } else { e.Row.Cells[10].Text = ""; } //解析销售时间 e.Row.Cells[1].Text = HCC.Common.TranslateDateTime(e.Row.Cells[1].Text); } } #endregion #region 方法 -> 导出对应的Excel protected void ButtonExport_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(SERVERPARTSHOP_ID.SelectedValue) || GridViewEx1.Rows.Count == 0) { Alert("请查询出结果后,再导出excel!"); return; } ExcelHelper _ExcelHelper = new ExcelHelper(); _ExcelHelper.GridViewToExcel(Label1.Text + "导出", "门店销售流水汇总表", Label1.Text, "", ENDACCOUNT_DATE.Text, "", "", GridViewEx1, false); } #endregion } }