/// <summary> /// 补充数据 /// </summary> /// <param name="dt">统计日期</param> /// <param name="stationtype">统计类型</param> private void InsertNull(DateTime dt, int stationtype) { using (DataSubmittedEntities db = new DataSubmittedEntities()) { List <RP_Daily> pDailyList = new List <RP_Daily>(); for (int i = 0; i < 4; i++) { //0小型客车,1其他客车,2货车(不包含绿通),3绿通 //每个站只有四条合计数据,每天数据表里一共只有16条 List <RP_Daily> pTemp = db.RP_Daily.Where(s => s.CalcuTime == dt && s.VehType == i && s.StaType == stationtype).ToList(); //如果数据不存在,才补充 if (pTemp.Count <= 0) { RP_Daily pDaily = new RP_Daily(); pDaily.Id = Guid.NewGuid(); pDaily.CrtDate = DateTime.Now; pDaily.VehType = i;//车辆类型 pDaily.StaType = stationtype; pDaily.State = 0; pDaily.OutNum = 0; pDaily.InNum = 0; pDaily.ChagFee = 0; pDaily.CalcuTime = DateTime.Parse(dt.ToShortDateString()); pDailyList.Add(pDaily); } } using (TransactionScope transac = new TransactionScope()) { db.RP_Daily.AddRange(pDailyList); if (pDailyList.Count > 0) { db.SaveChanges(); transac.Complete(); } } } }
/// <summary> /// 统计类型 /// </summary> /// <param name="stationtype">统计段类型</param> /// <param name="datasource">统计段数据源</param> /// <param name="dt">时间</param> /// <returns></returns> private List <RP_Daily> CalcuRP(int stationtype, IEnumerable <DS_DataSource> datasource, DateTime dt, List <int> stationlist) { List <RP_Daily> plist = new List <RP_Daily>(); using (DataSubmittedEntities db = new DataSubmittedEntities()) { for (int i = 0; i < 4; i++) { //0小型客车,1其他客车,2货车(不包含绿通),3绿通 //每个站只有四条合计数据,每天数据表里一共只有16条 //判断各站各车型数据是有已存在,存在进行更新,不存在进行添加 List <RP_Daily> pDailyList = db.RP_Daily.Where(s => s.CalcuTime == dt && s.VehType == i && s.StaType == stationtype).ToList(); RP_Daily pDaily = new RP_Daily(); if (pDailyList.Count > 0) { pDaily = pDailyList.First(); pDaily.State = 1; pDaily.UpdDate = DateTime.Now; } else { pDaily.Id = Guid.NewGuid(); pDaily.CrtDate = DateTime.Now; pDaily.VehType = i;//车辆类型 pDaily.StaType = stationtype; pDaily.State = 0; } byte ptemp = (byte)i; pDaily.OutNum = datasource.Where(p => p.CalcuType == ptemp).Sum(p => p.OutNum); pDaily.InNum = datasource.Where(p => p.CalcuType == ptemp).Sum(p => p.InNum); if (i == 0) { pDaily.ChagFee = this.GetCharge(stationlist, datasource); } if (i == 1) { pDaily.ChagFee = datasource.Where(s => s.CalcuType == 1).Sum(s => s.RecMoney); } if (i == 2) { pDaily.ChagFee = datasource.Where(s => s.CalcuType == 2).Sum(s => s.RecMoney); } if (i == 3) { pDaily.InNum = 0;//入口绿通为0 pDaily.ChagFee = datasource.Where(s => s.CalcuType == 3).Sum(s => s.RecMoney); } pDaily.CalcuTime = DateTime.Parse(dt.ToShortDateString()); if (pDailyList.Count > 0)//进行更新 { using (TransactionScope transac = new TransactionScope()) { db.SaveChanges(); transac.Complete(); } } else { //将实体加入集合 plist.Add(pDaily); } } } return(plist); }
/// <summary> /// 批量修改 /// </summary> /// <param name="args"></param> /// <returns></returns> public CustomResult Update(UpdateDataDailyViewModel args) { CustomResult pReturnValue = new CustomResult(); pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.UpdateFaile; if (args.DataInfo == null) { pReturnValue.ResultKey = (byte)EResult.Succeed; pReturnValue.ResultValue = TipInfo.DataNull; return(pReturnValue); } List <UpdateDataDailyInfo> pNewUpdateData = new List <UpdateDataDailyInfo>(); using (DataSubmittedEntities db = new DataSubmittedEntities()) { var pReportData = db.RP_Daily.Where(s => s.CalcuTime == args.DataDate && s.StaType == args.StationType).ToList(); using (TransactionScope transaction = new TransactionScope()) { try { foreach (var item in args.DataInfo) { //获取查询日期当天的数据 if (item.VehType == SystemConst.SmallCar) { item.VehType = "0"; } if (item.VehType == SystemConst.OtherCar) { item.VehType = "1"; } if (item.VehType == SystemConst.Truk) { item.VehType = "2"; } if (item.VehType == SystemConst.Green) { item.VehType = "3"; } int ptemp = int.Parse(item.VehType); RP_Daily pDataTemp = new RP_Daily(); if (pReportData.Where(i => i.VehType == ptemp).Count() == 1) { pDataTemp = pReportData.Where(i => i.VehType == ptemp).SingleOrDefault(); if (item.ExEn == SystemConst.In) //入口 { pDataTemp.InNum = item.VehNum; //出口 } else { pDataTemp.OutNum = item.VehNum; pDataTemp.ChagFee = item.CarChag * 10000;//转为元,存到数据库 } pDataTemp.UpdDate = DateTime.Now; pDataTemp.State = 1; if (SessionManage.GetLoginUser() != null) { pDataTemp.UpdBy = SessionManage.GetLoginUser().UserName; } } } db.SaveChanges(); transaction.Complete(); pReturnValue.ResultKey = (byte)EResult.Succeed; pReturnValue.ResultValue = TipInfo.UpdateSuccess; } catch (Exception ex) { Common.SystemLog.GetInstance().Log.Info(TipInfo.UpdateDataRepeat, ex); pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.UpdateDataRepeat; } return(pReturnValue); } } }
/// <summary> /// 校正数据 /// </summary> /// <param name="args">校正日期,参考日期,浮动百分比</param> /// <returns></returns> public CustomResult CalibrationData(QueryParameters para) { CustomResult pReturnValue = new CustomResult(); // QueryNaturalInfoViewModel queryNatural = new QueryNaturalInfoViewModel(); //校正浮动范围 double pFloating = para.FloatingRange * 0.01; List <RP_Daily> pDailyList = new List <RP_Daily>(); try { using (DataSubmittedEntities db = new DataSubmittedEntities()) { //判断报表浮动百分比配置是否存在 OT_HDayConfig pds = HolidayConfig.GetInstance().GetById(para.ReportType); if (pds == null) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.CalibrationFaileNoConfig; return(pReturnValue); } //判断报表浮动百分比配置是否正确 if (Math.Abs(para.FloatingRange) > (double)pds.CheckFloat.Value) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.ErrorInfo + "范围应在负%" + pds.CheckFloat.Value + "-正%" + pds.CheckFloat.Value + "之间"; return(pReturnValue); } //获取参考日期符合校正时间段的数据,因为只校正一天的数据,所以只查询开始数据的日期就可以 List <RP_Daily> pRefDataDailyInfo = db.RP_Daily.Where(s => s.CalcuTime == para.LastYearStart && s.StaType == para.StationType).ToList(); //如果参考日期数据为0 则返回失败 if (pRefDataDailyInfo.Count == 0) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.CalibrationFaileRefNoData; return(pReturnValue); } //判断校正数据日期是否合理 if (para.LastYearStart < para.StartTime && para.StartTime < DateTime.Now.AddDays(1)) { //需要校正的数据 var pCheckList = db.RP_Daily.Where(s => s.CalcuTime == para.StartTime && s.StaType == para.StationType).ToList(); //如果校正数据不存在则返回失败 if (pCheckList.Count == 0) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.CalibrationFaileNoData; return(pReturnValue); } using (TransactionScope tran = new TransactionScope()) { foreach (var item in pCheckList) { IEnumerable <RP_Daily> plist = pRefDataDailyInfo.Where(i => i.VehType == item.VehType); if (plist.Count() > 0) { RP_Daily pTemp = plist.First(); item.InNum = (int)(pTemp.InNum + pTemp.InNum * pFloating); item.OutNum = (int)(pTemp.OutNum + pTemp.OutNum * pFloating); item.ChagFee = pTemp.ChagFee.Value + pTemp.ChagFee.Value * decimal.Parse(pFloating.ToString()); item.CalcuTime = para.StartTime.Value; item.StaType = para.StationType; if (SessionManage.GetLoginUser() != null) { item.UpdBy = SessionManage.GetLoginUser().UserName; } item.UpdDate = DateTime.Now; item.State = 1; } } db.SaveChanges(); tran.Complete(); pReturnValue.ResultKey = (byte)EResult.Succeed; pReturnValue.ResultValue = TipInfo.CalibrationSuccess; } } else { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.CalibrationFaileDate; } } return(pReturnValue); } catch (Exception e) { pReturnValue.ResultKey = (byte)EResult.Fail; pReturnValue.ResultValue = TipInfo.CalibrationFaile + e.Message.ToString(); SystemLog.GetInstance().Error(TipInfo.CalibrationFaile, e); return(pReturnValue); } }