/// <summary> /// 打折 /// </summary> /// <returns></returns> public ActionResult Discount(string IORecordID, string DerateID, decimal DerateMoney) { try { ConsumerDiscountResult result = ParkSellerDerateServices.WXDiscountPlateNumber(IORecordID, DerateID, SellerLoginUser.VID, SellerLoginUser.SellerID, DerateMoney); return(Json(MyResult.Success("", result))); } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("WeiXin_XFJM", "打折异常", ex, LogFrom.WeiXin); return(Json(MyResult.Error("打折异常"))); } }
/// <summary> /// 消费打折 /// </summary> /// <param name="IORecordID"></param> /// <param name="DerateID"></param> /// <param name="VID"></param> /// <param name="SellerID"></param> /// <param name="DerateMoney"></param> /// <returns></returns> public static string DiscountPlateNumber(string IORecordID, string DerateID, string VID, string SellerID, decimal DerateMoney) { ConsumerDiscountResult result = new ConsumerDiscountResult(); try { using (DbOperator dbOperator = ConnectionManager.CreateReadConnection()) { ParkIORecord IOmodel = null; string strsql = "select * from ParkIORecord where RecordID=@RecordID and DataStatus<2"; dbOperator.ClearParameters(); dbOperator.AddParameter("RecordID", IORecordID); using (DbDataReader reader = dbOperator.ExecuteReader(strsql.ToString())) { if (reader.Read()) { IOmodel = DataReaderToModel <ParkIORecord> .ToModel(reader); } } if (IOmodel != null) { if (IOmodel.IsExit) { result.Result = 3; return(JsonHelper.GetJsonString(result));//车辆已出场 } strsql = "select a.*,b.SellerID from ParkCarDerate a left join ParkDerate b on a.DerateID=b.DerateID where IORecordID=@IORecordID and b.SellerID=@SellerID and a.DataStatus<2 and Status!=3"; dbOperator.ClearParameters(); dbOperator.AddParameter("IORecordID", IORecordID); dbOperator.AddParameter("SellerID", SellerID); using (DbDataReader reader = dbOperator.ExecuteReader(strsql.ToString())) { if (reader.Read()) { result.Result = 4; return(JsonHelper.GetJsonString(result));//已打折 } } ParkDerate derate = null; strsql = "select * from ParkDerate where DataStatus<2 and DerateID=@DerateID"; dbOperator.ClearParameters(); dbOperator.AddParameter("DerateID", DerateID); using (DbDataReader reader = dbOperator.ExecuteReader(strsql.ToString())) { if (reader.Read()) { derate = DataReaderToModel <ParkDerate> .ToModel(reader); } else { result.Result = 5; return(JsonHelper.GetJsonString(result));//找不到优免规则 } } ParkSeller seller = null; strsql = "select * from ParkSeller where DataStatus<2 and SellerID=@SellerID"; dbOperator.ClearParameters(); dbOperator.AddParameter("SellerID", SellerID); using (DbDataReader reader = dbOperator.ExecuteReader(strsql.ToString())) { if (reader.Read()) { seller = DataReaderToModel <ParkSeller> .ToModel(reader); } else { result.Result = 6; return(JsonHelper.GetJsonString(result));//找不到商家信息 } } decimal SumFreeMoney = 0; strsql = "select SUM(FreeMoney) as SumFreeMoney from ParkCarDerate a left join ParkDerate b on a.DerateID=b.DerateID where a.DataStatus<2 and a.Status=1 and b.SellerID=@SellerID "; dbOperator.ClearParameters(); dbOperator.AddParameter("SellerID", SellerID); using (DbDataReader reader = dbOperator.ExecuteReader(strsql.ToString())) { if (reader.Read()) { SumFreeMoney = reader["SumFreeMoney"].ToDecimal(); } } if (derate.DerateType == DerateType.TimesPayment || derate.DerateType == DerateType.TimePeriodAndTimesPayment) { DerateMoney = (decimal)derate.DerateMoney; } if (derate.DerateType != DerateType.ReliefTime && derate.DerateType != DerateType.VotePayment && derate.DerateType != DerateType.DayFree) { if (seller.Balance + seller.Creditline < DerateMoney + SumFreeMoney) { result.Result = 7; return(JsonHelper.GetJsonString(result));//商家余额不足 } } else if (derate.DerateType == DerateType.DayFree) { if (seller.Balance + seller.Creditline < (DerateMoney * derate.DerateMoney) + SumFreeMoney) { result.Result = 7; return(JsonHelper.GetJsonString(result));//商家余额不足 } } ParkCarDerate Carderate = new ParkCarDerate(); Carderate.AreaID = IOmodel.AreaID; Carderate.CarDerateID = System.Guid.NewGuid().ToString(); Carderate.CarDerateNo = IdGenerator.Instance.GetId().ToString(); Carderate.CardNo = IOmodel.CardNo; Carderate.CreateTime = DateTime.Now; Carderate.DerateID = DerateID; Carderate.ExpiryTime = DateTime.Now.AddDays(7); Carderate.Status = CarDerateStatus.Used; if (derate.DerateType != DerateType.ReliefTime && derate.DerateType != DerateType.VotePayment && derate.DerateType != DerateType.DayFree) { Carderate.FreeMoney = DerateMoney; } else if (derate.DerateType == DerateType.DayFree) { Carderate.FreeMoney = DerateMoney * derate.DerateMoney; Carderate.ExpiryTime = IOmodel.EntranceTime.AddDays((int)DerateMoney); } else { Carderate.FreeTime = (int)DerateMoney; } Carderate.IORecordID = IOmodel.RecordID; Carderate.HaveUpdate = 1; Carderate.PKID = IOmodel.ParkingID; Carderate.PlateNumber = IOmodel.PlateNumber; Carderate.DataStatus = 0; Carderate.LastUpdateTime = DateTime.Now; dbOperator.BeginTransaction(); strsql = "insert into ParkCarDerate (CarDerateID,CarDerateNo,DerateID,FreeTime,PlateNumber,IORecordID,CardNo,ExpiryTime,CreateTime,Status,FreeMoney,AreaID,PKID,LastUpdateTime,HaveUpdate,DataStatus)"; strsql += "values(@CarDerateID,@CarDerateNo,@DerateID,@FreeTime,@PlateNumber,@IORecordID,@CardNo,@ExpiryTime,@CreateTime,@Status,@FreeMoney,@AreaID,@PKID,@LastUpdateTime,@HaveUpdate,@DataStatus)"; dbOperator.ClearParameters(); dbOperator.AddParameter("CarDerateID", Carderate.CarDerateID); dbOperator.AddParameter("CarDerateNo", Carderate.CarDerateNo); dbOperator.AddParameter("DerateID", Carderate.DerateID); dbOperator.AddParameter("FreeTime", Carderate.FreeTime); dbOperator.AddParameter("PlateNumber", Carderate.PlateNumber); dbOperator.AddParameter("IORecordID", Carderate.IORecordID); dbOperator.AddParameter("CardNo", Carderate.CardNo); dbOperator.AddParameter("ExpiryTime", Carderate.ExpiryTime); dbOperator.AddParameter("CreateTime", Carderate.CreateTime); dbOperator.AddParameter("Status", Carderate.Status); dbOperator.AddParameter("FreeMoney", Carderate.FreeMoney); dbOperator.AddParameter("AreaID", Carderate.AreaID); dbOperator.AddParameter("PKID", Carderate.PKID); dbOperator.AddParameter("LastUpdateTime", Carderate.LastUpdateTime); dbOperator.AddParameter("HaveUpdate", Carderate.HaveUpdate); dbOperator.AddParameter("DataStatus", Carderate.DataStatus); if (dbOperator.ExecuteNonQuery(strsql) <= 0) { dbOperator.RollbackTransaction(); result.Result = 8; return(JsonHelper.GetJsonString(result));//打折失败 } if (derate.DerateType == DerateType.DayFree) { strsql = "update ParkSeller set Balance=Balance-" + Carderate.FreeMoney + "where SellerID=@SellerID"; dbOperator.ClearParameters(); dbOperator.AddParameter("SellerID", seller.SellerID); if (dbOperator.ExecuteNonQuery(strsql) <= 0) { dbOperator.RollbackTransaction(); result.Result = 8; return(JsonHelper.GetJsonString(result));//打折失败 } } dbOperator.CommitTransaction(); result.Result = 1; result.ResModel = Carderate; return(JsonHelper.GetJsonString(result)); } else { result.Result = 2; return(JsonHelper.GetJsonString(result));//找不到进出记录信息 } } } catch (Exception ex) { logger.Fatal("消费打折回调异常!DiscountPlateNumberCallback()" + ex.Message + "\r\n"); result.Result = -1; return(JsonHelper.GetJsonString(result));//异常 } }