private static bool SyncSellerRecharge(OnlineOrder order, OrderPayWay payWay) { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller model = factory.QueryBySellerId(order.InOutID); if (model == null) { throw new MyException("商家不存在"); } dbOperator.BeginTransaction(); try { ParkOrder pkOrder = ParkOrderServices.MarkSellerChargeOrder(model, order.Amount, model.SellerID, OrderSource.WeiXin, payWay, dbOperator); if (order == null) { throw new MyException("创建充值订单失败"); } bool result = factory.SellerRecharge(model.SellerID, order.Amount, dbOperator); if (!result) { throw new MyException("商家充值失败"); } dbOperator.CommitTransaction(); return(result); } catch (Exception ex) { dbOperator.RollbackTransaction(); ExceptionsServices.AddExceptions(ex, "商家微信充值通知失败,订单编号:" + order.OrderID); return(false); } } }
public bool Add(ParkSeller model) { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { model.DataStatus = DataStatus.Normal; model.LastUpdateTime = DateTime.Now; model.HaveUpdate = SystemDefaultConfig.DataUpdateFlag; StringBuilder strSql = new StringBuilder(); strSql.Append("insert into ParkSeller(SellerID,SellerNo,SellerName,PWD,VID,Addr,Creditline,Balance,LastUpdateTime,HaveUpdate,DataStatus,PPSellerID)"); strSql.Append(" values(@SellerID,@SellerNo,@SellerName,@PWD,@VID,@Addr,@Creditline,@Balance,@LastUpdateTime,@HaveUpdate,@DataStatus,@PPSellerID)"); dbOperator.ClearParameters(); dbOperator.AddParameter("SellerID", model.SellerID); dbOperator.AddParameter("SellerNo", model.SellerNo); dbOperator.AddParameter("SellerName", model.SellerName); dbOperator.AddParameter("PWD", model.PWD); dbOperator.AddParameter("VID", model.VID); dbOperator.AddParameter("Addr", model.Addr); dbOperator.AddParameter("Creditline", model.Creditline); dbOperator.AddParameter("Balance", model.Balance); dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime); dbOperator.AddParameter("HaveUpdate", model.HaveUpdate); dbOperator.AddParameter("DataStatus", (int)model.DataStatus); dbOperator.AddParameter("PPSellerID", model.PPSellerID); return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0); } }
public ActionResult GetParkingData() { JsonResult result = new JsonResult(); try { if (string.IsNullOrEmpty(Request.Params["sellerId"])) { return(result); } string sellerId = Request.Params["sellerId"].ToString(); ParkSeller seller = ParkSellerServices.QueryBySellerId(sellerId); if (seller == null) { throw new MyException("获取商家信息失败"); } List <BaseParkinfo> parkings = ParkingServices.QueryParkingByVillageId(seller.VID); result.Data = parkings; return(result); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "优免券发放车场信息失败"); return(result); } }
public bool ModifySeller(ParkSeller model, out string errorMsg) { errorMsg = ""; try { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { model.LastUpdateTime = DateTime.Now; model.HaveUpdate = SystemDefaultConfig.DataUpdateFlag; StringBuilder strSql = new StringBuilder(); strSql.Append(@"update ParkSeller set PPSellerID=@PPSellerID ,Addr=@Addr,Balance=@Balance,Creditline=@Creditline,HaveUpdate=@HaveUpdate, LastUpdateTime=@LastUpdateTime,SellerName=@SellerName,VID=@VID"); strSql.Append(" where SellerID=@SellerID"); dbOperator.ClearParameters(); dbOperator.AddParameter("Addr", model.Addr); dbOperator.AddParameter("Balance", model.Balance); dbOperator.AddParameter("Creditline", model.Creditline); dbOperator.AddParameter("HaveUpdate", model.HaveUpdate); dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime); dbOperator.AddParameter("SellerID", model.SellerID); dbOperator.AddParameter("SellerName", model.SellerName); dbOperator.AddParameter("VID", model.VID); dbOperator.AddParameter("PPSellerID", model.PPSellerID); return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0); } } catch (Exception e) { errorMsg = e.Message; } return(false); }
/// <summary> /// 生存商家充值订单 /// </summary> /// <param name="seller">商家信息</param> /// <param name="chargeBalance">充值金额</param> /// <param name="operatorId">操作者编号</param> /// <param name="dbOperator"></param> /// <returns></returns> public static ParkOrder MarkSellerChargeOrder(ParkSeller seller, decimal chargeBalance, string operatorId, OrderSource orderSource, OrderPayWay payWay, DbOperator dbOperator) { ParkOrder order = GetSellerChargeOrder(seller, chargeBalance, operatorId, orderSource, payWay); IParkOrder factory = ParkOrderFactory.GetFactory(); return(factory.Add(order, dbOperator)); }
/// <summary> /// 扫码优免进入 /// </summary> /// <param name="vid">小区编号</param> /// <param name="qid">二维码编号</param> /// <param name="type">0-长久二维码 1-临时二维码</param> /// <param name="sign">签名</param> /// <returns></returns> public ActionResult Index(string vid, string qid, string sign) { TxtLogServices.WriteTxtLogEx("QRCodeDerate", "进入扫码打折:vid={0},qid={1},sign={2}", vid, qid, sign); try { if (SourceClient != RequestSourceClient.WeiXin) { throw new MyException("请在微信中打开"); } if (!CheckSignature(vid, qid, sign)) { throw new MyException("验证签名失败"); } if (SourceClient == RequestSourceClient.WeiXin) { if (string.IsNullOrWhiteSpace(WeiXinOpenId)) { ParkDerate derate = ParkDerateServices.Query(qid); if (derate == null) { throw new MyException("获取优免券信息失败"); } ParkSeller seller = ParkSellerServices.QueryBySellerId(derate.SellerID); if (seller == null) { throw new MyException("获取商家信息失败"); } BaseVillage village = VillageServices.QueryVillageByRecordId(seller.VID); if (village == null) { throw new MyException("获取小区信息失败"); } string id = string.Format("QRCodeDerate_Index_vid={0}^qid={1}^sign={2}^companyId={3}", vid, qid, sign, village.CPID); return(RedirectToAction("Index", "WeiXinAuthorize", new { id = id })); } } ViewBag.PlateNumber = OnlineOrderServices.QueryLastPaymentPlateNumber(PaymentChannel.WeiXinPay, WeiXinOpenId); ViewBag.VillageId = vid; ViewBag.QId = qid; return(View()); } catch (MyException ex) { TxtLogServices.WriteTxtLogEx("QRCodeDerate", "扫码打折异常:描述:{0}", ex.Message); return(RedirectToAction("Index", "ErrorPrompt", new { message = ex.Message })); } catch (Exception ex) { TxtLogServices.WriteTxtLogEx("QRCodeDerate", "扫码打折异常:描述:{0},明细:{1}", ex.Message, ex.StackTrace); return(RedirectToAction("Index", "ErrorPrompt", new { message = "扫码失败,未知异常" })); } }
public static bool SellerCharge(string sellerId, decimal balance, string operatorId) { if (sellerId.IsEmpty()) { throw new ArgumentNullException("sellerId"); } if (operatorId.IsEmpty()) { throw new ArgumentNullException("operatorId"); } if (balance <= 0) { throw new ArgumentNullException("balance"); } IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller model = factory.QueryBySellerId(sellerId); if (model == null) { throw new MyException("商家不存在"); } using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); ParkOrder order = ParkOrderServices.MarkSellerChargeOrder(model, balance, operatorId, OrderSource.ManageOffice, OrderPayWay.Cash, dbOperator); if (order == null) { throw new MyException("创建充值订单失败"); } bool result = factory.SellerRecharge(sellerId, balance, dbOperator); if (!result) { throw new MyException("取消暂停计划失败"); } dbOperator.CommitTransaction(); ParkSeller newSeller = factory.QueryBySellerId(sellerId); if (newSeller != null) { OperateLogServices.AddOperateLog(OperateType.Update, string.Format("sellerId:{0},充值:{1},余额为:{2}", sellerId, balance, newSeller.Balance)); } return(result); } catch (Exception ex) { dbOperator.RollbackTransaction(); throw ex; } } }
/// <summary> /// 发送同步支付模板信息 /// </summary> /// <param name="order"></param> /// <returns></returns> private static bool SendSyncResultMessage(OnlineOrder order) { try { if (order.PaymentChannel != PaymentChannel.WeiXinPay) { return(true); } switch (order.OrderType) { case OnlineOrderType.MonthCardRecharge: { return(TemplateMessageServices.SendMonthCardRechargeSuccess(order.CompanyID, order.PlateNo, order.PKName, order.Amount, order.ExitTime, order.PayAccount)); } case OnlineOrderType.ParkFee: { return(TemplateMessageServices.SendParkCarPaymentSuccess(order.CompanyID, order.PlateNo, order.PKName, order.Amount, order.EntranceTime, order.OrderTime, order.RealPayTime, order.ExitTime, order.PayAccount)); } case OnlineOrderType.PkBitBooking: { return(true); } case OnlineOrderType.SellerRecharge: { IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller model = factory.QueryBySellerId(order.InOutID); if (model == null) { throw new MyException("商家不存在"); } return(TemplateMessageServices.SendSellerRechargeSuccess(order.CompanyID, order.Amount, model.Balance, order.RealPayTime, order.PayAccount)); } default: throw new MyException("同步支付结果时找不到订单类型"); } } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", "发送模板信息失败:订单编号:" + order.OrderID + "", ex, LogFrom.WeiXin); return(false); } }
public static bool ModifySeller(ParkSeller mode, out string errorMsg) { if (mode == null) { throw new ArgumentNullException("mode"); } IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller dbModel = factory.QueryBySellerNo(mode.SellerNo); if (dbModel != null && dbModel.SellerID != mode.SellerID) { throw new MyException("商家编号重复"); } return(factory.ModifySeller(mode, out errorMsg)); }
/// <summary /// 获取商户信息 /// </summary> /// <param name="SellerID"></param> /// <returns></returns> public static string GetSellerInfo(string SellerID) { string strseller = ""; ParkSeller model = null; try { using (DbOperator dbOperator = ConnectionManager.CreateReadConnection()) { string 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()) { model = DataReaderToModel <ParkSeller> .ToModel(reader); using (DbOperator dbOperator2 = ConnectionManager.CreateReadConnection()) { 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 "; dbOperator2.ClearParameters(); dbOperator2.AddParameter("SellerID", SellerID); using (DbDataReader reader2 = dbOperator2.ExecuteReader(strsql.ToString())) { if (reader.Read()) { model.EnableBalance = model.Balance - reader2["SumFreeMoney"].ToDecimal(); } else { model.EnableBalance = model.Balance; } } } strseller = JsonHelper.GetJsonString(model); } } } } catch (Exception ex) { logger.Fatal("获取商户信息回调异常!GetSellerInfoCallback()" + ex.Message + "\r\n"); } return(strseller); }
public override void OnAuthorization(AuthorizationContext filterContext) { try { ParkSeller user = null; if (filterContext.HttpContext.Session["SmartSystem_SellerLoginUser"] == null) { var userAccountCookie = filterContext.HttpContext.Request.Cookies["SmartSystem_Seller_Login_UserAccount"]; var passwordCookie = filterContext.HttpContext.Request.Cookies["SmartSystem_Seller_Login_Password"]; if (userAccountCookie != null && passwordCookie != null) { string account = userAccountCookie.Value; string pwd = DES.DESDeCode(passwordCookie.Value, "Password"); ParkSeller sysUser = ParkSellerDerateServices.WXGetSellerInfo(account, pwd); if (sysUser != null) { user = sysUser; filterContext.HttpContext.Session["SmartSystem_SellerLoginUser"] = user; } } if (user == null) { string response_js = "<script>window.parent.location.href='/ErrorPrompt/Index?message=登录超时,请重新登录&returnUrl=/XFJMLogin/Index';</script>"; filterContext.HttpContext.Response.Write(response_js); filterContext.HttpContext.Response.End(); return; } } HttpContext.Current.Session["SmartSystem_LogFrom"] = LogFrom.WeiXin; user = (ParkSeller)filterContext.HttpContext.Session["SmartSystem_SellerLoginUser"]; if (user == null) { string response_js = "<script>window.parent.location.href='/ErrorPrompt/Index?message=登录超时,请重新登录&returnUrl=/XFJMLogin/Index';</script>"; filterContext.HttpContext.Response.Write(response_js); return; } } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "验证商户是否登录失败"); string response_js = "<script>window.parent.location.href='/ErrorPrompt/Index?message=验证商户是否登录失败&returnUrl=/XFJMLogin/Index';</script>"; filterContext.HttpContext.Response.Write(response_js); return; } }
/// <summary> /// 获取商家余额度 /// </summary> /// <param name="plateNumber"></param> /// <returns></returns> public JsonResult GetSellerBalance() { try { ParkSeller seller = ParkSellerDerateServices.WXGetSellerInfo(SellerLoginUser.SellerID, SellerLoginUser.VID); if (seller != null) { Session["SmartSystem_SellerLoginUser"] = seller; } double sellerBalance = (double)SellerLoginUser.Balance + (double)SellerLoginUser.Creditline; return(Json(MyResult.Success("", sellerBalance))); } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("WeiXin_XFJM", "获取商家余额失败", ex, LogFrom.WeiXin); return(Json(MyResult.Error("获取商家余额失败"))); } }
/// <summary> /// 构建商家充值充值订单 /// </summary> /// <param name="seller">商家信息</param> /// <param name="chargeBalance">充值金额</param> /// <param name="systemId">系统编号</param> /// <param name="loginUserRecordId">登录用户编号</param> /// <returns></returns> private static ParkOrder GetSellerChargeOrder(ParkSeller seller, decimal chargeBalance, string operatorId, OrderSource orderSource, OrderPayWay payWay) { ParkOrder order = new ParkOrder(); order.OrderNo = IdGenerator.Instance.GetId().ToString(); order.Status = 1; order.OrderSource = orderSource; order.Amount = chargeBalance; order.PayAmount = chargeBalance; order.Remark = "商家充值"; order.OrderTime = DateTime.Now; order.OrderType = OrderType.BusinessRecharge; order.TagID = seller.SellerID; order.PayWay = payWay; order.UserID = operatorId; order.OldMoney = seller.Balance; order.NewMoney = chargeBalance + seller.Balance; order.PayTime = DateTime.Now; return(order); }
public JsonResult AddOrUpdate(ParkSeller model) { try { string errorMsg = string.Empty; if (string.IsNullOrWhiteSpace(model.SellerID)) { model.PWD = MD5.Encrypt(model.PWD); bool result = ParkSellerServices.Add(model); if (!result) { throw new MyException("添加商家失败"); } } else { ParkSeller dbSeller = ParkSellerServices.QueryBySellerId(model.SellerID); if (dbSeller == null) { throw new MyException("修改的商家不存在"); } model.PWD = dbSeller.PWD; model.Balance = dbSeller.Balance; bool result = ParkSellerServices.ModifySeller(model, out errorMsg); if (!result) { throw new MyException("修改商家失败"); } } return(Json(MyResult.Success())); } catch (MyException ex) { return(Json(MyResult.Error(ex.Message))); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "保存商家信息失败"); return(Json(MyResult.Error("保存失败"))); } }
public ActionResult Index(string userAccount, string password, bool rememberPassWord = false) { UserLoginModel model = new UserLoginModel(); model.UserAccount = userAccount; model.Password = password; model.RememberPassword = rememberPassWord; try { ParkSeller seller = ParkSellerDerateServices.WXGetSellerInfo(userAccount, MD5.Encrypt(password)); if (seller == null) { model.ErrorMessage = "用户名或密码错误"; return(View(model)); } if (seller.DataStatus == DataStatus.Delete) { model.ErrorMessage = "商家不存在"; return(View(model)); } if (seller.DataStatus != DataStatus.Normal) { model.ErrorMessage = "账号不是有效状态,请联系系统管理员"; return(View(model)); } Session["SmartSystem_SellerLoginUser"] = seller; SetLoginCookie(model); Session["SmartSystem_Seller_Login_UserAccount"] = seller.SellerNo; Session["SmartSystem_Seller_Login_Password"] = seller.PWD; Session["SmartSystem_LogFrom"] = LogFrom.WeiXin; return(RedirectToAction("Index", "XFJMMain")); } catch (Exception ex) { model.ErrorMessage = "登录异常"; ExceptionsServices.AddExceptionToDbAndTxt("WeiXin_XFJM", "商家登录异常", ex, LogFrom.WeiXin); return(View(model)); } }
public ActionResult GetParkDerateQRcodeData(string derateId, int?status, int page) { try { int rows = 10; int total = 0; List <ParkDerateQRcode> models = ParkDerateQRcodeServices.QueryPage(SellerLoginUser.SellerID, derateId, 0, status, DerateQRCodeSource.Seller, rows, page, out total); if (models.Count > 0) { ParkSeller seller = ParkSellerServices.QueryBySellerId(SellerLoginUser.SellerID); if (seller == null) { throw new MyException("获取商家信息失败"); } List <BaseParkinfo> parkings = ParkingServices.QueryParkingByVillageId(seller.VID); Dictionary <string, int> result = ParkCarDerateServices.QuerySettlementdCarDerate(models.Select(p => p.RecordID).ToList()); foreach (var item in models) { int useTimes = result.ContainsKey(item.RecordID) ? result[item.RecordID] : 0; string canUseTimes = item.CanUseTimes == 0 ? "不限" : item.CanUseTimes.ToString(); item.UseTimesDes = string.Format("{0}/{1}", canUseTimes, useTimes); BaseParkinfo park = parkings.FirstOrDefault(p => p.PKID == item.PKID); if (park != null) { item.ParkName = park.PKName; } } } return(Json(MyResult.Success("", models))); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "获取优免二维码失败", LogFrom.WeiXin); return(Json(MyResult.Error("获取优免二维码失败"))); } }
public JsonResult GetParkFeeRuleTreeData() { JsonResult json = new JsonResult(); if (string.IsNullOrEmpty(Request.Params["sellerId"])) { return(json); } string sellerId = Request.Params["sellerId"].ToString(); ParkSeller seller = ParkSellerServices.QueryBySellerId(sellerId); if (seller == null) { throw new MyException("获取商家信息失败"); } List <BaseParkinfo> parkings = ParkingServices.QueryParkingByVillageId(seller.VID); if (parkings.Count == 0) { return(json); } List <ParkFeeRule> rules = new List <ParkFeeRule>(); foreach (var item in parkings) { List <ParkFeeRule> rule = ParkFeeRuleServices.QueryParkFeeRuleByParkingId(item.PKID); if (rule.Count > 0) { rules.AddRange(rule); } } json.Data = rules; return(json); }
public static bool Add(ParkSeller model) { if (model == null) { throw new ArgumentNullException("model"); } IParkSeller factory = ParkSellerFactory.GetFactory(); model.SellerID = GuidGenerator.GetGuid().ToString(); ParkSeller dbModel = factory.QueryBySellerNo(model.SellerNo); if (dbModel != null) { throw new MyException("商家编号重复"); } bool result = factory.Add(model); if (result) { OperateLogServices.AddOperateLog <ParkSeller>(model, OperateType.Add); } return(result); }
public static bool QRCodeDiscount(string sellerId, string derateId, string carDerateId, string parkingId, string ioRecordId, string plateNumber) { if (string.IsNullOrWhiteSpace(sellerId)) { throw new ArgumentNullException("sellerId"); } if (string.IsNullOrWhiteSpace(derateId)) { throw new ArgumentNullException("derateId"); } if (string.IsNullOrWhiteSpace(carDerateId)) { throw new ArgumentNullException("carDerateId"); } if (string.IsNullOrWhiteSpace(parkingId)) { throw new ArgumentNullException("parkingId"); } if (string.IsNullOrWhiteSpace(plateNumber)) { throw new ArgumentNullException("plateNumber"); } List <ParkCarDerate> carDerates = ParkCarDerateServices.QueryByDerateId(carDerateId); if (carDerates == null || carDerates.Count == 0) { throw new MyException("该优免券不存在"); } if (!string.IsNullOrWhiteSpace(carDerates.First().PlateNumber)) { throw new MyException("该优免券已使用过了[001]"); } if (carDerates.First().Status == CarDerateStatus.Settlementd) { throw new MyException("该优免券已使用过了[002]"); } if (carDerates.First().Status != CarDerateStatus.Used) { throw new MyException("该优免券不是有效状态"); } IParkCarDerate factory = ParkCarDerateFactory.GetFactory(); ParkCarDerate carDerate = factory.QueryBySellerIdAndIORecordId(sellerId, ioRecordId); if (carDerate != null) { throw new MyException("该车辆已优免了"); } ParkDerate derate = ParkDerateServices.Query(derateId); if (derate == null) { throw new MyException("找不到优免规则"); } ParkSeller seller = ParkSellerServices.QueryBySellerId(derate.SellerID); if (seller == null) { throw new MyException("找不到商家信息"); } return(factory.QRCodeDiscount(carDerateId, parkingId, ioRecordId, plateNumber)); }
public string GetParkDerateQRcodeData() { StringBuilder strData = new StringBuilder(); try { if (string.IsNullOrEmpty(Request.Params["sellerId"])) { return(string.Empty); } string sellerId = Request.Params["sellerId"].ToString(); string derateId = Request.Params["derateId"].ToString(); int?queryStatus = null; int status = 0; if (!string.IsNullOrWhiteSpace(Request.Params["status"]) && int.TryParse(Request.Params["status"].ToString(), out status)) { queryStatus = status; } DerateQRCodeSource?derateQRCodeSource = null; int source = 0; if (!string.IsNullOrWhiteSpace(Request.Params["DerateQRCodeSource"]) && int.TryParse(Request.Params["DerateQRCodeSource"].ToString(), out source)) { derateQRCodeSource = (DerateQRCodeSource)source; } int page = string.IsNullOrEmpty(Request.Params["page"]) ? 0 : int.Parse(Request.Params["page"]); int rows = string.IsNullOrEmpty(Request.Params["rows"]) ? 0 : int.Parse(Request.Params["rows"]); int total = 0; List <ParkDerateQRcode> models = ParkDerateQRcodeServices.QueryPage(sellerId, derateId, 1, queryStatus, derateQRCodeSource, rows, page, out total); if (models.Count > 0) { ParkSeller seller = ParkSellerServices.QueryBySellerId(sellerId); if (seller == null) { throw new MyException("获取商家信息失败"); } List <BaseParkinfo> parkings = ParkingServices.QueryParkingByVillageId(seller.VID); Dictionary <string, int> result = ParkCarDerateServices.QuerySettlementdCarDerate(models.Select(p => p.RecordID).ToList()); foreach (var item in models) { int useTimes = result.ContainsKey(item.RecordID)?result[item.RecordID]:0; string canUseTimes = item.CanUseTimes == 0 ? "不限" : item.CanUseTimes.ToString(); item.UseTimesDes = string.Format("{0}/{1}", canUseTimes, useTimes); BaseParkinfo park = parkings.FirstOrDefault(p => p.PKID == item.PKID); if (park != null) { item.ParkName = park.PKName; } } } strData.Append("{"); strData.Append("\"total\":" + total + ","); strData.Append("\"rows\":" + JsonHelper.GetJsonString(models) + ","); strData.Append("\"index\":" + page); strData.Append("}"); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "获取一次性优免二维码失败"); } return(strData.ToString()); }
public JsonResult GrantCarDerate(string vid, string qid, string sellerName, string derateName, int number) { try { if (number <= 0) { throw new MyException("发放优免券数量不正确"); } if (string.IsNullOrWhiteSpace(SystemDefaultConfig.SystemDomain)) { throw new MyException("获取系统域名失败"); } ParkDerateQRcode qrCode = ParkDerateQRcodeServices.QueryByRecordId(qid); if (qrCode == null) { throw new MyException("优免券规则不存在"); } ParkDerate derate = ParkDerateServices.Query(qrCode.DerateID); if (derate == null) { throw new MyException("获取优免规则失败"); } if (derate.DerateType == DerateType.SpecialTimePeriodPayment) { string errorMsg = string.Empty; ParkSeller seller = ParkSellerServices.GetSeller(derate.SellerID, out errorMsg); if (derate == null) { throw new MyException("获取优免规则失败"); } decimal totalAmount = qrCode.DerateValue * number; if ((seller.Creditline + seller.Balance) < totalAmount) { throw new MyException("商家余额不足"); } } BaseVillage village = VillageServices.QueryVillageByRecordId(vid); if (village == null) { throw new MyException("获取小区信息失败"); } string folderName = string.Format("{0}_{1}_{2}", sellerName, derateName, IdGenerator.Instance.GetId().ToString()); List <string> carDerateIds = new List <string>(); for (int i = 0; i < number; i++) { string carDerateId = GuidGenerator.GetGuidString(); string content = string.Format("{0}/QRCodeDerate/Index?vid={1}&qid={2}&did={3}&sign={4}", SystemDefaultConfig.SystemDomain, vid, qid, carDerateId, GetSignature(vid, qid, carDerateId)); string result = QRCodeServices.GenerateQRCode(village.CPID, content, 430, carDerateId, folderName); if (string.IsNullOrWhiteSpace(result)) { throw new MyException("创建二维码失败"); } carDerateIds.Add(carDerateId); } string filePath = string.Format("/Uploads/{0}", folderName); string zipFilePath = string.Format("{0}/{1}_{2}.zip", filePath, sellerName, derateName); string mapPath = Server.MapPath("~/"); ZipHelper.ZipFiles(string.Format("{0}/{1}", mapPath, filePath), string.Format("{0}/{1}", mapPath, zipFilePath)); if (carDerateIds.Count != number) { throw new MyException("二维码数量与待创建的数量不匹配"); } bool grantResult = ParkDerateQRcodeServices.GrantCarDerate(carDerateIds, zipFilePath, qid); if (!grantResult) { throw new MyException("发放券失败"); } return(Json(MyResult.Success("", zipFilePath))); } catch (MyException ex) { return(Json(MyResult.Error(ex.Message))); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "发放优免券失败"); 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));//异常 } }
/// <summary> /// 下发有免费券 /// </summary> /// <param name="carDerateIds"></param> /// <param name="qrCodeZipFilePath">压缩二维码的文件路径</param> /// <param name="qrCodeId"></param> /// <returns></returns> public static bool GrantCarDerate(List <string> carDerateIds, string qrCodeZipFilePath, string qrCodeId) { if (carDerateIds == null || carDerateIds.Count == 0) { throw new ArgumentNullException("carDerateIds"); } if (string.IsNullOrWhiteSpace(qrCodeZipFilePath)) { throw new ArgumentNullException("qrCodeFilePath"); } string absolutePath = System.Web.HttpContext.Current.Server.MapPath("~/"); string s = string.Format("{0}{1}", absolutePath, qrCodeZipFilePath); if (!File.Exists(s)) { throw new MyException("压缩二维码的文件不存在"); } IParkDerateQRcode factory = ParkDerateQRcodeFactory.GetFactory(); ParkDerateQRcode qrCode = factory.QueryByRecordId(qrCodeId); if (qrCode == null) { throw new MyException("优免券规则不存在"); } if (qrCode.EndTime < DateTime.Now) { throw new MyException("该优免券规则已过期"); } ParkDerate derate = ParkDerateServices.Query(qrCode.DerateID); if (derate == null) { throw new MyException("获取优免规则失败"); } decimal totalAmount = 0; if (derate.DerateType == DerateType.SpecialTimePeriodPayment) { string errorMsg = string.Empty; ParkSeller seller = ParkSellerServices.GetSeller(derate.SellerID, out errorMsg); if (derate == null) { throw new MyException("获取优免规则失败"); } totalAmount = qrCode.DerateValue * carDerateIds.Count; if ((seller.Creditline + seller.Balance) < totalAmount) { throw new MyException("商家余额不足"); } } List <ParkCarDerate> carDerates = new List <ParkCarDerate>(); foreach (var item in carDerateIds) { ParkCarDerate model = new ParkCarDerate(); model.CarDerateID = item; model.CarDerateNo = IdGenerator.Instance.GetId().ToString(); model.DerateID = qrCode.DerateID; model.PlateNumber = ""; model.AreaID = ""; model.PKID = qrCode.PKID; if (derate.DerateType != DerateType.ReliefTime && derate.DerateType != DerateType.VotePayment && derate.DerateType != DerateType.DayFree) { model.FreeMoney = qrCode.DerateValue; } else if (derate.DerateType == DerateType.DayFree) { model.FreeMoney = qrCode.DerateValue * derate.DerateMoney; } else { model.FreeTime = (int)qrCode.DerateValue; } model.Status = CarDerateStatus.Used; model.CreateTime = DateTime.Now; model.ExpiryTime = qrCode.EndTime; model.DerateQRCodeID = qrCode.RecordID; carDerates.Add(model); } IParkCarDerate factoryCarDerate = ParkCarDerateFactory.GetFactory(); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); //添加券 foreach (var item in carDerates) { bool result = factoryCarDerate.Add(item, dbOperator); if (!result) { throw new MyException("发券失败"); } } //修改发放总张数据,修改最后压缩包路径 int totalNumbers = qrCode.CanUseTimes + carDerateIds.Count; bool updateResult = factory.Update(qrCodeId, qrCodeZipFilePath, totalNumbers, dbOperator); if (!updateResult) { throw new MyException("修改券总数失败"); } //商家扣款 if (totalAmount > 0) { IParkSeller factorySeller = ParkSellerFactory.GetFactory(); updateResult = factorySeller.SellerDebit(derate.SellerID, totalAmount, dbOperator); if (!updateResult) { throw new MyException("商家扣款失败"); } } dbOperator.CommitTransaction(); return(true); } catch { dbOperator.RollbackTransaction(); throw; } } }
public ActionResult DerateQRCode(string recordId) { try { ParkDerateQRcode derateQRcode = ParkDerateQRcodeServices.QueryByRecordId(recordId); if (derateQRcode == null) { throw new MyException("该二维码不存在"); } ParkDerate derate = ParkDerateServices.Query(derateQRcode.DerateID); if (derate == null) { throw new MyException("优免规则不存在"); } derateQRcode.DerateName = derate.Name; ParkSeller seller = ParkSellerServices.QueryBySellerId(derate.SellerID); if (seller == null) { throw new MyException("商家不存在"); } derateQRcode.SellerName = seller.SellerName; if (string.IsNullOrWhiteSpace(SystemDefaultConfig.SystemDomain)) { throw new MyException("获取系统域名失败"); } BaseVillage village = VillageServices.QueryVillageByRecordId(seller.VID); if (village == null) { throw new MyException("获取小区信息失败"); } string content = string.Format("{0}/QRCodeDerate/Index?vid={1}&qid={2}&sign={3}", SystemDefaultConfig.SystemDomain, seller.VID, recordId, GetSignature(seller.VID, recordId)); using (System.Drawing.Image image = QRCodeServices.GenerateQRCode(content, 430)) { ImageFormat format = image.RawFormat; byte[] buffer; using (MemoryStream ms = new MemoryStream()) { image.Save(ms, ImageFormat.Jpeg); buffer = new byte[ms.Length]; ms.Seek(0, SeekOrigin.Begin); ms.Read(buffer, 0, buffer.Length); } derateQRcode.ImageData = System.Convert.ToBase64String(buffer); } ViewBag.CompanyID = village.CPID; ViewBag.ShareAction = "XFJMDerateQRCode/DerateQRCode?recordId=" + recordId; return(View(derateQRcode)); } catch (MyException ex) { return(RedirectToAction("Index", "XFJMDerateQRCode", new { RemindUserContent = ex.Message })); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "微信获取二维码失败", LogFrom.WeiXin); return(RedirectToAction("Index", "XFJMDerateQRCode", new { RemindUserContent = "获取二维码失败" })); } }