using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; namespace LYFZ.Software.MainBusiness.StatisticalInquiry { public class FrmStoredReport : Software.UI.StatisticalInquiry.FrmStoredReport { public bool IsQueryByEmployee { get; set; } = false; public string strEmployeeId { get; set; } = ""; LYFZ.BLL.BLL_ErpMemberCard memberCardBll = new BLL.BLL_ErpMemberCard(); public string startTime = ""; public string endTime = ""; public FrmStoredReport() { LYFZ.Software.MainBusiness.DoorCityProcess.PublicCodeClasses.BindGroupStoreName(this.cmbtreevStoreName, StrKeyCode: "qt002"); this.btnQuery.Click += BtnQuery_Click; this.Load += FrmStoredReport_Load; } private void FrmStoredReport_Load(object sender, EventArgs e) { DataRow(); } private void BtnQuery_Click(object sender, EventArgs e) { DataRow(); } /// /// 绑定数据 /// public void DataRow() { Dictionary> tempDicList = new Dictionary>(); List PayCategoryList = new List(); LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate (object obj, BackgroundWorker backgroundWorker) { //string startTime = dtpStart.Value.ToString("yyyy-MM-dd"); //string endTime = dtpEnd.Value.ToString("yyyy-MM-dd"); DataTable storeData = new DataTable(); if(!string.IsNullOrEmpty(startTime) && !string.IsNullOrEmpty(endTime)) { storeData = memberCardBll.GetStoredValueCardData(startTime, endTime,IsQueryByEmployee == true ? strEmployeeId : ""); } else { storeData = memberCardBll.GetStoredValueCardData(IsQueryByEmployee == true ? strEmployeeId : ""); } DataTable totalStoreData = memberCardBll.GetTotalStoredValueCardData(IsQueryByEmployee == true ? strEmployeeId : ""); Dictionary> dicList = new Dictionary>(); for (int i = 0; i < storeData.Rows.Count; i++) { DataRow dr = storeData.Rows[i]; Dictionary tempColumDicList = new Dictionary(); if (dicList.ContainsKey(dr["Mcacl_Number"].ToString())) { tempColumDicList = dicList[dr["Mcacl_Number"].ToString()]; } else { dicList.Add(dr["Mcacl_Number"].ToString(), tempColumDicList); } BindData(dr, ref tempColumDicList); } for (int i = 0; i < totalStoreData.Rows.Count; i++) { DataRow dr = totalStoreData.Rows[i]; Dictionary tempColumDicList = new Dictionary(); if (dicList.ContainsKey(dr["Mcacl_Number"].ToString())) { tempColumDicList = dicList[dr["Mcacl_Number"].ToString()]; } else { dicList.Add(dr["Mcacl_Number"].ToString(), tempColumDicList); } BindTotalData(dr, ref tempColumDicList); } List McNumber = new List(); foreach (string key in dicList.Keys) { McNumber.Add(key); } string searchText = txt_MemberText.Text; if (!string.IsNullOrEmpty(searchText)) { searchText = " and (mc_CradNumber like '%" + searchText + "%' or cus_name like '%" + searchText + "%' or Cus_Telephone like '%" + searchText + "%') "; } else { searchText = ""; } searchText += LYFZ.Software.MainBusiness.DoorCityProcess.PublicCodeClasses.GetGroupQueryWhere(this.cmbtreevStoreName, "Mc_DividedShop"); DataTable memberDataTable = memberCardBll.GetMemberCardDataValue(" Mc_Number in ('" + string.Join("','", McNumber.ToArray()) + "') " + searchText); DataTable memberCardTable = memberCardBll.GetMemberPaymentByCard(" Pay_McNumber in ('" + string.Join("','", McNumber.ToArray()) + "') "); ///分类 PayCategoryList = memberCardTable.AsEnumerable().Where(p => !string.IsNullOrEmpty(p.Field("twoClassName"))).Select(p => p.Field("twoClassName")).Distinct().ToList(); PayCategoryList.Insert(0, "订单前期"); PayCategoryList.Add("礼服消费"); for (int i = 0; i < memberDataTable.Rows.Count; i++) { if (dicList.ContainsKey(memberDataTable.Rows[i]["Mc_Number"].ToString())) { tempDicList.Add(memberDataTable.Rows[i]["Mc_Number"].ToString(), dicList[memberDataTable.Rows[i]["Mc_Number"].ToString()]); Dictionary tempColumDicList = dicList[memberDataTable.Rows[i]["Mc_Number"].ToString()]; if (!tempColumDicList.ContainsKey("McNumber")) { tempColumDicList.Add("McNumber", memberDataTable.Rows[i]["Mc_CradNumber"].ToString()); } if (!tempColumDicList.ContainsKey("McCardHolder")) { tempColumDicList.Add("McCardHolder", memberDataTable.Rows[i]["Cus_Name"].ToString()); } if (!tempColumDicList.ContainsKey("McTelephone")) { tempColumDicList.Add("McTelephone", memberDataTable.Rows[i]["Cus_Telephone"].ToString()); } if (!tempColumDicList.ContainsKey("McCardMoney")) { tempColumDicList.Add("McCardMoney", memberDataTable.Rows[i]["Mc_Money"].ToString()); } if (!tempColumDicList.ContainsKey("McResidualStoredValue")) { if (Convert.ToDecimal(tempColumDicList["McTotalStoredValue"].ToString()) > 0) { if (tempColumDicList.ContainsKey("McTotalConsumption") && tempColumDicList.ContainsKey("McTotalStoredValue")) { string strValue = ((-1 * Convert.ToDecimal(tempColumDicList["McTotalConsumption"].ToString()) / Convert.ToDecimal(tempColumDicList["McTotalStoredValue"].ToString())) * 100).ToString("0.00") + "%"; tempColumDicList.Add("McResidualStoredValue", strValue); } else { tempColumDicList.Add("McResidualStoredValue", ""); } } else { tempColumDicList.Add("McResidualStoredValue", ""); } } foreach(string saleKey in PayCategoryList) { if (!tempColumDicList.ContainsKey(saleKey)) { decimal totalAmount = 0; switch (saleKey) { case "订单前期": totalAmount = memberCardTable.AsEnumerable().Where(p => p.Field("Pay_McNumber") == memberDataTable.Rows[i]["Mc_Number"].ToString() && string.IsNullOrEmpty(p.Field("twoClassName")) && p.Field("Pay_Category").IndexOf("后期") == -1) .Sum(p => p.Field("Pay_AmountOf")); break; case "礼服消费": totalAmount = memberCardTable.AsEnumerable().Where(p => p.Field("Pay_McNumber") == memberDataTable.Rows[i]["Mc_Number"].ToString() && string.IsNullOrEmpty(p.Field("twoClassName")) && p.Field("Pay_Category").IndexOf("后期") != -1 && p.Field("Pay_ReceivableProject").IndexOf("礼服") > -1) .Sum(p => p.Field("Pay_AmountOf")); break; default: totalAmount = memberCardTable.AsEnumerable().Where(p => p.Field("Pay_McNumber") == memberDataTable.Rows[i]["Mc_Number"].ToString() && p.Field("twoClassName") == saleKey).Sum(p => p.Field("Pay_AmountOf") ); break; } tempColumDicList.Add(saleKey, totalAmount.ToString()); } } } //dicList[memberDataTable.Rows[i]["Mc_Number"].ToString()] } }); BindGridControlData(tempDicList, PayCategoryList); } void BindGridControlData(Dictionary> dicList,List payCategoryList) { this.dgv.Rows.Clear(); decimal mcmoney = 0; decimal recharge = 0; decimal giftAmount = 0; decimal withdrawals = 0; decimal consumption = 0; decimal totalStoredValue = 0; decimal totalConsumption = 0; foreach(string strKey in payCategoryList) { if(!dgv.Columns.Contains(strKey)) { System.Windows.Forms.DataGridViewTextBoxColumn viewColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); viewColumn.Name = strKey; viewColumn.HeaderText = strKey; dgv.Columns.Insert(dgv.Columns.Count - 2, viewColumn); } } foreach (string key in dicList.Keys) { Dictionary columList = dicList[key]; int rowIndex = this.dgv.Rows.Add(); this.dgv.Rows[rowIndex].Cells["McCardMoney"].Value = 0; //this.dgv.Rows[rowIndex].Cells["McRecharge"].Value = 0; this.dgv.Rows[rowIndex].Cells["McGiftAmount"].Value = 0; //this.dgv.Rows[rowIndex].Cells["McWithdrawals"].Value = 0; //this.dgv.Rows[rowIndex].Cells["McConsumption"].Value = 0; this.dgv.Rows[rowIndex].Cells["McTotalStoredValue"].Value = 0; this.dgv.Rows[rowIndex].Cells["McTotalConsumption"].Value = 0; this.dgv.Rows[rowIndex].Tag = key; foreach (string columKey in columList.Keys) { if (this.dgv.Columns.Contains(columKey)) { this.dgv.Rows[rowIndex].Cells[columKey].Value = columList[columKey]; } if (columKey.Equals("McCardMoney")) { mcmoney += Convert.ToDecimal(columList[columKey]); } if (columKey.Equals("McRecharge")) { recharge += Convert.ToDecimal(columList[columKey]); } if (columKey.Equals("McGiftAmount")) { giftAmount += Convert.ToDecimal(columList[columKey]); } if (columKey.Equals("McWithdrawals")) { withdrawals += Convert.ToDecimal(columList[columKey]); } if (columKey.Equals("McConsumption")) { consumption += Convert.ToDecimal(columList[columKey]); } if (columKey.Equals("McTotalStoredValue")) { totalStoredValue += Convert.ToDecimal(columList[columKey]); } if (columKey.Equals("McTotalConsumption")) { totalConsumption += Convert.ToDecimal(columList[columKey]); } } } lab_Message.Text = " 余额:" + mcmoney + " 充值金额:" + recharge + " 赠送金额:" + giftAmount + //" 提现金额:" + withdrawals * -1 + " 已消费金额:" + consumption * -1 + " 累计充值金额:" + totalStoredValue + " 累计消费金额:" + totalConsumption * -1; } /// /// 绑定表格数据 /// /// 数据 /// void BindData(DataRow dr, ref Dictionary tempColumDicList) { string keyData = dr["类型"].ToString(); decimal valueData = 0; string giftData = "McGiftAmount";//"McGiftAmount"; decimal giftValueData = 0; switch (keyData) { case "充值": keyData = "McRecharge"; valueData = Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "提现": keyData = "McWithdrawals"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "取现": keyData = "McWithdrawals"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "删除收款扣回": keyData = "McConsumption"; valueData = Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "订单消费": keyData = "McConsumption"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "服务消费": keyData = "McConsumption"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "充值错误扣回": keyData = "McRecharge"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = -1 * Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "送金额": keyData = "McRecharge"; giftValueData = Convert.ToDecimal(dr["操作金额"].ToString()); break; case "删除储值提现扣回": keyData = "McWithdrawals"; valueData = Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; } /// if (tempColumDicList.ContainsKey(keyData)) { tempColumDicList[keyData] = (Convert.ToDecimal(tempColumDicList[keyData]) + Convert.ToDecimal(valueData)).ToString("0.00"); } else { tempColumDicList.Add(keyData, valueData.ToString("0.00")); } if (tempColumDicList.ContainsKey(giftData)) { tempColumDicList[giftData] = (Convert.ToDecimal(tempColumDicList[giftData]) + Convert.ToDecimal(giftValueData)).ToString("0.00"); } else { tempColumDicList.Add(giftData, giftValueData.ToString("0.00")); } } /// /// 绑定表格数据 /// /// 数据 /// void BindTotalData(DataRow dr, ref Dictionary tempColumDicList) { string keyData = dr["类型"].ToString(); decimal valueData = 0; string giftData = "McTotalStoredValue";// "McTotalGift"; decimal giftValueData = 0; switch (keyData) { case "充值": keyData = "McTotalStoredValue"; valueData = Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "提现": //keyData = "McTotalWithdrawals"; keyData = "McTotalConsumption"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "取现": //keyData = "McTotalWithdrawals"; keyData = "McTotalConsumption"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "删除收款扣回": keyData = "McTotalConsumption"; valueData = Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "订单消费": keyData = "McTotalConsumption"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "服务消费": keyData = "McTotalConsumption"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "充值错误扣回": keyData = "McTotalStoredValue"; valueData = -1 * Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = -1 * Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "送金额": //keyData = "McTotalGift"; keyData = "McTotalStoredValue"; giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; case "删除储值提现扣回": keyData = "McTotalConsumption"; valueData = Convert.ToDecimal(dr["操作金额"].ToString()); giftValueData = Convert.ToDecimal(dr["赠送金额"].ToString()); break; } /// if (tempColumDicList.ContainsKey(keyData)) { tempColumDicList[keyData] = (Convert.ToDecimal(tempColumDicList[keyData]) + Convert.ToDecimal(valueData)).ToString("0.00"); } else { tempColumDicList.Add(keyData, valueData.ToString("0.00")); } if (tempColumDicList.ContainsKey(giftData)) { tempColumDicList[giftData] = (Convert.ToDecimal(tempColumDicList[giftData]) + Convert.ToDecimal(giftValueData)).ToString("0.00"); } else { tempColumDicList.Add(giftData, giftValueData.ToString("0.00")); } } } }