void ButtonSaveAddClick(object sender, EventArgs e) { //保存数据 DataGridViewSelectedRowCollection dsc = dataGridView1.SelectedRows; foreach (DataGridViewRow row in dsc) { string ss = row.Cells["RateID"].Value + "\n"; int i_RateID = Convert.ToInt32(row.Cells["RateID"].Value.ToString()); WyRates tNew = new WyRates(); tNew.RateID = i_RateID; tNew.WyID = i_WyID; BLL.WyInfosBLL.AddWyRate(tNew); } this.Close(); }
//添加新的 public static void AddWyRate(WyRates tNew) { ISession session = NHibernateHelper.sessionFactory.OpenSession(); ITransaction tx = session.BeginTransaction(); try { session.Save(tNew); tx.Commit(); session.Close(); } catch (Exception e) { Debug.Assert(false, e.Message); tx.Rollback(); session.Close(); } }
//删除 public static void DelWyRate(int i_WyRateID) { //ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory(); ISession session = NHibernateHelper.OpenSession(); ITransaction tx = session.BeginTransaction(); WyRates toDelete = session.Get <WyRates>(i_WyRateID); try { session.Delete(toDelete); tx.Commit(); session.Close(); } catch (Exception e) { Debug.Assert(false, e.Message); tx.Rollback(); session.Close(); } }
//单独计费 public static void CalSingleJF(string s_PeriodNo, string s_CustomerID, Label lStatus) { //1.先查是否能计费,只要有1笔记录有【已收费】或【免收】 Object[] parms = new object[2]; parms[0] = new object(); parms[0] = Convert.ToInt32(s_CustomerID); parms[1] = new object(); parms[1] = s_PeriodNo; int i_rtn = Convert.ToInt32(SQLiteHelper.ExecuteScalar("SELECT Count(*) FROM ChargeDetail WHERE WyID IN (SELECT WyID FROM WyInfos WHERE CustomerID = @CustomerID ) AND (ChargeStatus = '已收费' OR ChargeStatus = '免收') AND PeriodNo = @PeriodNo ", parms)); if (i_rtn > 0) { MessageBox.Show("当前计费周期已经有收费完成,不能计费!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //2.将表计量的数据填充到ChargeDetail lStatus.Text = "【计量表计费生成...】"; ISession session = NHibernateHelper.OpenSession(); ITransaction tx = session.BeginTransaction(); DataSet ds = new DataSet(); ds = SQLiteHelper.ExecuteDataSet("SELECT RID FROM MeterReading WHERE RStatus='计量计算' AND WyID IN (SELECT WyID FROM WyInfos WHERE CustomerID = @CustomerID ) AND PeriodNo = @PeriodNo ORDER BY MeterClass", parms); DataRow[] drs; drs = ds.Tables[0].Select("1=1"); try { for (int i = 0; i < drs.Length; i++) { int i_RID = Convert.ToInt32(drs[i]["RID"].ToString()); //检查ChargeDetail中是否有此表计量数据 MeterReading tMeterReading = session.Get <MeterReading>(i_RID); lStatus.Text = "【计量表计费生成】:" + tMeterReading.MeterName; Rates tRate = new Rates(); if (tMeterReading.RateID != null) { tRate = session.Get <Rates>(tMeterReading.RateID); } else { tRate = new Rates(); tRate.RateUnit = ""; tRate.RateValue = 0.0m; } IQuery query = session.CreateQuery("FROM ChargeDetail WHERE RID = ? AND PeriodNo = ?"); query.SetParameter(0, tMeterReading.RID); query.SetParameter(1, s_PeriodNo); IList <ChargeDetail> eList = query.List <ChargeDetail>(); if (eList.Count == 0) { int i_Share = 0; //没有表计量记录 ChargeDetail tNew = new ChargeDetail(); tNew.PeriodNo = s_PeriodNo; tNew.WyID = tMeterReading.WyID; tNew.WyName = tMeterReading.WyName; tNew.ChargeName = "表计量费用"; tNew.ChargeStatus = "已计费"; tNew.ChargeUnit = tRate.RateUnit; if (tMeterReading.MeterCanSharing == 1) { //分摊量要计算 tNew.ChargeNum = Convert.ToDecimal(tMeterReading.TotalNum); i_Share = Convert.ToInt32(tMeterReading.ShareNum); } else { //分摊量不计算 tNew.ChargeNum = Convert.ToDecimal(tMeterReading.TotalNum - tMeterReading.ShareNum); i_Share = 0; } tNew.ChargePrice = Convert.ToDecimal(tMeterReading.RateValue); tNew.ChargeYS = tNew.ChargeNum * tNew.ChargePrice; tNew.ChargeSS = 0.0m; tNew.ChargeDate = DateTime.Now; tNew.RID = tMeterReading.RID; tNew.Abstract = "表【" + tMeterReading.MeterName + "】计量:自 " + tMeterReading.StartReading.ToString() + " 至 " + tMeterReading.EndReading.ToString() + "止,调整【" + tMeterReading.AdjustNum.ToString() + "】,分摊【" + i_Share.ToString() + "】"; session.Save(tNew); } else { //有表计量记录 int i_Share = 0; ChargeDetail tOld = session.Get <ChargeDetail>(eList[0].CDNo); tOld.PeriodNo = s_PeriodNo; tOld.WyID = tMeterReading.WyID; tOld.WyName = tMeterReading.WyName; tOld.ChargeName = "表计量费用"; tOld.ChargeStatus = "已计费"; tOld.ChargeUnit = tRate.RateUnit; if (tMeterReading.MeterCanSharing == 1) { //分摊量要计算 tOld.ChargeNum = Convert.ToDecimal(tMeterReading.TotalNum); i_Share = Convert.ToInt32(tMeterReading.ShareNum); } else { //分摊量不计算 tOld.ChargeNum = Convert.ToDecimal(tMeterReading.TotalNum - tMeterReading.ShareNum); i_Share = 0; } tOld.ChargePrice = Convert.ToDecimal(tMeterReading.RateValue); tOld.ChargeYS = tOld.ChargeNum * tOld.ChargePrice; tOld.ChargeSS = 0.0m; tOld.ChargeDate = DateTime.Now; tOld.RID = tMeterReading.RID; tOld.Abstract = "表【" + tMeterReading.MeterName + "】计量:自 " + tMeterReading.StartReading.ToString() + " 至 " + tMeterReading.EndReading.ToString() + "止,调整【" + tMeterReading.AdjustNum.ToString() + "】,分摊【" + i_Share.ToString() + "】"; session.Update(tOld); } Application.DoEvents(); } tx.Commit(); session.Close(); } catch (Exception e) { Debug.Assert(false, e.Message); tx.Rollback(); session.Close(); } //3.循环所有物业,将除计量外的计费全部添加 lStatus.Text = "【物业计费生成...】"; session = NHibernateHelper.OpenSession(); tx = session.BeginTransaction(); ds = new DataSet(); ds = SQLiteHelper.ExecuteDataSet("SELECT WyRateID,WyID,RateID FROM WyRates WHERE WyID IN (SELECT WyID FROM WyInfos WHERE CustomerID = @CustomerID)", s_CustomerID); drs = ds.Tables[0].Select("1=1"); try { for (int i = 0; i < drs.Length; i++) { int i_WyRateID = Convert.ToInt32(drs[i]["WyRateID"].ToString()); WyRates tWyRate = session.Get <WyRates>(i_WyRateID); //检查ChargeDetail中是否有此收费的数据 WyInfos tWyInfo = session.Get <WyInfos>(tWyRate.WyID); lStatus.Text = "【物业计费生成】:" + tWyInfo.WyName; Rates tRate = session.Get <Rates>(tWyRate.RateID); IQuery query = session.CreateQuery("FROM ChargeDetail WHERE WyRateID = ? AND PeriodNo = ?"); query.SetParameter(0, tWyRate.WyRateID); query.SetParameter(1, s_PeriodNo); IList <ChargeDetail> eList = query.List <ChargeDetail>(); if (eList.Count == 0) { int i_Share = 0; //没有此收费记录 ChargeDetail tNew = new ChargeDetail(); tNew.PeriodNo = s_PeriodNo; tNew.WyID = tWyInfo.WyID; tNew.WyName = tWyInfo.WyName; tNew.ChargeName = tRate.RateName; tNew.ChargeStatus = "已计费"; tNew.ChargeUnit = tRate.RateUnit; //收费费率的单位 建筑面积,套内面积,公摊面积,人口数,固定金额 switch (tRate.RateUnit) { case "建筑面积": tNew.ChargeNum = Convert.ToDecimal(tWyInfo.JZArea); tNew.ChargePrice = Convert.ToDecimal(tRate.RateValue); break; case "套内面积": tNew.ChargeNum = Convert.ToDecimal(tWyInfo.TNArea); tNew.ChargePrice = Convert.ToDecimal(tRate.RateValue); break; case "公摊面积": tNew.ChargeNum = Convert.ToDecimal(tWyInfo.GTArea); tNew.ChargePrice = Convert.ToDecimal(tRate.RateValue); break; default: tNew.ChargeNum = tRate.RateValue; tNew.ChargePrice = 1.0m; break; } tNew.ChargeYS = tNew.ChargeNum * tNew.ChargePrice; tNew.ChargeSS = 0.0m; tNew.ChargeDate = DateTime.Now; tNew.Abstract = "物业【" + tWyInfo.WyName + "】的【 " + tRate.RateName + " 】收费项 "; tNew.WyRateID = tWyRate.WyRateID; session.Save(tNew); } else { //有此收费记录 ChargeDetail tOld = session.Get <ChargeDetail>(eList[0].CDNo); tOld.PeriodNo = s_PeriodNo; tOld.WyID = tWyInfo.WyID; tOld.WyName = tWyInfo.WyName; tOld.ChargeName = tRate.RateName; tOld.ChargeStatus = "已计费"; tOld.ChargeUnit = tRate.RateUnit; //收费费率的单位 建筑面积,套内面积,公摊面积,人口数,固定金额 switch (tRate.RateUnit) { case "建筑面积": tOld.ChargeNum = Convert.ToDecimal(tWyInfo.JZArea); tOld.ChargePrice = Convert.ToDecimal(tRate.RateValue); break; case "套内面积": tOld.ChargeNum = Convert.ToDecimal(tWyInfo.TNArea); tOld.ChargePrice = Convert.ToDecimal(tRate.RateValue); break; case "公摊面积": tOld.ChargeNum = Convert.ToDecimal(tWyInfo.GTArea); tOld.ChargePrice = Convert.ToDecimal(tRate.RateValue); break; default: tOld.ChargeNum = tRate.RateValue; tOld.ChargePrice = 1.0m; break; } tOld.ChargeYS = tOld.ChargeNum * tOld.ChargePrice; tOld.ChargeSS = 0.0m; tOld.ChargeDate = DateTime.Now; tOld.Abstract = "物业【" + tWyInfo.WyName + "】的【 " + tRate.RateName + " 】收费项 "; tOld.WyRateID = tWyRate.WyRateID; session.Update(tOld); } Application.DoEvents(); } tx.Commit(); session.Close(); } catch (Exception e) { Debug.Assert(false, e.Message); tx.Rollback(); session.Close(); } //4. lStatus.Text = "【计费生成完成!】"; return; }