Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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));
        }
Пример #6
0
        /// <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 = "扫码失败,未知异常" }));
            }
        }
Пример #7
0
        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;
                }
            }
        }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
        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));
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        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;
            }
        }
Пример #12
0
 /// <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("获取商家余额失败")));
     }
 }
Пример #13
0
        /// <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);
        }
Пример #14
0
 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("保存失败")));
     }
 }
Пример #15
0
        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));
            }
        }
Пример #16
0
        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("获取优免二维码失败")));
            }
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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));
        }
Пример #20
0
        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());
        }
Пример #21
0
        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("发放优免券失败")));
            }
        }
Пример #22
0
        /// <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));//异常
            }
        }
Пример #23
0
        /// <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;
                }
            }
        }
Пример #24
0
        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 = "获取二维码失败" }));
            }
        }