/// <summary> /// 当班统计 /// </summary> public void Statistics_OnDuty(string ParkingID) { try { IParking iparking = ParkingFactory.GetFactory(); IParkIORecord iorecordfactory = ParkIORecordFactory.GetFactory(); IStatistics_Gather gatherfactory = Statistics_GatherFactory.GetFactory(); IParkChangeshiftrecord ichangeshift = ParkChangeshiftrecordFactory.GetFactory(); IParkOrder iorder = ParkOrderFactory.GetFactory(); IParkBox iparkbox = ParkBoxFactory.GetFactory(); IStatistics_ChangeShift istatisticschangeshift = Statistics_ChangeShiftFactory.GetFactory(); BaseParkinfo parking = iparking.QueryParkingByParkingID(ParkingID); List <ParkBox> boxlist = iparkbox.QueryByParkingID(parking.PKID); if (boxlist != null && boxlist.Count > 0) { foreach (ParkBox box in boxlist) { List <ParkChangeshiftrecord> ondutys = ichangeshift.GetChangeShiftRecord(box.BoxID); if (ondutys == null || ondutys.Count == 0) { continue; } foreach (ParkChangeshiftrecord onduty in ondutys) { Statistics_ChangeShift changeshift = new Statistics_ChangeShift { BoxID = onduty.BoxID, ParkingName = parking.PKName, StartWorkTime = onduty.StartWorkTime, EndWorkTime = onduty.EndWorkTime, ParkingID = parking.PKID, AdminID = onduty.UserID, ChangeShiftID = onduty.RecordID }; DateTime starttime = onduty.StartWorkTime; DateTime endtime = DateTime.Now; if (onduty.EndWorkTime > DateTime.MinValue) { endtime = onduty.EndWorkTime; } //统计相关信息 //查询进场数 changeshift.Entrance_Count = iorecordfactory.EntranceCountByBox(box.BoxID, starttime, endtime); //查询出场数 changeshift.Exit_Count = iorecordfactory.ExitCountByBox(box.BoxID, starttime, endtime); #region 进场卡片类型 List <KeyValue> _InCardType = iorecordfactory.GetInCardTypeByBoxID(box.BoxID, starttime, endtime); if (_InCardType != null && _InCardType.Count > 0) { foreach (var k in _InCardType) { switch (k.KeyName) { case "0": changeshift.VIPCard = k.Key_Value; break; case "1": changeshift.StordCard = k.Key_Value; break; case "2": changeshift.MonthCard = k.Key_Value; break; case "3": changeshift.TempCard = k.Key_Value; break; case "4": changeshift.JobCard = k.Key_Value; break; default: break; } } } #endregion #region 统计放行类型 List <KeyValue> _ReleaseType = iorecordfactory.GetReleaseTypeByBox(box.BoxID, starttime, endtime); if (_ReleaseType != null && _ReleaseType.Count > 0) { foreach (KeyValue k in _ReleaseType) { switch (k.KeyName) { case "0": changeshift.ReleaseType_Normal = k.Key_Value; break; case "1": changeshift.ReleaseType_Charge = k.Key_Value; break; case "2": changeshift.ReleaseType_Free = k.Key_Value; break; case "3": changeshift.ReleaseType_Catch = k.Key_Value; break; } } } #endregion #region 统计费用相关 List <ParkOrder> _orderfee = iorder.GetOrdersByBoxID(parking.PKID, onduty.BoxID, starttime, endtime); if (_orderfee != null && _orderfee.Count > 0) { foreach (ParkOrder o in _orderfee) { changeshift.Receivable_Amount += o.Amount; changeshift.Diff_Amount += o.UnPayAmount; changeshift.Real_Amount = (changeshift.Receivable_Amount - changeshift.Diff_Amount); //支付方式(1.现金、2.微信、3.支付宝、4.网银、5.电子钱包、6.优免卷7.余额 switch (o.PayWay) { case OrderPayWay.Cash: changeshift.Cash_Amount += o.PayAmount; changeshift.Cash_Count++; if (o.DiscountAmount > 0) { changeshift.CashDiscount_Amount += o.DiscountAmount; changeshift.CashDiscount_Count++; changeshift.Discount_Amount += o.DiscountAmount; changeshift.Discount_Count++; } break; case OrderPayWay.WeiXin: case OrderPayWay.Alipay: case OrderPayWay.OnlineBanking: case OrderPayWay.Wallet: changeshift.OnLine_Amount += o.PayAmount; changeshift.OnLine_Count++; if (o.DiscountAmount > 0) { changeshift.OnLineDiscount_Amount += o.DiscountAmount; changeshift.OnLineDiscount_Count++; changeshift.Discount_Amount += o.DiscountAmount; changeshift.Discount_Count++; } break; case OrderPayWay.PreferentialTicket: changeshift.Discount_Amount += o.DiscountAmount; changeshift.Discount_Count++; break; case OrderPayWay.ValueCard: changeshift.StordCard_Amount += o.PayAmount; changeshift.StordCard_Count++; break; } switch (o.OrderType) { //临时卡缴费 case OrderType.TempCardPayment: case OrderType.AreaTempCardPayment: switch (o.PayWay) { case OrderPayWay.WeiXin: case OrderPayWay.Alipay: case OrderPayWay.OnlineBanking: case OrderPayWay.Wallet: changeshift.OnLineTemp_Amount += o.PayAmount; changeshift.OnLineTemp_Count++; break; default: changeshift.Temp_Amount += o.PayAmount; changeshift.Temp_Count++; break; } break; //月卡续期 case OrderType.MonthCardPayment: switch (o.PayWay) { case OrderPayWay.WeiXin: case OrderPayWay.Alipay: case OrderPayWay.OnlineBanking: case OrderPayWay.Wallet: changeshift.OnLineMonthCardExtend_Amount += o.PayAmount; changeshift.OnLineMonthCardExtend_Count++; break; default: changeshift.MonthCardExtend_Amount += o.PayAmount; changeshift.MonthCardExtend_Count++; break; } break; //VIP卡续期 case OrderType.VIPCardRenewal: changeshift.VIPExtend_Count++; break; //储值卡充值 case OrderType.ValueCardRecharge: switch (o.PayWay) { case OrderPayWay.WeiXin: case OrderPayWay.Alipay: case OrderPayWay.OnlineBanking: case OrderPayWay.Wallet: changeshift.OnLineStordCard_Amount += o.PayAmount; changeshift.OnLineStordCard_Count++; break; default: changeshift.StordCardRecharge_Amount += o.PayAmount; changeshift.StordCardRecharge_Count++; break; } break; } } } #endregion using (DbOperator dboperator = ConnectionManager.CreateReadConnection()) { try { dboperator.BeginTransaction(); istatisticschangeshift.Delete(onduty.RecordID, dboperator); istatisticschangeshift.Insert(changeshift, dboperator); dboperator.CommitTransaction(); } catch (Exception ex) { TxtLogServices.WriteTxtLog("添加当班信息异常 异常信息:{0}", ex.Message); dboperator.RollbackTransaction(); } } } } } } catch (Exception ex) { TxtLogServices.WriteTxtLog("当班统计异常 异常信息:{0}", ex.Message); } }
/// <summary> /// 添加当班统计记录 /// </summary> /// <param name="changeshift">当班统计对象模型</param> /// <param name="db"></param> /// <returns></returns> public bool Insert(Statistics_ChangeShift changeshift, DbOperator db) { string strSql = string.Format(@"insert into Statistics_ChangeShift(ParkingID,ParkingName,BoxID,ChangeShiftID,AdminID,StartWorkTime,EndWorkTime,Receivable_Amount, Real_Amount,Diff_Amount,Cash_Amount,Cash_Count,Temp_Amount,Temp_Count,OnLineTemp_Amount,OnLineTemp_Count,StordCard_Amount, StordCard_Count,OnLine_Amount,OnLine_Count,Discount_Amount,Discount_Count,ReleaseType_Normal,ReleaseType_Charge,ReleaseType_Free, ReleaseType_Catch,VIPExtend_Count, Entrance_Count,Exit_Count,VIPCard,StordCard,MonthCard,JobCard,TempCard,OnLineMonthCardExtend_Count,OnLineMonthCardExtend_Amount, MonthCardExtend_Count,MonthCardExtend_Amount,OnLineStordCard_Count,OnLineStordCard_Amount,StordCardRecharge_Count, StordCardRecharge_Amount,CashDiscount_Count,CashDiscount_Amount,OnLineDiscount_Count,OnLineDiscount_Amount,HaveUpdate,LastUpdateTime) values(@ParkingID,@ParkingName,@BoxID,@ChangeShiftID,@AdminID,@StartWorkTime,@EndWorkTime,@Receivable_Amount, @Real_Amount,@Diff_Amount,@Cash_Amount,@Cash_Count,@Temp_Amount,@Temp_Count,@OnLineTemp_Amount,@OnLineTemp_Count,@StordCard_Amount, @StordCard_Count,@OnLine_Amount,@OnLine_Count,@Discount_Amount,@Discount_Count,@ReleaseType_Normal,@ReleaseType_Charge,@ReleaseType_Free, @ReleaseType_Catch,@VIPExtend_Count, @Entrance_Count,@Exit_Count,@VIPCard,@StordCard,@MonthCard,@JobCard,@TempCard,@OnLineMonthCardExtend_Count,@OnLineMonthCardExtend_Amount, @MonthCardExtend_Count,@MonthCardExtend_Amount,@OnLineStordCard_Count,@OnLineStordCard_Amount,@StordCardRecharge_Count, @StordCardRecharge_Amount,@CashDiscount_Count,@CashDiscount_Amount,@OnLineDiscount_Count,@OnLineDiscount_Amount,1,getdate())"); db.ClearParameters(); db.AddParameter("@ParkingID", changeshift.ParkingID); db.AddParameter("@ParkingName", changeshift.ParkingName); db.AddParameter("@BoxID", changeshift.BoxID); db.AddParameter("@ChangeShiftID", changeshift.ChangeShiftID); db.AddParameter("@AdminID", changeshift.AdminID); db.AddParameter("@StartWorkTime", changeshift.StartWorkTime); db.AddParameter("@EndWorkTime", changeshift.EndWorkTime < new DateTime(2013, 1, 1) ? DateTime.MinValue : changeshift.EndWorkTime); db.AddParameter("@Receivable_Amount", changeshift.Receivable_Amount); db.AddParameter("@Real_Amount", changeshift.Real_Amount); db.AddParameter("@Diff_Amount", changeshift.Diff_Amount); db.AddParameter("@Cash_Amount", changeshift.Cash_Amount); db.AddParameter("@Cash_Count", changeshift.Cash_Count); db.AddParameter("@Temp_Amount", changeshift.Temp_Amount); db.AddParameter("@Temp_Count", changeshift.Temp_Count); db.AddParameter("@OnLineTemp_Amount", changeshift.OnLineTemp_Amount); db.AddParameter("@OnLineTemp_Count", changeshift.OnLineTemp_Count); db.AddParameter("@StordCard_Amount", changeshift.StordCard_Amount); db.AddParameter("@StordCard_Count", changeshift.StordCard_Count); db.AddParameter("@OnLine_Amount", changeshift.OnLine_Amount); db.AddParameter("@OnLine_Count", changeshift.OnLine_Count); db.AddParameter("@Discount_Amount", changeshift.Discount_Amount); db.AddParameter("@Discount_Count", changeshift.Discount_Count); db.AddParameter("@ReleaseType_Normal", changeshift.ReleaseType_Normal); db.AddParameter("@ReleaseType_Charge", changeshift.ReleaseType_Charge); db.AddParameter("@ReleaseType_Free", changeshift.ReleaseType_Free); db.AddParameter("@ReleaseType_Catch", changeshift.ReleaseType_Catch); db.AddParameter("@VIPExtend_Count", changeshift.VIPExtend_Count); db.AddParameter("@Entrance_Count", changeshift.Entrance_Count); db.AddParameter("@Exit_Count", changeshift.Exit_Count); db.AddParameter("@VIPCard", changeshift.VIPCard); db.AddParameter("@StordCard", changeshift.StordCard); db.AddParameter("@MonthCard", changeshift.MonthCard); db.AddParameter("@JobCard", changeshift.JobCard); db.AddParameter("@TempCard", changeshift.TempCard); db.AddParameter("@OnLineMonthCardExtend_Count", changeshift.OnLineMonthCardExtend_Count); db.AddParameter("@OnLineMonthCardExtend_Amount", changeshift.OnLineMonthCardExtend_Amount); db.AddParameter("@MonthCardExtend_Count", changeshift.MonthCardExtend_Count); db.AddParameter("@MonthCardExtend_Amount", changeshift.MonthCardExtend_Amount); db.AddParameter("@OnLineStordCard_Count", changeshift.OnLineStordCard_Count); db.AddParameter("@OnLineStordCard_Amount", changeshift.OnLineStordCard_Amount); db.AddParameter("@StordCardRecharge_Count", changeshift.StordCardRecharge_Count); db.AddParameter("@StordCardRecharge_Amount", changeshift.StordCardRecharge_Amount); db.AddParameter("@CashDiscount_Count", changeshift.CashDiscount_Count); db.AddParameter("@CashDiscount_Amount", changeshift.CashDiscount_Amount); db.AddParameter("@OnLineDiscount_Count", changeshift.OnLineDiscount_Count); db.AddParameter("@OnLineDiscount_Amount", changeshift.OnLineDiscount_Amount); return(db.ExecuteNonQuery(strSql) == 1 ? true : false); }