public static void UpdatePayEst(int ledger) { YDS6000.BLL.DataProcess.PayEstBLL bll = new YDS6000.BLL.DataProcess.PayEstBLL(ledger, Config.Uid); // DateTime dtTime = DateTime.Now; DataTable dtRateInfo = bll.GetRateInfo(); DataTable dtSource = bll.GetPayEstInfo(); dtSource.Columns.Add("UseVal", typeof(System.Decimal)); /**/ dtSource.Columns.Add("UseAmt", typeof(System.Decimal)); /*物业费金额*/ StringBuilder strFilter = new StringBuilder(); int point = 2; #region 计算物业费 foreach (DataRow dr in dtSource.Rows) { int attrib = CommFunc.ConvertDBNullToInt32(dr["Attrib"]); int isDefine = CommFunc.ConvertDBNullToInt32(dr["IsDefine"]); int bank = CommFunc.ConvertDBNullToInt32(dr["Bank"]); int isCtl = CommFunc.ConvertDBNullToInt32(dr["IsCtl"]); decimal area = CommFunc.ConvertDBNullToDecimal(dr["Area"]); int rate_id = CommFunc.ConvertDBNullToInt32(dr["Rate_id"]); int rule = CommFunc.ConvertDBNullToInt32(dr["Rule"]); string unit = CommFunc.ConvertDBNullToString(dr["Unit"]); decimal unitBase = CommFunc.ConvertDBNullToDecimal(dr["UnitBase"]); unitBase = unitBase == 0 ? 1 : unitBase; if (rate_id == 0) { continue; } //////// //////// decimal useAmt = 0; #region 计算金额 if (isCtl == 0) {/*使用系统计算*/ foreach (DataRow drRate in dtRateInfo.Select("Rate_id=" + rate_id)) { string pStart = CommFunc.ConvertDBNullToString(drRate["PStart"]); string pEnd = CommFunc.ConvertDBNullToString(drRate["PEnd"]); decimal price = CommFunc.ConvertDBNullToDecimal(drRate["Price"]); ///////////////////////////////////////////////////////////////////// bool isBindGo = false; if (RateUnit.Area.ToString().Equals(unit)) { #region 平方计算 if (rule == 0) { isBindGo = true; } else if (rule == 1) { /*按平方的日期计算*/ DateTime dtFm = CommFunc.ConvertDBNullToDateTime(pStart); DateTime dtTo = CommFunc.ConvertDBNullToDateTime(pEnd); if (dtTime > dtFm && dtTime <= dtTo) { isBindGo = true; } } else if (rule == 2) { decimal nStart = CommFunc.ConvertDBNullToDecimal(pStart); decimal nEnd = CommFunc.ConvertDBNullToDecimal(pEnd); if (area > nStart && area <= nEnd) { isBindGo = true; } } if (isBindGo == true) { useAmt = Math.Round((area / unitBase) * price, point, MidpointRounding.AwayFromZero); } #endregion } else if (RateUnit.Bank.ToString().Equals(unit)) { /*按户数计算*/ #region 户数计算 if (rule == 0) { isBindGo = true; } else if (rule == 1) { /*按平方的日期计算*/ DateTime dtFm = CommFunc.ConvertDBNullToDateTime(pStart); DateTime dtTo = CommFunc.ConvertDBNullToDateTime(pEnd); if (dtTime > dtFm && dtTime <= dtTo) { isBindGo = true; } } else if (rule == 2) { decimal nStart = CommFunc.ConvertDBNullToDecimal(pStart); decimal nEnd = CommFunc.ConvertDBNullToDecimal(pEnd); if (bank > nStart && bank <= nEnd) { isBindGo = true; } } if (isBindGo == true) { useAmt = Math.Round((bank / unitBase) * price, point, MidpointRounding.AwayFromZero); } #endregion } if (isBindGo == true) { break; } } } else { } #endregion dr["UseAmt"] = useAmt; /////// } #endregion bll.UpdatePayEst(dtSource);/*更新*/ }