예제 #1
0
        public void SendCardCouponsByCurrUserInfo(UserInfo currUserInfo, string cardId)
        {
            try
            {
                BLLWeixin bllWeixin = new BLLWeixin();

                BLLWebsiteDomainInfo bllDomain = new BLLWebsiteDomainInfo();

                CardCoupons cardCoupon = Get <CardCoupons>(string.Format(" WebsiteOwner='{0}' AND CardId={1} ", currUserInfo.WebsiteOwner, int.Parse(cardId)));

                MyCardCoupons model = new MyCardCoupons();
                model.CardCouponNumber = GetGUID(BLLJIMP.TransacType.CommAdd);
                model.CardCouponType   = cardCoupon.CardCouponType;
                model.CardId           = cardCoupon.CardId;
                model.InsertDate       = DateTime.Now;
                model.UserId           = currUserInfo.UserID;
                model.WebSiteOwner     = currUserInfo.WebsiteOwner;
                if (Add(model))
                {
                    string title     = "您收到一张优惠券";
                    string content   = string.Format("{0}", cardCoupon.Name);
                    string redicturl = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/mycoupons#/mycoupons", bllDomain.GetWebsiteDoMain(currUserInfo.WebsiteOwner));
                    bllWeixin.SendTemplateMessageNotifyComm(currUserInfo, title, content, redicturl);
                }
            }
            catch (Exception)
            {
            }
        }
예제 #2
0
 /// <summary>
 /// 转换卡券生效时间段
 /// </summary>
 /// <param name="mainCardCoupon">主卡券</param>
 /// <param name="myCardCoupon">我的优惠券</param>
 /// <returns></returns>
 public CardCoupons ConvertExpireTime(CardCoupons mainCardCoupon, MyCardCoupons myCardCoupon = null)
 {
     try
     {
         if (myCardCoupon == null)
         {
             if (mainCardCoupon.ExpireTimeType == "1")
             {
                 mainCardCoupon.ValidFrom = DateTime.Now;
                 mainCardCoupon.ValidTo   = DateTime.Now.AddDays(int.Parse(mainCardCoupon.ExpireDay));
             }
             return(mainCardCoupon);
         }
         if (mainCardCoupon.ExpireTimeType == "1" && myCardCoupon != null)                             //指定天数过期
         {
             if (!string.IsNullOrEmpty(myCardCoupon.FromUserId))                                       //转赠的优惠券过期时间跟赠送人的卡券过期时间相同
             {
                 myCardCoupon = GetMyCardCouponMainId(mainCardCoupon.CardId, myCardCoupon.FromUserId); //查找到转赠人的卡券
             }
             mainCardCoupon.ValidFrom = myCardCoupon.InsertDate;
             mainCardCoupon.ValidTo   = myCardCoupon.InsertDate.AddDays(int.Parse(mainCardCoupon.ExpireDay));
         }
     }
     catch (Exception)
     {
     }
     return(mainCardCoupon);
 }
예제 #3
0
        /// <summary>
        /// 是否可以使用优惠券
        /// </summary>
        /// <param name="myCoupon"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool IsCanUseCoupon(MyCardCoupons myCoupon, out string msg)
        {
            msg = "";
            if (myCoupon.Status == 0)
            {
                CardCoupons cardCoupon = GetCoupon(myCoupon.CardId);
                cardCoupon = ConvertExpireTime(cardCoupon);
                if (cardCoupon.ValidFrom != null && cardCoupon.ValidTo != null)
                {
                    DateTime dtNow = DateTime.Now;
                    if (dtNow >= (DateTime)(cardCoupon.ValidFrom) && (dtNow <= (DateTime)(cardCoupon.ValidTo)))
                    {
                        return(true);
                    }
                    else
                    {
                        msg = "优惠券已过期";
                    }
                }
            }
            else if (myCoupon.Status == 1)
            {
                msg = "优惠券已经使用";
            }
            else if (myCoupon.Status == 2)
            {
                msg = "优惠券已经转赠";
            }

            return(false);
        }
예제 #4
0
        /// <summary>
        /// 关注自动送券
        /// </summary>
        public void SubscribeGive(UserInfo userInfo)
        {
            try
            {
                BLLDistribution      bllDis         = new BLLDistribution();
                BLLWeixin            bllWeixin      = new BLLWeixin();
                BLLWebsiteDomainInfo bllDomain      = new BLLWebsiteDomainInfo();
                List <CardCoupons>   cardCouponList = GetList <CardCoupons>(string.Format("WebsiteOwner='{0}' And IsSubscribeGive='1'", userInfo.WebsiteOwner));
                foreach (var cardCoupon in cardCouponList)
                {
                    if (GetCount <MyCardCoupons>(string.Format("CardId='{0}' And UserId='{1}'", cardCoupon.CardId, userInfo.UserID)) > 0)
                    {
                        continue;//已经发过了
                    }
                    if (!string.IsNullOrEmpty(cardCoupon.BindChannelUserId))
                    {
                        if (bllDis.GetUserChannel(userInfo) != cardCoupon.BindChannelUserId)
                        {
                            continue;
                        }
                    }
                    if (cardCoupon.MaxCount > 0)
                    {
                        int sendCount = GetCount <MyCardCoupons>(string.Format(" CardID={0}", cardCoupon.CardId));
                        if (sendCount >= cardCoupon.MaxCount)
                        {
                            continue;
                        }
                    }


                    //给用户发满送券
                    MyCardCoupons model = new MyCardCoupons();
                    model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), GetGUID(BLLJIMP.TransacType.CommAdd));
                    model.CardCouponType   = cardCoupon.CardCouponType;
                    model.CardId           = cardCoupon.CardId;
                    model.InsertDate       = DateTime.Now;
                    model.UserId           = userInfo.UserID;
                    model.WebSiteOwner     = userInfo.WebsiteOwner;
                    if (Add(model))
                    {
                        string title     = "您收到一张优惠券";
                        string content   = string.Format("{0}", cardCoupon.Name);
                        string redicturl = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/mycoupons#/mycoupons", bllDomain.GetWebsiteDoMain(userInfo.WebsiteOwner));
                        bllWeixin.SendTemplateMessageNotifyComm(userInfo, title, content, redicturl);
                    }
                }
            }
            catch (Exception)
            {
            }
        }
예제 #5
0
        /// <summary>
        /// 发优惠券给指定用户
        /// </summary>
        /// <param name="cardCouponId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool SendCardCoupon(int cardCouponId, string userId)
        {
            CardCoupons cardCoupon = GetCardCoupon(cardCouponId);

            MyCardCoupons model = new MyCardCoupons();

            model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMdd"), new Random().Next(11111, 99999).ToString() + GetGUID(TransacType.CommAdd));
            model.CardCouponType   = cardCoupon.CardCouponType;
            model.CardId           = cardCoupon.CardId;
            model.InsertDate       = DateTime.Now;
            model.UserId           = userId;
            model.WebSiteOwner     = WebsiteOwner;

            return(Add(model));
        }
예제 #6
0
        /// <summary>
        /// 使用我的卡券
        /// </summary>
        /// <param name="autoId">卡券自动编号(不是卡券号码)</param>
        /// <param name="msg">返回消息</param>
        /// <returns></returns>
        public bool UseMyCardCoupons(EnumCardCouponType cardCouponType, string userId, int autoId, out string msg)
        {
            msg = "";
            MyCardCoupons myCardCoupons = Get <MyCardCoupons>(string.Format("CardCouponType='{0}' And UserId='{1}' And AutoId={2}", CommonPlatform.Helper.EnumStringHelper.ToString(cardCouponType), userId, autoId));

            if (myCardCoupons == null)
            {
                msg = "卡券不存在";
                return(false);
            }
            CardCoupons cardCoupons = GetCardCoupon(CommonPlatform.Helper.EnumStringHelper.ToString(cardCouponType), myCardCoupons.CardId);

            if (cardCoupons == null)
            {
                msg = "卡券不存在";
                return(false);
            }
            if (myCardCoupons.Status == 1)
            {
                msg = "卡券已使用过了";
                return(false);
            }
            if (cardCoupons.ValidFrom != null)
            {
                if (DateTime.Now < (DateTime)(cardCoupons.ValidFrom))
                {
                    msg = string.Format("请在{0}后使用", cardCoupons.ValidFrom.ToString());
                    return(false);
                }
            }
            if (cardCoupons.ValidTo != null)
            {
                if (DateTime.Now > (DateTime)(cardCoupons.ValidTo))
                {
                    msg = "卡券已过期";
                    return(false);
                }
            }
            myCardCoupons.Status  = 1;
            myCardCoupons.UseDate = DateTime.Now;
            if (Update(myCardCoupons))
            {
                msg = "成功使用";
                return(true);
            }
            return(false);
        }
예제 #7
0
 /// <summary>
 /// 检查优惠券是否可以赠送给他人
 /// </summary>
 /// <param name="myCoupon">我的优惠券</param>
 /// <returns></returns>
 public bool IsCanGiveCoupon(MyCardCoupons myCoupon, out string msg)
 {
     msg = "";
     if (!IsCanUseCoupon(myCoupon, out msg))
     {
         return(false);
     }
     if (!string.IsNullOrEmpty(myCoupon.FromUserId))
     {
         return(false);
     }
     if (string.IsNullOrEmpty(myCoupon.ToUserId))
     {
         return(true);
     }
     return(false);
 }
예제 #8
0
        /// <summary>
        /// 接收门票信息
        /// </summary>
        /// <param name="cardCouponType">卡券类型</param>
        /// <param name="cardId">卡券编号</param>
        /// <param name="userId">用户名</param>
        /// <param name="msg">提示信息</param>
        /// <returns></returns>
        public bool ReciveCoupon(EnumCardCouponType cardCouponType, int cardId, string userId, out string msg)
        {
            msg = "";
            if (IsCardCouponExpire(cardCouponType, cardId))
            {
                msg = "卡券已经过期";
                return(false);
            }
            if (IsReciveCoupon(cardCouponType, cardId, userId))
            {
                msg = "已经领取过了";
                return(false);
            }
            switch (cardCouponType)
            {
            case EnumCardCouponType.EntranceTicket:
                MyCardCoupons Model = new MyCardCoupons();
                Model.CardCouponType   = CommonPlatform.Helper.EnumStringHelper.ToString(cardCouponType);
                Model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMdd"), new Random().Next(11111, 99999).ToString());
                Model.CardId           = cardId;
                Model.InsertDate       = DateTime.Now;
                Model.Status           = 0;
                Model.UserId           = userId;
                Model.WebSiteOwner     = WebsiteOwner;
                if (Add(Model))
                {
                    msg = "领取成功";
                    return(true);
                }
                else
                {
                    msg = "领取失败";
                    return(false);
                }

            default:
                break;
            }



            return(false);
        }
예제 #9
0
파일: CardCoupon.ashx.cs 프로젝트: uvbs/mmp
        /// <summary>
        /// 卡券转赠
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private string Give(HttpContext context)
        {
            string cardcouponId = context.Request["cardcoupon_id"];//我的卡券ID

            if (string.IsNullOrEmpty(cardcouponId))
            {
                apiResp.code = (int)BLLJIMP.Enums.APIErrCode.PrimaryKeyIncomplete;
                apiResp.msg  = "cardcoupon_id 参数必传";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            MyCardCoupons fromMyCardCoupon = bllCardCoupon.GetMyCardCoupon(int.Parse(cardcouponId));//要赠送的卡券信息
            CardCoupons   cardCoupon       = bllCardCoupon.GetCardCoupon(fromMyCardCoupon.CardId);

            if (fromMyCardCoupon == null)
            {
                apiResp.code = (int)BLLJIMP.Enums.APIErrCode.PrimaryKeyIncomplete;
                apiResp.msg  = "卡券不存在";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            if (fromMyCardCoupon.UserId == currentUserInfo.UserID)
            {
                apiResp.code = (int)BLLJIMP.Enums.APIErrCode.NoFollow;
                apiResp.msg  = "不能接收自己的卡券";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            if (!string.IsNullOrEmpty(fromMyCardCoupon.FromUserId))
            {
                apiResp.code = (int)BLLJIMP.Enums.APIErrCode.NoFollow;
                apiResp.msg  = "优惠券不能多次转赠";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            if (cardCoupon.GetLimitType != null)
            {
                if (cardCoupon.GetLimitType == "1" && !bllUser.IsDistributionMember(currentUserInfo, true))
                {
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyDistMember;
                    apiResp.msg  = "只有分销员才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }
                if (cardCoupon.GetLimitType == "2" && bllUser.IsDistributionMember(currentUserInfo))
                {
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyNotDistMember;
                    apiResp.msg  = "该券仅新用户(无购买历史)可以领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }
            }
            if (!string.IsNullOrEmpty(cardCoupon.BindChannelUserId))
            {
                if (string.IsNullOrEmpty(currentUserInfo.DistributionOwner))
                {
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyChannel;
                    apiResp.msg  = "只有指定渠道才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }
                BLLJIMP.BLLDistribution bllDis = new BLLJIMP.BLLDistribution();
                string channelUserId           = bllDis.GetUserChannel(currentUserInfo);
                if (cardCoupon.BindChannelUserId != channelUserId)
                {
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyChannel;
                    apiResp.msg  = "只有指定渠道才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }
            }
            string msg = "";

            if (!bllCardCoupon.IsCanGiveCoupon(fromMyCardCoupon, out msg))//无法转赠给他人
            {
                apiResp.msg = msg;
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }

            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                MyCardCoupons model = new MyCardCoupons();
                model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), bllMall.GetGUID(BLLJIMP.TransacType.CommAdd));
                model.CardCouponType   = fromMyCardCoupon.CardCouponType;
                model.CardId           = fromMyCardCoupon.CardId;
                model.InsertDate       = DateTime.Now;
                model.UserId           = currentUserInfo.UserID;
                model.WebSiteOwner     = currentUserInfo.WebsiteOwner;
                model.FromUserId       = fromMyCardCoupon.UserId;
                if (!bllCardCoupon.Add(model))
                {
                    tran.Rollback();
                    apiResp.msg = "接收失败";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }

                fromMyCardCoupon.Status   = 2;
                fromMyCardCoupon.ToUserId = currentUserInfo.UserID;
                if (!bllCardCoupon.Update(fromMyCardCoupon))
                {
                    tran.Rollback();
                    apiResp.msg = "接收失败";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }

                // CardCoupons cardCoupon = bllCardCoupon.GetCardCoupon(fromMyCardCoupon.CardId);
                //if (cardCoupon == null)
                //{
                //    tran.Rollback();
                //    apiResp.msg = "卡券不存在";
                //    return ZentCloud.Common.JSONHelper.ObjectToJson(apiResp);
                //}
                UserInfo fromUserInfo = bllUser.GetUserInfo(fromMyCardCoupon.UserId);
                if (fromUserInfo == null)
                {
                    tran.Rollback();
                    apiResp.msg = "赠送用户不存在";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }
                bllWeixin.SendTemplateMessageNotifyComm(fromUserInfo, "优惠券转赠通知", string.Format(" {0}已领取你转赠的优惠券{1}", bllUser.GetUserDispalyName(currentUserInfo), cardCoupon.Name));
                bllWeixin.SendTemplateMessageNotifyComm(currentUserInfo, "优惠券领取通知", string.Format(" 您已经领取来自{0}转赠的优惠券{1}", bllUser.GetUserDispalyName(fromUserInfo), cardCoupon.Name));
                tran.Commit();

                #region 分销关系建立
                BLLPermission.BLLMenuPermission bllMenuPermission = new BLLPermission.BLLMenuPermission("");
                if (bllMenuPermission.CheckUserAndPmsKey(currentUserInfo.WebsiteOwner, BLLPermission.Enums.PermissionSysKey.OnlineDistribution))
                {
                    if (string.IsNullOrWhiteSpace(currentUserInfo.DistributionOwner))
                    {
                        WebsiteInfo websiteInfo = bllMall.GetWebsiteInfoModelFromDataBase();
                        if (websiteInfo.DistributionRelationBuildMallOrder == 1)
                        {
                            if (bllUser.IsDistributionMember(fromUserInfo) || (fromUserInfo.UserID == websiteInfo.WebsiteOwner))//上级符合分销员标准
                            {
                                BLLJIMP.BLLDistribution bllDis = new BLLJIMP.BLLDistribution();

                                var setUserDistributionOwnerResult = bllDis.SetUserDistributionOwner(currentUserInfo.UserID, fromUserInfo.UserID, currentUserInfo.WebsiteOwner);
                            }
                        }
                    }
                }
                #endregion


                apiResp.status = true;
                apiResp.msg    = "ok";
            }
            catch (Exception ex)
            {
                apiResp.msg = ex.Message;
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
        }
예제 #10
0
파일: CardCoupon.ashx.cs 프로젝트: uvbs/mmp
        /// <summary>
        /// 获取主卡券
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private string GetMainCardCoupon(HttpContext context)
        {
            string cardCouponId   = context.Request["cardcoupon_id"];    //主卡券ID
            string myCardCouponId = context.Request["my_cardcoupon_id"]; //我的卡券ID

            if (string.IsNullOrEmpty(cardCouponId))
            {
                resp.errcode = 1;
                resp.errmsg  = "cardcoupon_id 参数必传";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            CardCoupons cardCoupon = bllCardCoupon.GetCardCoupon(int.Parse(cardCouponId));

            if (cardCoupon == null)
            {
                resp.errcode = 1;
                resp.errmsg  = "cardcoupon_id 不存在";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            cardCoupon = bllCardCoupon.ConvertExpireTime(cardCoupon);
            if (!string.IsNullOrEmpty(cardCoupon.BindChannelUserId))
            {
                if (string.IsNullOrEmpty(currentUserInfo.DistributionOwner))
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyChannel;
                    resp.errmsg  = "只有指定渠道才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
                BLLJIMP.BLLDistribution bllDis = new BLLJIMP.BLLDistribution();
                string channelUserId           = bllDis.GetUserChannel(currentUserInfo);
                if (cardCoupon.BindChannelUserId != channelUserId)
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyChannel;
                    resp.errmsg  = "只有指定渠道才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
            }

            MainCardModel model = new MainCardModel();

            model.cardcoupon_id       = cardCoupon.CardId;
            model.cardcoupon_name     = cardCoupon.Name;
            model.cardcoupon_type     = ConvertCardCouponType(cardCoupon.CardCouponType);
            model.valid_from          = cardCoupon.ValidFrom.ToString();
            model.valid_to            = cardCoupon.ValidTo.ToString();
            model.img_url             = bllMall.GetImgUrl(cardCoupon.Logo);
            model.discount            = string.IsNullOrEmpty(cardCoupon.Ex1) ? 0 : double.Parse(cardCoupon.Ex1);
            model.product_id          = string.IsNullOrEmpty(cardCoupon.Ex2) ? 0 : double.Parse(cardCoupon.Ex2);
            model.deductible_amount   = string.IsNullOrEmpty(cardCoupon.Ex3) ? 0 : double.Parse(cardCoupon.Ex3);
            model.freefreight_amount  = string.IsNullOrEmpty(cardCoupon.Ex4) ? 0 : double.Parse(cardCoupon.Ex4);
            model.buckle_amount       = string.IsNullOrEmpty(cardCoupon.Ex5) ? 0 : double.Parse(cardCoupon.Ex5);
            model.buckle_sub_amount   = string.IsNullOrEmpty(cardCoupon.Ex6) ? 0 : double.Parse(cardCoupon.Ex6);
            model.max_count           = cardCoupon.MaxCount;
            model.send_count          = cardCoupon.SendCount;
            model.un_send_count       = cardCoupon.UnSendCount;
            model.is_recivece         = bllCardCoupon.IsReciveCoupon(cardCoupon.CardId, currentUserInfo.UserID);
            model.valid_to_timestamp  = bllCardCoupon.GetTimeStamp((DateTime)cardCoupon.ValidTo);
            model.limit_type          = cardCoupon.Ex7;
            model.product_tags        = cardCoupon.Ex8;
            model.user_get_limit_type = cardCoupon.GetLimitType;
            model.is_can_use_shop     = cardCoupon.IsCanUseShop;
            model.is_can_use_groupbuy = cardCoupon.IsCanUseGroupbuy;
            model.expire_time_type    = cardCoupon.ExpireTimeType;
            model.expire_day          = cardCoupon.ExpireDay;
            model.weixin_card_id      = cardCoupon.WeixinCardId == null?"":cardCoupon.WeixinCardId;
            if (!string.IsNullOrEmpty(myCardCouponId))
            {
                MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(int.Parse(myCardCouponId));
                if (myCardCoupon != null)
                {
                    UserInfo fromUserInfo = bllUser.GetUserInfo(myCardCoupon.UserId);
                    if (fromUserInfo != null)
                    {
                        model.from_user_info = new UserInfoModel();
                        model.from_user_info.head_img_url = bllUser.GetUserDispalyAvatar(fromUserInfo);
                        model.from_user_info.nick_name    = bllUser.GetUserDispalyName(fromUserInfo);
                    }
                    if (!string.IsNullOrEmpty(myCardCoupon.ToUserId))
                    {
                        model.is_donation = true;
                    }
                    model.cardcoupon_number = myCardCoupon.CardCouponNumber;
                }
            }

            return(ZentCloud.Common.JSONHelper.ObjectToJson(model));
        }
예제 #11
0
파일: CardCoupon.ashx.cs 프로젝트: uvbs/mmp
        /// <summary>
        /// 领取卡券
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private string ReciveCardCoupon(HttpContext context)
        {
            string      cardCouponId = context.Request["cardcoupon_id"];
            CardCoupons cardCoupon   = bllCardCoupon.GetCardCoupon(int.Parse(cardCouponId));

            if (cardCoupon == null)
            {
                resp.errcode = 1;
                resp.errmsg  = "cardcoupon_id 不存在";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            cardCoupon = bllCardCoupon.ConvertExpireTime(cardCoupon);
            var myCardCoupon = bllCardCoupon.GetMyCardCouponMainId(int.Parse(cardCouponId), currentUserInfo.UserID);

            if (myCardCoupon != null)
            {
                resp.errcode = 1;
                resp.errmsg  = "已经领取过了";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            if (DateTime.Now > (DateTime)(cardCoupon.ValidTo))
            {
                resp.errcode = 2;
                resp.errmsg  = "卡券已过期";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            if (cardCoupon.MaxCount > 0)
            {
                if (bllCardCoupon.GetCardCouponSendCount(cardCoupon.CardId) >= cardCoupon.MaxCount)
                {
                    resp.errcode = 2;
                    resp.errmsg  = "卡券已经领完";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
            }

            if (cardCoupon.GetLimitType != null)
            {
                if (cardCoupon.GetLimitType == "1" && !bllUser.IsDistributionMember(currentUserInfo, true))
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyDistMember;
                    resp.errmsg  = "只有分销员才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
                if (cardCoupon.GetLimitType == "2" && bllUser.IsDistributionMember(currentUserInfo))
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyNotDistMember;
                    resp.errmsg  = "该券仅新用户(无购买历史)可以领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
            }
            if (!string.IsNullOrEmpty(cardCoupon.BindChannelUserId))
            {
                if (string.IsNullOrEmpty(currentUserInfo.DistributionOwner))
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyChannel;
                    resp.errmsg  = "只有指定渠道才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
                BLLJIMP.BLLDistribution bllDis = new BLLJIMP.BLLDistribution();
                string channelUserId           = bllDis.GetUserChannel(currentUserInfo);

                if (cardCoupon.BindChannelUserId != channelUserId)
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.MallGetCardOnlyChannel;
                    resp.errmsg  = "只有指定渠道才能领取";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
            }



            MyCardCoupons model = new MyCardCoupons();

            model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), bllMall.GetGUID(BLLJIMP.TransacType.CommAdd));
            model.CardCouponType   = cardCoupon.CardCouponType;
            model.CardId           = cardCoupon.CardId;
            model.InsertDate       = DateTime.Now;
            model.UserId           = currentUserInfo.UserID;
            model.WebSiteOwner     = bllCardCoupon.WebsiteOwner;
            if (bllCardCoupon.Add(model))
            {
                resp.errmsg = "ok";
                string title   = "您收到了一张优惠券";
                string content = string.Format("{0}", cardCoupon.Name);

                if (cardCoupon.ValidTo.HasValue)
                {
                    content += string.Format("\\n{0}", ((DateTime)cardCoupon.ValidTo).ToString("yyyy-MM-dd"));
                }

                string url = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/mycoupons#/mycoupons", context.Request.Url.Host);

                if (bllUser.WebsiteOwner == "jikuwifi")
                {
                    url = string.Format("http://{0}/customize/jikuwifi/?v=1.0&ngroute=/mycoupons#/mycoupons", context.Request.Url.Host);
                }

                bllWeixin.SendTemplateMessageNotifyComm(currentUserInfo, title, content, url);

                //#region 同时发放到微信卡包
                //if (!string.IsNullOrEmpty(cardCoupon.WeixinCardId) && (!string.IsNullOrEmpty(CurrentUserInfo.WXOpenId)))
                //{
                //    bllWeixinCard.SendByMass(cardCoupon.WeixinCardId, CurrentUserInfo.WXOpenId);

                //}
                //#endregion
            }
            else
            {
                resp.errcode = 1;
                resp.errmsg  = "领取优惠券失败";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
        }
예제 #12
0
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                string     data       = context.Request["data"];
                decimal    productFee = 0;    //商品总价格 不包含邮费
                decimal    deviceFee  = 0;    //租金总金额,不包含押金
                OrderModel orderRequestModel; //订单模型
                try
                {
                    orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderModel>(data);
                }
                catch (Exception ex)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "JSON格式错误,请检查.错误信息:" + ex.Message;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (string.IsNullOrEmpty(orderRequestModel.departure_date))
                {
                    resp.errcode = 1;
                    resp.errmsg  = "请选择出发日期";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (string.IsNullOrEmpty(orderRequestModel.backhome_date))
                {
                    resp.errcode = 1;
                    resp.errmsg  = "请选择回国日期";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                WXMallOrderInfo orderInfo = new WXMallOrderInfo(); //订单表
                string          orderId   = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
                orderInfo.OrderID        = CreateOrderId(orderId); //内部订单号
                orderInfo.OutOrderId     = CreateOrderId(orderId); //外部订单号
                orderInfo.Consignee      = orderRequestModel.receiver_name;
                orderInfo.InsertDate     = DateTime.Now;
                orderInfo.OrderUserID    = CurrentUserInfo.UserID;
                orderInfo.Phone          = orderRequestModel.receiver_phone;
                orderInfo.WebsiteOwner   = bllMall.WebsiteOwner;
                orderInfo.Transport_Fee  = 0;
                orderInfo.OrderMemo      = orderRequestModel.buyer_memo;
                orderInfo.ZipCode        = orderRequestModel.receiver_zip;
                orderInfo.MyCouponCardId = orderRequestModel.cardcoupon_id.ToString();
                orderInfo.UseScore       = orderRequestModel.use_score;
                orderInfo.Status         = "待付款";
                orderInfo.Email          = orderRequestModel.email;
                orderInfo.Tel            = orderRequestModel.receiver_tel;
                orderInfo.DeliveryType   = orderRequestModel.delivery_type;
                orderInfo.Ex1            = bllMall.GetTime(long.Parse(orderRequestModel.departure_date)).ToString(); //出国时间
                orderInfo.Ex2            = bllMall.GetTime(long.Parse(orderRequestModel.backhome_date)).ToString();  //回国时间
                orderInfo.LastUpdateTime = DateTime.Now;
                if (!string.IsNullOrEmpty(orderRequestModel.sale_id))                                                //分销ID
                {
                    long saleId = 0;
                    if (long.TryParse(orderRequestModel.sale_id, out saleId))
                    {
                        orderInfo.SellerId = saleId;
                    }
                }
                if (orderRequestModel.pay_type == "WEIXIN")//微信支付
                {
                    orderInfo.PaymentType = 2;
                }
                else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
                {
                    orderInfo.PaymentType = 1;
                }

                #region 格式检查
                if (string.IsNullOrEmpty(orderInfo.Consignee))
                {
                    resp.errcode = 1;
                    resp.errmsg  = "收货人姓名不能为空";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (string.IsNullOrEmpty(orderRequestModel.receiver_phone))
                {
                    resp.errcode = 1;
                    resp.errmsg  = "收货人联系手机号不能为空";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                #region 快递
                if (orderRequestModel.delivery_type == 0)//快递
                {
                    //相关检查
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_province))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "省份名称不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_province_code))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "省份代码不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_city))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "城市名称不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_city_code))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "城市代码不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_dist))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "城市区域名称不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_dist_code))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "城市区域代码不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.receiver_address))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "街道地址不能为空";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    orderInfo.ReceiverProvince     = orderRequestModel.receiver_province;
                    orderInfo.ReceiverProvinceCode = orderRequestModel.receiver_province_code;
                    orderInfo.ReceiverCity         = orderRequestModel.receiver_city;
                    orderInfo.ReceiverCityCode     = orderRequestModel.receiver_city_code;
                    orderInfo.ReceiverDist         = orderRequestModel.receiver_dist;
                    orderInfo.ReceiverDistCode     = orderRequestModel.receiver_dist_code;
                    orderInfo.Address = orderRequestModel.receiver_address;
                    orderInfo.ZipCode = orderRequestModel.receiver_zip;
                }
                #endregion

                #region  门自提
                if (orderRequestModel.delivery_type == 1)//自提点
                {
                    if (string.IsNullOrEmpty(orderRequestModel.get_address_id))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "自提点ID为必填项,请检查";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (string.IsNullOrEmpty(orderRequestModel.get_address_name))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "自提点名称为必填项,请检查";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    //if (string.IsNullOrEmpty(orderRequestModel.ex7))
                    //{
                    //    resp.errcode = 1;
                    //    resp.errmsg = "自提时间为必填项,请检查";
                    //    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    //    return;
                    //}
                    orderInfo.Ex3 = orderRequestModel.get_address_id;
                    orderInfo.Ex4 = orderRequestModel.get_address_name;
                    orderInfo.Ex5 = bllMall.GetGetAddress(orderRequestModel.get_address_id).GetAddressLocation;
                    //orderInfo.Ex7 = orderRequestModel.ex7;//自提时间
                }
                #endregion

                if (orderRequestModel.skus == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "skus 参数不能为空";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                DateTime startTime  = DateTime.Parse(bllMall.GetTime(long.Parse(orderRequestModel.departure_date)).ToString("yyyy/MM/dd"));
                DateTime returnTime = bllMall.GetTime(long.Parse(orderRequestModel.backhome_date));
                if (returnTime <= startTime)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "回国日期不能晚于或等于出发日期";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                int day = (int)(returnTime - startTime).TotalDays + 1;
                if (day < 3)
                {
                    resp.errcode = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    resp.errmsg  = "起租最低为3天";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }


                //相关检查
                #endregion

                #region 商品检查 订单详情生成
                ///订单详情
                List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情
                //orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList();
                #region 购买的商品
                List <WXMallProductInfo> productList = new List <WXMallProductInfo>();
                foreach (var sku in orderRequestModel.skus)
                {
                    ProductSku        productSku  = bllMall.GetProductSku(sku.sku_id);
                    WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    productList.Add(productInfo);
                }
                productList = productList.Distinct().ToList();
                #endregion
                #region 检查优惠券是否可用
                if (orderRequestModel.cardcoupon_id > 0)
                {
                    var mycardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                    if (mycardCoupon == null)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "无效的优惠券";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }
                    var cardCoupon = bllCardCoupon.GetCardCoupon(mycardCoupon.CardId);
                    if (cardCoupon == null)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "无效的优惠券";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }
                    #region 需要购买指定商品
                    if ((!string.IsNullOrEmpty(cardCoupon.Ex2)) && (cardCoupon.Ex2 != "0"))
                    {
                        if (productList.Count(p => p.PID == cardCoupon.Ex2) == 0)
                        {
                            var productInfo = bllMall.GetProduct(cardCoupon.Ex2);
                            resp.errcode = 1;
                            resp.errmsg  = string.Format("此优惠券需要购买{0}时才可以使用", productInfo.PName);
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                        }
                    }


                    #endregion

                    #region 需要购买指定标签商品
                    if (!string.IsNullOrEmpty(cardCoupon.Ex8))
                    {
                        if (productList.Where(p => p.Tags == "" || p.Tags == null).Count() == productList.Count)//全部商品都没有标签
                        {
                            resp.errcode = 1;
                            resp.errmsg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                        }
                        bool checkResult = false;
                        foreach (var product in productList)
                        {
                            if (!string.IsNullOrEmpty(product.Tags))
                            {
                                foreach (string tag in product.Tags.Split(','))
                                {
                                    if (cardCoupon.Ex8.Contains(tag))
                                    {
                                        checkResult = true;
                                        break;
                                    }
                                }
                            }
                        }
                        if (!checkResult)
                        {
                            resp.errcode = 1;
                            resp.errmsg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                        }
                    }
                    #endregion
                }
                #endregion

                List <int> relationSkuList = new List <int>();//关联的SKU
                foreach (var sku in orderRequestModel.skus)
                {
                    //先检查库存
                    ProductSku productSku = bllMall.GetProductSku(sku.sku_id);
                    if (productSku == null)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "SKU不存在";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }
                    WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    if (productInfo.IsDelete == 1)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("{0}已下架", productInfo.PName);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (productInfo.IsOnSale == "0")
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("{0}已下架", productInfo.PName);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    if (bllMall.GetSkuCount(productSku) < sku.count)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("{0}{1}库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.Stock);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    if (!string.IsNullOrEmpty(productInfo.RelationProductId))
                    {
                        WXMallProductInfo relationProductInfo = bllMall.GetProduct(productInfo.RelationProductId);
                        var relationProductSkuList            = bllMall.GetProductSkuList(int.Parse(relationProductInfo.PID));
                        if (orderRequestModel.skus.Where(p => p.sku_id == relationProductSkuList[0].SkuId).Count() == 0)
                        {
                            resp.errcode = 1;
                            resp.errmsg  = string.Format("{0}必须有关联商品下单", productInfo.PName);
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                        else
                        {
                            relationSkuList.Add(relationProductSkuList[0].SkuId);//关联的Sku商品不参与运费计算
                        }
                    }
                    //if (bllMall.IsLimitProductTime(productInfo, orderInfo.Ex1, orderInfo.Ex2))
                    //{
                    //    resp.errcode = 1;
                    //    resp.errmsg = string.Format("{0} 暂时不能购买", productInfo.PName);
                    //    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    //    return;
                    //}


                    WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
                    detailModel.OrderID    = orderInfo.OrderID;
                    detailModel.PID        = productInfo.PID;
                    detailModel.TotalCount = sku.count;
                    if (!string.IsNullOrEmpty(productInfo.RelationProductId))//
                    {
                        //detailModel.OrderPrice = bllMall.GetSkuPrice(productSku) * day;
                        //List<string> dateRange = new List<string>();//时间范围
                        //startTime = DateTime.Parse(startTime.ToString("yyyy/MM/dd"));
                        //returnTime = DateTime.Parse(returnTime.ToString("yyyy/MM/dd"));
                        //for (int i = 1; i < (returnTime - startTime).TotalDays; i++)
                        //{
                        //    dateRange.Add(startTime.AddDays(i).ToString("yyyy/MM/dd"));
                        //}
                        //dateRange.Add(startTime.ToString("yyyy/MM/dd"));
                        //dateRange.Add(returnTime.ToString("yyyy/MM/dd"));
                        //dateRange = dateRange.Distinct().ToList();
                        //detailModel.OrderPrice = 0;
                        //foreach (var date in dateRange)//
                        //{
                        detailModel.OrderPrice = bllMall.GetSkuPriceByDate(productSku, startTime.ToString("yyyy/MM/dd")) * day;
                        //}
                        deviceFee += (decimal)detailModel.OrderPrice * detailModel.TotalCount;
                    }
                    else//设备租金
                    {
                        detailModel.OrderPrice = bllMall.GetSkuPrice(productSku);
                    }
                    detailModel.ProductName     = productInfo.PName;
                    detailModel.SkuId           = productSku.SkuId;
                    detailModel.ParentProductId = sku.parent_product_id;
                    detailList.Add(detailModel);
                }
                #endregion
                productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;   //商品费用
                #region 运费计算

                List <ZentCloud.BLLJIMP.Model.API.Mall.SkuModel> skuList = new List <ZentCloud.BLLJIMP.Model.API.Mall.SkuModel>();
                foreach (var item in orderRequestModel.skus)
                {
                    ZentCloud.BLLJIMP.Model.API.Mall.SkuModel sku = new BLLJIMP.Model.API.Mall.SkuModel();
                    sku.sku_id = item.sku_id;
                    sku.count  = item.count;
                    skuList.Add(sku);
                }
                decimal freight    = 0;                   //运费
                string  freightMsg = "";
                if (orderRequestModel.delivery_type == 0) //配送方式为快递时才计算运费
                {
                    FreightModel freightModel = new FreightModel();
                    freightModel.receiver_province_code = int.Parse(orderRequestModel.receiver_province_code);
                    freightModel.receiver_city_code     = int.Parse(orderRequestModel.receiver_city_code);
                    freightModel.receiver_dist_code     = int.Parse(orderRequestModel.receiver_dist_code);
                    freightModel.skus = skuList;
                    foreach (int relationSku in relationSkuList)
                    {
                        //关联SKU不参与运费计算
                        freightModel.skus = freightModel.skus.Where(p => p.sku_id != relationSku).ToList();
                    }
                    if (!bllMall.CalcFreight(freightModel, out freight, out freightMsg))
                    {
                        resp.errcode = 1;
                        resp.errmsg  = freightMsg;
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }



                orderInfo.Transport_Fee = freight;
                #endregion

                orderInfo.Product_Fee = productFee;
                orderInfo.TotalAmount = orderInfo.Product_Fee + orderInfo.Transport_Fee;
                #region 优惠券计算
                decimal discountAmount   = 0;//优惠金额
                bool    canUseCardCoupon = false;
                string  msg = "";
                if (orderRequestModel.cardcoupon_id > 0)//有优惠券
                {
                    discountAmount = bllMall.CalcDiscountAmountWifi(orderRequestModel.cardcoupon_id.ToString(), data, CurrentUserInfo.UserID, out canUseCardCoupon, deviceFee, out msg);
                    if (!canUseCardCoupon)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = msg;
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }
                    if (discountAmount > productFee + orderInfo.Transport_Fee)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "优惠券可优惠金额超过了订单总金额";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }
                    orderInfo.CardcouponDisAmount = discountAmount;
                }
                #endregion

                #region 积分计算
                decimal scoreExchangeAmount = 0;///积分抵扣的金额
                //积分计算
                if (orderRequestModel.use_score > 0)
                {
                    if (CurrentUserInfo.TotalScore < orderRequestModel.use_score)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "积分不足";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }
                    ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                    scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
                }



                //积分计算
                #endregion

                #region 合计计算

                orderInfo.TotalAmount  -= discountAmount;                  //优惠券优惠金额
                orderInfo.TotalAmount  -= scoreExchangeAmount;             //积分优惠金额
                orderInfo.PayableAmount = orderInfo.TotalAmount - freight; //应付金额
                if ((productFee + orderInfo.Transport_Fee - discountAmount - scoreExchangeAmount) < orderInfo.TotalAmount)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "积分兑换金额不能大于订单总金额,请减少积分兑换";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                #endregion
                if (orderInfo.TotalAmount <= 0)
                {
                    //resp.errcode = 1;
                    //resp.errmsg = "付款金额不能小于0";
                    //context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    //return;
                    orderInfo.TotalAmount   = 0;
                    orderInfo.PaymentStatus = 1;
                    orderInfo.PayTime       = DateTime.Now;
                    orderInfo.Status        = "待发货";
                }

                ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
                try
                {
                    if (!this.bllMall.Add(orderInfo, tran))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "提交失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                    }

                    #region 更新优惠券使用状态
                    //优惠券
                    if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用
                    {
                        MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                        myCardCoupon.UseDate = DateTime.Now;
                        myCardCoupon.Status  = 1;
                        if (!bllCardCoupon.Update(myCardCoupon, tran))
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "更新优惠券状态失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                        }
                    }
                    //优惠券
                    #endregion

                    #region 积分抵扣
                    //积分扣除
                    if (orderRequestModel.use_score > 0)
                    {
                        CurrentUserInfo.TotalScore -= orderRequestModel.use_score;
                        if (bllMall.Update(CurrentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", CurrentUserInfo.AutoID)) < 0)
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "更新用户积分失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                        }
                        //积分记录
                        UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                        scoreRecord.AddTime    = DateTime.Now;
                        scoreRecord.Score      = -orderRequestModel.use_score;
                        scoreRecord.TotalScore = CurrentUserInfo.TotalScore;
                        scoreRecord.ScoreType  = "OrderSubmit";
                        scoreRecord.UserID     = CurrentUserInfo.UserID;
                        scoreRecord.AddNote    = "微商城-下单使用积分";
                        if (!bllMall.Add(scoreRecord))
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "插入积分记录失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                        //积分记录
                    }

                    //积分扣除
                    #endregion

                    #region 插入订单详情页及更新库存
                    foreach (var item in detailList)
                    {
                        ProductSku        productSku  = bllMall.GetProductSku((int)(item.SkuId));
                        WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                        if (!this.bllMall.Add(item, tran))
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "提交失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return;
                        }
                        //更新 SKU库存
                        if (ZentCloud.ZCBLLEngine.BLLBase.ExecuteSql(string.Format("update ZCJ_ProductSku set Stock-={0} where SkuId={1} And Stock>0", item.TotalCount, productSku.SkuId), tran) <= 0)
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "提交订单失败,库存不足";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion
                    bllMall.DeleteShoppingCart(CurrentUserInfo.UserID, skuList);
                    bllLog.Add(BLLJIMP.Enums.EnumLogType.Mall, BLLJIMP.Enums.EnumLogTypeAction.Add, bllLog.GetCurrUserID(), "提交订单", orderInfo.OrderID);
                    tran.Commit();//提交订单事务
                }
                catch (Exception ex)
                {
                    //回滚事物
                    tran.Rollback();
                    resp.errcode = 1;
                    resp.errmsg  = "提交订单失败,内部错误";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(new
                {
                    errcode      = 0,
                    errmsg       = "ok",
                    order_id     = orderInfo.OrderID,
                    total_amount = orderInfo.TotalAmount
                }));
            }
            catch (Exception ex)
            {
                resp.errcode = 1;
                resp.errmsg  = ex.ToString();
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
        }
예제 #13
0
        public void ProcessRequest(HttpContext context)
        {
            StringBuilder sbWhere = new StringBuilder();

            sbWhere.AppendFormat(" WebsiteOwner= '{0}' And IsNull(IsMain,0)=0", bllMall.WebsiteOwner);
            string fromDate       = context.Request["from_date"];       //开始日期
            string toDate         = context.Request["to_date"];         //结束日期
            string status         = context.Request["status"];          //订单状态
            string orderIds       = context.Request["oids"];            //订单号
            string userAutoIds    = context.Request["user_aids"];       //用户自动编号
            string userTags       = context.Request["user_tags"];       //用户标签
            string isYuYueOrder   = context.Request["is_yuyue"];        //是否是会议室预约和资源预约订单
            string supplierUserId = context.Request["supplier_userid"]; //供应商账号
            //订单类型
            //0 商城订单
            //1 礼品订单
            //2 团购订单
            //3 无
            //4 活动订单
            //5 会议室预订
            //6 导师预约
            string orderType = context.Request["order_type"];

            if (!string.IsNullOrEmpty(orderType))
            {
                if (orderType == "5")
                {
                    sbWhere.AppendFormat(" And ArticleCategoryType='MeetingRoom'");
                }
                else if (orderType == "6")
                {
                    sbWhere.AppendFormat(" And ArticleCategoryType='BookingTutor'");
                }
                else
                {
                    sbWhere.AppendFormat(" And OrderType={0}", orderType);
                }
            }
            if (!string.IsNullOrEmpty(fromDate))
            {
                sbWhere.AppendFormat(" And InsertDate>='{0}'", fromDate);
            }
            if (!string.IsNullOrEmpty(toDate))
            {
                sbWhere.AppendFormat(" And InsertDate<='{0}'", toDate);
            }
            if (orderType == "2" && !string.IsNullOrEmpty(status))
            {
                status = ConvertGroupbuyStatus(status);
                sbWhere.AppendFormat(" And GroupBuyStatus in({0})", status);
            }
            if (orderType == "2")
            {
                sbWhere.AppendFormat(" And PaymentStatus=1 ", status);
            }
            if ((!string.IsNullOrEmpty(status)) && (status != "退款退货") && orderType != "2")
            {
                status = "'" + status.Replace(",", "','") + "'";
                sbWhere.AppendFormat(" And Status in({0})", status);
            }
            if (status == "退款退货")
            {
                sbWhere.AppendFormat(" And IsRefund=1 ");
            }
            if (!string.IsNullOrEmpty(orderIds))
            {
                orderIds = "'" + orderIds.Replace(",", "','") + "'";
                sbWhere.AppendFormat(" And OrderID in({0})  ", orderIds);
            }
            if (bllUser.IsSupplier(currentUserInfo))
            {
                sbWhere.AppendFormat(" And SupplierUserId ='{0}'  ", currentUserInfo.UserID);
            }
            if ((!string.IsNullOrEmpty(userAutoIds)) || (!string.IsNullOrEmpty(userTags)))
            {
                string userIds = "";
                if (!string.IsNullOrEmpty(userAutoIds))
                {
                    foreach (var userAutoId in userAutoIds.Split(','))
                    {
                        var userInfo = bllUser.GetUserInfoByAutoID(int.Parse(userAutoId));
                        if (userInfo != null)
                        {
                            userIds += string.Format("'{0}',", userInfo.UserID);
                        }
                    }
                }
                if (!string.IsNullOrEmpty(userTags))
                {
                    foreach (string tag in userTags.Split(','))
                    {
                        List <UserInfo> userList = bllUser.GetList <UserInfo>(string.Format(" Websiteowner='{0}' And TagName like '%{1}%'", bllUser.WebsiteOwner, tag));
                        foreach (var userInfo in userList)
                        {
                            userIds += string.Format("'{0}',", userInfo.UserID);
                        }
                    }
                }
                userIds = userIds.TrimEnd(',');
                sbWhere.AppendFormat(" And OrderUserId in({0})  ", userIds);
            }
            if (!string.IsNullOrEmpty(supplierUserId))
            {
                if (supplierUserId == "none")
                {
                    sbWhere.AppendFormat("  And (SupplierUserId='' Or SupplierUserId IS NULL)", "");
                }
                else
                {
                    sbWhere.AppendFormat(" And SupplierUserId ='{0}' ", supplierUserId);
                }
            }

            sbWhere.AppendFormat(" Order by InsertDate Desc ");

            List <WXMallOrderInfo> orderList = bllMall.GetList <WXMallOrderInfo>(sbWhere.ToString());
            //sbExport.Append("会员ID\t");
            DataTable dt1 = new DataTable();
            DataTable dt2 = new DataTable();

            dt1.Columns.Add("会员ID");
            dt1.Columns.Add("线上卡号");
            dt1.Columns.Add("OpenId");
            dt1.Columns.Add("订单时间");
            dt1.Columns.Add("父订单编号");
            dt1.Columns.Add("订单号");
            dt1.Columns.Add("订单状态");
            dt1.Columns.Add("商品编号");
            dt1.Columns.Add("商品编码");
            dt1.Columns.Add("商品名称");
            if (!string.IsNullOrEmpty(isYuYueOrder))
            {
                dt1.Columns.Add("预约时间");
            }
            dt1.Columns.Add("商品原价");
            dt1.Columns.Add("商品均摊价格");
            dt1.Columns.Add("商品单价");
            dt1.Columns.Add("商品规格");
            dt1.Columns.Add("商品条码");
            dt1.Columns.Add("商品数量");
            dt1.Columns.Add("商品总金额");
            dt1.Columns.Add("运费");
            dt1.Columns.Add("实付金额");
            dt1.Columns.Add("收货人姓名");
            dt1.Columns.Add("电话");
            dt1.Columns.Add("收货地址");
            dt1.Columns.Add("留言");
            dt1.Columns.Add("支付状态");
            dt1.Columns.Add("基础价");
            dt1.Columns.Add("使用积分");
            dt1.Columns.Add("使用余额");
            dt1.Columns.Add("优惠券名称");
            dt1.Columns.Add("优惠券ID");
            dt1.Columns.Add("退款");
            dt1.Columns.Add("主订单号");
            dt1.Columns.Add("商户名称");
            dt1.Columns.Add("商家备注");
            dt1.Columns.Add("快递公司");
            dt1.Columns.Add("快递单号");

            dt2.Columns.Add("订单时间");
            dt2.Columns.Add("订单号");
            dt2.Columns.Add("订单状态");
            dt2.Columns.Add("商品编号");
            dt2.Columns.Add("商品名称");
            dt2.Columns.Add("商品规格");
            dt2.Columns.Add("商品数量");
            dt2.Columns.Add("实付金额");
            dt2.Columns.Add("收货人姓名");
            dt2.Columns.Add("电话");
            dt2.Columns.Add("收货地址");
            dt2.Columns.Add("支付状态");
            dt2.Columns.Add("退款");
            dt2.Columns.Add("主订单号");
            dt2.Columns.Add("商户名称");
            dt2.Columns.Add("商家备注");
            dt2.Columns.Add("快递公司");
            dt2.Columns.Add("快递单号");

            for (int i = 0; i < orderList.Count; i++)
            {
                var userInfo = bllUser.GetUserInfo(orderList[i].OrderUserID);
                if (userInfo == null)
                {
                    userInfo = new UserInfo();
                }


                string cardId   = string.Empty;
                string cardName = string.Empty;

                if (!string.IsNullOrEmpty(orderList[i].MyCouponCardId))
                {
                    switch (orderList[i].CouponType)
                    {
                    case 0:
                        MyCardCoupons myCardModel = bllCardcoupon.GetMyCardCoupon(Convert.ToInt32(orderList[i].MyCouponCardId));
                        if (myCardModel != null)
                        {
                            CardCoupons coupns = bllCardcoupon.GetCardCoupon(myCardModel.CardId);
                            cardId   = coupns.CardId.ToString();
                            cardName = coupns.Name;
                        }
                        break;

                    case 1:
                        int cardIdInt = Convert.ToInt32(orderList[i].MyCouponCardId);

                        StoredValueCardRecord storedCard = bllStoredValueCard.GetStoredValueCardRecord(cardIdInt);

                        if (storedCard != null)
                        {
                            StoredValueCard cardModel = bllStoredValueCard.GetStoredValueCard(storedCard.CardId);
                            cardId   = cardModel.AutoId.ToString();
                            cardName = cardModel.Name;
                        }
                        break;

                    default:
                        break;
                    }
                }
                foreach (var item in bllMall.GetOrderDetailsList(orderList[i].OrderID))
                {
                    if (orderList[i].IsRefund == 1 && string.IsNullOrEmpty(item.RefundStatus) && status == "退款退货")
                    {
                        continue;
                    }
                    DataRow newRow  = dt1.NewRow();
                    DataRow newRow1 = dt2.NewRow();
                    newRow["会员ID"]   = userInfo.AutoID.ToString();
                    newRow["OpenId"] = userInfo.WXOpenId;
                    newRow["订单时间"]   = orderList[i].InsertDate.ToString();
                    newRow1["订单时间"]  = orderList[i].InsertDate.ToString();
                    WXMallProductInfo product = bllMall.GetProduct(item.PID);

                    switch (orderList[i].OrderType)
                    {
                    case 0:
                        newRow["父订单编号"] = "";
                        break;

                    case 1:
                        newRow["父订单编号"] = orderList[i].ParentOrderId;

                        break;

                    case 2:
                        newRow["父订单编号"] = orderList[i].GroupBuyParentOrderId;


                        break;

                    default:
                        break;
                    }

                    newRow["订单号"]  = orderList[i].OrderID;
                    newRow1["订单号"] = orderList[i].OrderID;

                    newRow["订单状态"]  = orderList[i].Status;
                    newRow1["订单状态"] = orderList[i].Status;

                    newRow["商品编号"]  = product == null ? "" : product.PID;
                    newRow1["商品编号"] = product == null ? "" : product.PID;
                    newRow["商品编码"]  = product == null ? "" : product.ProductCode;
                    newRow["商品名称"]  = product == null ? item.SkuShowProp : product.PName;
                    newRow1["商品名称"] = product == null ? item.SkuShowProp : product.PName;
                    if (!string.IsNullOrEmpty(isYuYueOrder))
                    {
                        if (isYuYueOrder == "MeetingRoom")
                        {
                            if (!string.IsNullOrEmpty(product.RelationProductId))
                            {
                                newRow["预约时间"] = item.StartDate.ToString("yyyy-MM-dd HH:mm") + "-" + item.EndDate.ToString("HH:mm");
                            }
                            else
                            {
                                newRow["预约时间"] = "";
                            }
                        }
                        else
                        {
                            newRow["预约时间"] = item.StartDate.ToString("yyyy-MM-dd HH:mm") + "-" + item.EndDate.ToString("HH:mm");
                        }
                    }
                    newRow["商品原价"]   = product.PreviousPrice;
                    newRow["商品均摊价格"] = item.PaymentFt;
                    newRow["商品单价"]   = item.OrderPrice;

                    if (item.SkuId.HasValue)
                    {
                        newRow["商品规格"]  = item.SkuShowProp;
                        newRow1["商品规格"] = item.SkuShowProp;
                        newRow["商品条码"]  = item.SkuId;
                    }
                    else
                    {
                        newRow["商品规格"]  = "";
                        newRow1["商品规格"] = "";
                        newRow["商品条码"]  = "";
                    }

                    newRow["商品数量"]   = item.TotalCount;
                    newRow1["商品数量"]  = item.TotalCount;
                    newRow["商品总金额"]  = item.TotalCount * item.OrderPrice;
                    newRow["运费"]     = orderList[i].Transport_Fee;
                    newRow["实付金额"]   = orderList[i].TotalAmount;
                    newRow1["实付金额"]  = orderList[i].TotalAmount;
                    newRow["收货人姓名"]  = orderList[i].Consignee;
                    newRow1["收货人姓名"] = orderList[i].Consignee;
                    newRow["电话"]     = orderList[i].Phone;
                    newRow1["电话"]    = orderList[i].Phone;
                    newRow["收货地址"]   = orderList[i].ReceiverProvince + orderList[i].ReceiverCity + orderList[i].ReceiverDist + orderList[i].Address;
                    newRow1["收货地址"]  = orderList[i].ReceiverProvince + orderList[i].ReceiverCity + orderList[i].ReceiverDist + orderList[i].Address;
                    newRow["留言"]     = orderList[i].OrderMemo;
                    newRow["支付状态"]   = ConvertPaymentStatus(orderList[i].PaymentStatus);
                    newRow1["支付状态"]  = ConvertPaymentStatus(orderList[i].PaymentStatus);
                    newRow["基础价"]    = item.BasePrice;
                    newRow["使用积分"]   = orderList[i].UseScore;
                    newRow["使用余额"]   = orderList[i].UseAmount;
                    newRow["优惠券名称"]  = cardName;
                    newRow["优惠券ID"]  = cardId;

                    newRow["退款"]  = ConvertRefundStatus(item.RefundStatus);
                    newRow1["退款"] = ConvertRefundStatus(item.RefundStatus);


                    newRow["主订单号"]  = orderList[i].ParentOrderId;
                    newRow1["主订单号"] = orderList[i].ParentOrderId;


                    newRow["商户名称"]  = orderList[i].SupplierName;
                    newRow1["商户名称"] = orderList[i].SupplierName;


                    newRow["商家备注"]  = orderList[i].Ex21;
                    newRow1["商家备注"] = orderList[i].Ex21;

                    newRow["快递公司"]  = orderList[i].ExpressCompanyName;
                    newRow1["快递公司"] = orderList[i].ExpressCompanyName;

                    newRow["快递单号"]  = orderList[i].ExpressNumber;
                    newRow1["快递单号"] = orderList[i].ExpressNumber;

                    newRow["线上卡号"] = userInfo.Ex2;

                    dt1.Rows.Add(newRow);
                    dt2.Rows.Add(newRow1);
                }
                //if (orderList[i].OrderType == 2)//团购订单
                //{
                //    foreach (var item in bllMall.GetList<WXMallOrderInfo>(string.Format(" GroupBuyParentOrderId='{0}' And PaymentStatus=1", orderList[i].OrderID)))
                //    {
                //        foreach (var detail in bllMall.GetOrderDetailsList(item.OrderID))
                //        {
                //            DataRow nowRow1 = dt1.NewRow();
                //            DataRow nowRow2 = dt2.NewRow();
                //            WXMallProductInfo product = bllMall.GetProduct(detail.PID);
                //            nowRow1["订单时间"] = item.InsertDate.ToString();
                //            nowRow2["订单时间"] = item.InsertDate.ToString();
                //            nowRow1["父订单编号"] = item.GroupBuyParentOrderId;
                //            nowRow1["订单号"] = item.OrderID;
                //            nowRow2["订单号"] = item.OrderID;

                //            nowRow1["订单状态"] = item.Status;
                //            nowRow2["订单状态"] = item.Status;
                //            nowRow1["商品编号"] = product == null ? "" : product.PID;
                //            nowRow2["商品编号"] = product == null ? "" : product.PID;
                //            nowRow1["商品编码"] = product == null ? "" : product.ProductCode;
                //            nowRow1["商品名称"] = product == null ? "" : product.PName;
                //            nowRow2["商品名称"] = product == null ? "" : product.PName;

                //            nowRow1["商品原价"] = product.PreviousPrice;
                //            nowRow1["商品均摊价格"] = detail.PaymentFt;
                //            nowRow1["商品单价"] = detail.OrderPrice;
                //            if (detail.SkuId.HasValue)
                //            {
                //                nowRow1["商品规格"] = detail.SkuShowProp;
                //                nowRow2["商品规格"] = detail.SkuShowProp;
                //                nowRow1["商品条码"] = detail.SkuId;
                //            }
                //            else
                //            {
                //                nowRow1["商品规格"] = "";
                //                nowRow2["商品规格"] = "";
                //                nowRow1["商品条码"] = "";
                //            }
                //            nowRow1["商品数量"] = detail.TotalCount;
                //            nowRow2["商品数量"] = detail.TotalCount;
                //            nowRow1["商品总金额"] = detail.TotalCount * detail.OrderPrice;
                //            nowRow1["运费"] = item.Transport_Fee;
                //            nowRow1["实付金额"] = item.TotalAmount;
                //            nowRow2["实付金额"] = item.TotalAmount;
                //            nowRow1["收货人姓名"] = item.Consignee;
                //            nowRow2["收货人姓名"] = item.Consignee;
                //            nowRow1["电话"] = item.Phone;
                //            nowRow2["电话"] = item.Phone;
                //            nowRow1["收货地址"] = item.ReceiverProvince + item.ReceiverCity + item.ReceiverDist + item.Address;
                //            nowRow2["收货地址"] = item.ReceiverProvince + item.ReceiverCity + item.ReceiverDist + item.Address;
                //            nowRow1["留言"] = item.OrderMemo;
                //            nowRow1["支付状态"] = ConvertPaymentStatus(item.PaymentStatus);
                //            nowRow2["支付状态"] = ConvertPaymentStatus(item.PaymentStatus);

                //            nowRow1["基础价"] =detail.BasePrice;
                //            nowRow1["使用积分"] = orderList[i].UseScore;
                //            nowRow1["使用余额"] = orderList[i].UseAmount;
                //            nowRow1["优惠券名称"] = cardName;
                //            nowRow1["优惠券ID"] = cardId;
                //            nowRow1["退款"] =ConvertRefundStatus(detail.RefundStatus);
                //            nowRow2["退款"] = ConvertRefundStatus(detail.RefundStatus);
                //            dt1.Rows.Add(nowRow1);
                //            dt2.Rows.Add(nowRow2);
                //        }
                //    }
                //}
            }
            dt1.TableName = "订单列表";
            dt2.TableName = "精简订单列表";
            DataTable[] dt3 = { dt1, dt2 };
            DataLoadTool.ExportDataTable(dt3, string.Format("{0}_data.xls", DateTime.Now.ToString()));
        }
예제 #14
0
        public void ProcessRequest(HttpContext context)
        {
            BLLJIMP.Model.API.User.PayUpgrade requestUpgrade = bll.ConvertRequestToModel <BLLJIMP.Model.API.User.PayUpgrade>(new BLLJIMP.Model.API.User.PayUpgrade());
            string websiteOwner = bll.WebsiteOwner;

            requestUpgrade.level = CurrentUserInfo.MemberLevel;
            WebsiteInfo     website     = bllUser.GetWebsiteInfoModelFromDataBase(websiteOwner);
            UserLevelConfig levelConfig = bll.QueryUserLevel(websiteOwner, "DistributionOnLine", requestUpgrade.level.ToString());

            if (levelConfig == null)
            {
                requestUpgrade.userTotalAmount = 0;
            }
            else
            {
                requestUpgrade.userTotalAmount = Convert.ToDecimal(levelConfig.FromHistoryScore);
            }
            UserLevelConfig toLevelConfig = bll.QueryUserLevel(websiteOwner, "DistributionOnLine", requestUpgrade.toLevel.ToString());

            if (toLevelConfig == null)
            {
                apiResp.code = (int)APIErrCode.IsNotFound;
                apiResp.msg  = "会员等级未找到";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (toLevelConfig.IsDisable == 1)
            {
                apiResp.code = (int)APIErrCode.IsNotFound;
                apiResp.msg  = "会员级别禁止升级";
                bll.ContextResponse(context, apiResp);
                return;
            }
            requestUpgrade.needAmount = Convert.ToDecimal(toLevelConfig.FromHistoryScore);
            requestUpgrade.amount     = requestUpgrade.needAmount - requestUpgrade.userTotalAmount;
            if (requestUpgrade.amount < 0)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "暂时不支持降级";
                bll.ContextResponse(context, apiResp);
                return;
            }

            string configV1CouponId = ZentCloud.Common.ConfigHelper.GetConfigString("YGBV1CouponId");
            string configV2CouponId = ZentCloud.Common.ConfigHelper.GetConfigString("YGBV2CouponId");
            string v1LevelNumber    = ZentCloud.Common.ConfigHelper.GetConfigString("V1LevelNumber");
            string v2LevelNumber    = ZentCloud.Common.ConfigHelper.GetConfigString("V2LevelNumber");

            string couponId = string.Empty;

            CardCoupons   cardModel    = null;
            MyCardCoupons myCardCoupon = null;

            if (requestUpgrade.vType == "V1")
            {
                if (string.IsNullOrEmpty(configV1CouponId))
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "V1优惠券未配置";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                couponId     = configV1CouponId;
                cardModel    = bllCardCoupon.GetCardCoupon(Convert.ToInt32(couponId));
                myCardCoupon = bllCardCoupon.GetMyCardCouponMainId(Convert.ToInt32(couponId), CurrentUserInfo.UserID);
                if (cardModel == null || myCardCoupon == null)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不存在";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                if (requestUpgrade.toLevel.ToString() != v1LevelNumber)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不匹配";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (requestUpgrade.vType == "V2")
            {
                if (string.IsNullOrEmpty(configV2CouponId))
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "V2优惠券未配置";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                couponId     = configV2CouponId;
                cardModel    = bllCardCoupon.GetCardCoupon(Convert.ToInt32(couponId));
                myCardCoupon = bllCardCoupon.GetMyCardCouponMainId(Convert.ToInt32(couponId), CurrentUserInfo.UserID);
                if (cardModel == null || myCardCoupon == null)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不存在";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                if (requestUpgrade.toLevel.ToString() != v2LevelNumber)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不能用于此升级";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
            }

            BLLTransaction tran = new BLLTransaction();

            StringBuilder     sbSql                  = new StringBuilder();
            UserInfo          upUserLevel1           = null; //分销上一级
            UserInfo          upUserLevel2           = null; //分销上二级
            UserInfo          upUserLevel3           = null; //分销上三级
            UserLevelConfig   levelConfig1           = null; //分销上一级规则
            UserLevelConfig   levelConfig2           = null; //分销上二级规则
            UserLevelConfig   levelConfig3           = null; //分销上三级规则
            ProjectCommission modelLevel1            = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel1Info    = new ScoreLockInfo();
            ProjectCommission modelLevel1ex1         = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel1ex1Info = new ScoreLockInfo();
            ProjectCommission modelLevel2            = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel2Info    = new ScoreLockInfo();
            ProjectCommission modelLevel3            = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel3Info    = new ScoreLockInfo();

            int disLevel = 1;

            if (website.DistributionLimitLevel > 1)
            {
                disLevel = website.DistributionLimitLevel;
            }

            string projectId = bll.GetGUID(TransacType.PayRegisterOrder);

            CurrentUserInfo.MemberLevel       = requestUpgrade.toLevel;
            CurrentUserInfo.MemberApplyStatus = 9;

            //计算分佣
            bll.ComputeTransfers(disLevel, CurrentUserInfo, projectId, requestUpgrade.amount, websiteOwner, "余额升级", ref sbSql, ref upUserLevel1,
                                 ref upUserLevel2, ref upUserLevel3, ref levelConfig1, ref levelConfig2, ref levelConfig3, ref modelLevel1, ref scoreLockLevel1Info,
                                 ref modelLevel1ex1, ref scoreLockLevel1ex1Info, ref modelLevel2, ref scoreLockLevel2Info, ref modelLevel3, ref scoreLockLevel3Info,
                                 toLevelConfig.LevelString);

            if (bll.Update(CurrentUserInfo, string.Format(" MemberLevel={0},IsDisable=0,MemberApplyStatus=9 ", CurrentUserInfo.MemberLevel), string.Format(" AutoId='{0}' ", CurrentUserInfo.AutoID), tran) <= 0)
            {
                tran.Rollback();
                apiResp.msg  = "更新用户等级失败";
                apiResp.code = (int)APIErrCode.OperateFail;
                bll.ContextResponse(context, apiResp);
                return;
            }

            bool hasProjectCommission = false;

            #region 记录分佣信息
            if (modelLevel1.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel1Id = Convert.ToInt32(bll.AddReturnID(modelLevel1, tran));
                if (modelLevel1Id <= 0)
                {
                    apiResp.msg  = "一级返利失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel1Info.ForeignkeyId2 = modelLevel1Id.ToString();
                scoreLockLevel1Info.AutoId        = Convert.ToInt32(bll.AddReturnID(scoreLockLevel1Info, tran));
                if (scoreLockLevel1Info.AutoId <= 0)
                {
                    apiResp.msg  = "一级返利冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel1.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel1Info.UserId, websiteOwner, (double)scoreLockLevel1Info.Score,
                                           scoreLockLevel1Info.Memo, "TotalAmount", (double)(upUserLevel1.TotalAmount + scoreLockLevel1Info.Score),
                                           scoreLockLevel1Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel1.SourceAmount, (double)modelLevel1.DeductAmount,
                                           modelLevel1.CommissionUserId, tran,
                                           ex1: levelConfig.LevelNumber.ToString(), ex2: levelConfig.LevelString,
                                           ex3: toLevelConfig.LevelNumber.ToString(), ex4: toLevelConfig.LevelString,
                                           ex5: modelLevel1.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返利明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (modelLevel1ex1.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel1ex1Id = Convert.ToInt32(bll.AddReturnID(modelLevel1ex1, tran));
                if (modelLevel1ex1Id <= 0)
                {
                    apiResp.msg  = "一级返购房补助失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel1ex1Info.ForeignkeyId2 = modelLevel1ex1Id.ToString();
                scoreLockLevel1ex1Info.AutoId        = Convert.ToInt32(bll.AddReturnID(scoreLockLevel1ex1Info, tran));
                if (scoreLockLevel1ex1Info.AutoId <= 0)
                {
                    apiResp.msg  = "一级返购房补助冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel1ex1.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel1ex1Info.UserId, websiteOwner, (double)scoreLockLevel1ex1Info.Score,
                                           scoreLockLevel1ex1Info.Memo, "TotalAmount", (double)(upUserLevel1.TotalAmount + scoreLockLevel1ex1Info.Score),
                                           scoreLockLevel1ex1Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel1ex1.SourceAmount, (double)modelLevel1ex1.DeductAmount,
                                           modelLevel1ex1.CommissionUserId, tran,
                                           ex1: levelConfig.LevelNumber.ToString(), ex2: levelConfig.LevelString,
                                           ex3: toLevelConfig.LevelNumber.ToString(), ex4: toLevelConfig.LevelString,
                                           ex5: modelLevel1ex1.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返购房补助明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (modelLevel2.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel2Id = Convert.ToInt32(bll.AddReturnID(modelLevel2, tran));
                if (modelLevel2Id <= 0)
                {
                    apiResp.msg  = "二级返利失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel2Info.ForeignkeyId2 = modelLevel2Id.ToString();
                scoreLockLevel2Info.AutoId        = Convert.ToInt32(bll.AddReturnID(scoreLockLevel2Info, tran));
                if (scoreLockLevel2Info.AutoId <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "二级返利冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel2.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel2Info.UserId, websiteOwner, (double)scoreLockLevel2Info.Score,
                                           scoreLockLevel2Info.Memo, "TotalAmount", (double)(upUserLevel2.TotalAmount + scoreLockLevel2Info.Score),
                                           scoreLockLevel2Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel2.SourceAmount, (double)modelLevel2.DeductAmount,
                                           modelLevel2.CommissionUserId, tran,
                                           ex1: levelConfig.LevelNumber.ToString(), ex2: levelConfig.LevelString,
                                           ex3: toLevelConfig.LevelNumber.ToString(), ex4: toLevelConfig.LevelString,
                                           ex5: modelLevel2.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "二级返利明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (modelLevel3.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel3Id = Convert.ToInt32(bll.AddReturnID(modelLevel3, tran));
                if (!bll.Add(modelLevel3, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "三级返利失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel3Info.ForeignkeyId2 = modelLevel3Id.ToString();
                scoreLockLevel3Info.AutoId        = Convert.ToInt32(bll.AddReturnID(scoreLockLevel3Info, tran));
                if (scoreLockLevel3Info.AutoId <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "三级返利冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel3.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel3Info.UserId, websiteOwner, (double)scoreLockLevel3Info.Score,
                                           scoreLockLevel3Info.Memo, "TotalAmount", (double)(upUserLevel3.TotalAmount + scoreLockLevel3Info.Score),
                                           scoreLockLevel3Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel3.SourceAmount, (double)modelLevel3.DeductAmount,
                                           modelLevel3.CommissionUserId, tran,
                                           ex1: levelConfig.LevelNumber.ToString(), ex2: levelConfig.LevelString,
                                           ex3: toLevelConfig.LevelNumber.ToString(), ex4: toLevelConfig.LevelString,
                                           ex5: modelLevel3.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "三级返利明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            #endregion

            #region 更新分佣账面金额
            if (hasProjectCommission)
            {
                if (BLLBase.ExecuteSql(sbSql.ToString(), tran) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = string.Format("更新分佣账面{0}出错", website.TotalAmountShowName);
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            #endregion

            #region 记录余额明细
            //自己的消费记录
            if (bllUser.AddScoreDetail(CurrentUserInfo.UserID, websiteOwner, (double)(0 - requestUpgrade.amount),
                                       string.Format("{1}为{0}", toLevelConfig.LevelString, "升级"), "TotalAmount", (double)(CurrentUserInfo.TotalAmount - requestUpgrade.amount),
                                       "", "升级会员", "", "", (double)requestUpgrade.amount, 0, "",
                                       tran, ex1: levelConfig.LevelNumber.ToString(), ex2: levelConfig.LevelString,
                                       ex3: toLevelConfig.LevelNumber.ToString(), ex4: toLevelConfig.LevelString) <= 0)
            {
                tran.Rollback();
                apiResp.msg  = "升级会员明细出错";
                apiResp.code = (int)APIErrCode.OperateFail;
                bll.ContextResponse(context, apiResp);
                return;
            }

            #endregion

            #region 修改优惠券 更新支付状态
            myCardCoupon.UseDate = DateTime.Now;
            myCardCoupon.Status  = 1;
            if (!bllCardCoupon.Update(myCardCoupon, tran))
            {
                tran.Rollback();
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "更新优惠券状态失败";
                bll.ContextResponse(context, apiResp);
                return;
            }

            #endregion

            #region 记录业绩明细
            TeamPerformanceDetails perDetail = new TeamPerformanceDetails();
            perDetail.AddType           = "升级";
            perDetail.AddNote           = "由" + levelConfig.LevelString + "升级" + toLevelConfig.LevelString;
            perDetail.AddTime           = DateTime.Now;
            perDetail.DistributionOwner = CurrentUserInfo.DistributionOwner;
            perDetail.UserId            = CurrentUserInfo.UserID;
            perDetail.UserName          = CurrentUserInfo.TrueName;
            perDetail.UserPhone         = CurrentUserInfo.Phone;
            perDetail.Performance       = requestUpgrade.amount;
            string yearMonthString = perDetail.AddTime.ToString("yyyyMM");
            int    yearMonth       = Convert.ToInt32(yearMonthString);
            perDetail.WebsiteOwner = websiteOwner;
            perDetail.YearMonth    = yearMonth;

            if (!bllUser.Add(perDetail, tran))
            {
                tran.Rollback();
                apiResp.msg  = "记录业绩明细失败";
                apiResp.code = (int)APIErrCode.OperateFail;
                bll.ContextResponse(context, apiResp);
                return;
            }
            #endregion

            tran.Commit();
            if (hasProjectCommission)
            {
                //异步修改积分明细表
                Thread th1 = new Thread(delegate()
                {
                    //计算相关业绩
                    bll.BuildCurMonthPerformanceByUserID(websiteOwner, CurrentUserInfo.UserID);
                });
                th1.Start();
            }
            apiResp.msg    = "升级完成";
            apiResp.code   = (int)APIErrCode.IsSuccess;
            apiResp.status = true;

            bll.ContextResponse(context, apiResp);
        }
예제 #15
0
파일: Add.ashx.cs 프로젝트: uvbs/mmp
        public void ProcessRequest(HttpContext context)
        {
            WebsiteInfo websiteInfo = bllMall.GetWebsiteInfoModelFromDataBase();

            Open.HongWareSDK.Client     hongWareClient        = new Open.HongWareSDK.Client(websiteInfo.WebsiteOwner);
            Open.HongWareSDK.MemberInfo hongWeiWareMemberInfo = null;
            if (websiteInfo.IsUnionHongware == 1)
            {
                hongWeiWareMemberInfo = hongWareClient.GetMemberInfo(CurrentUserInfo.WXOpenId);
                if (hongWeiWareMemberInfo.member == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "您尚未绑定宏巍账号,请先绑定";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
            }
            string            data              = context.Request["data"];
            decimal           productFee        = 0;                       //商品总价格 不包含邮费
            OrderRequestModel orderRequestModel = new OrderRequestModel(); //订单模型

            try
            {
                orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderRequestModel>(data);
            }
            catch (Exception ex)
            {
                resp.errcode = 1;
                resp.errmsg  = "JSON格式错误,请检查。错误信息:" + ex.Message;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表

            orderInfo.InsertDate    = DateTime.Now;
            orderInfo.OrderUserID   = CurrentUserInfo.UserID;
            orderInfo.WebsiteOwner  = bllMall.WebsiteOwner;
            orderInfo.Transport_Fee = 0;
            orderInfo.OrderID       = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
            if (bllMall.WebsiteOwner != "mixblu")
            {
                orderInfo.OutOrderId = orderInfo.OrderID;
            }
            orderInfo.OrderMemo      = orderRequestModel.buyer_memo;
            orderInfo.MyCouponCardId = orderRequestModel.cardcoupon_id.ToString();
            orderInfo.UseScore       = orderRequestModel.use_score;
            orderInfo.UseAmount      = orderRequestModel.use_amount;
            orderInfo.Status         = "待付款";
            orderInfo.OrderType      = 1;
            orderInfo.LastUpdateTime = DateTime.Now;
            if (orderRequestModel.pay_type == "WEIXIN")//微信支付
            {
                orderInfo.PaymentType = 2;
            }
            else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
            {
                orderInfo.PaymentType = 1;
            }

            #region 格式检查
            //相关检查
            if (orderRequestModel.skus == null)
            {
                resp.errcode = 1;
                resp.errmsg  = "参数skus 不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            if (orderRequestModel.skus.Count > 1)
            {
                resp.errcode = 1;
                resp.errmsg  = "只能购买一个商品";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }

            //相关检查
            #endregion

            #region 商品检查 订单详情生成
            ///订单详情
            List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情
            orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList();

            #region 购买的商品
            List <WXMallProductInfo> productList = new List <WXMallProductInfo>();
            foreach (var sku in orderRequestModel.skus)
            {
                ProductSku productSku = bllMall.GetProductSku(sku.sku_id);

                if (productSku == null)
                {
                    continue;
                }
                if (productList.Count(p => p.PID == productSku.ProductId.ToString()) > 0)
                {
                    continue;
                }

                WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                productList.Add(productInfo);
            }
            //productList = productList.Distinct().ToList();
            #endregion


            #region 检查优惠券是否可用
            if (orderRequestModel.cardcoupon_id > 0)
            {
                var mycardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                if (mycardCoupon == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                var cardCoupon = bllCardCoupon.GetCardCoupon(mycardCoupon.CardId);
                if (cardCoupon == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                #region 需要购买指定商品
                if ((!string.IsNullOrEmpty(cardCoupon.Ex2)) && (cardCoupon.Ex2 != "0"))
                {
                    if (productList.Count(p => p.PID == cardCoupon.Ex2) == 0)
                    {
                        var productInfo = bllMall.GetProduct(cardCoupon.Ex2);
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("此优惠券需要购买{0}时才可以使用", productInfo.PName);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                #endregion

                #region 需要购买指定标签商品
                if (!string.IsNullOrEmpty(cardCoupon.Ex8))
                {
                    if (productList.Where(p => p.Tags == "" || p.Tags == null).Count() == productList.Count)//全部商品都没有标签
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    bool checkResult = true;
                    foreach (var product in productList)
                    {
                        if (!string.IsNullOrEmpty(product.Tags))
                        {
                            bool tempResult = false;
                            foreach (string tag in product.Tags.Split(','))
                            {
                                if (cardCoupon.Ex8.Contains(tag))
                                {
                                    tempResult = true;
                                    break;
                                }
                            }
                            if (!tempResult)
                            {
                                checkResult = false;
                                break;
                            }
                        }
                        else//商品不包含标签
                        {
                            checkResult = false;
                            break;
                        }
                    }
                    if (!checkResult)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                #endregion
            }
            #endregion

            var     needUseScore = 0; //必须使用的积分
            decimal needUseCash  = 0; //必须使用的现金
            foreach (var sku in orderRequestModel.skus)
            {
                //先检查库存
                ProductSku productSku = bllMall.GetProductSku(sku.sku_id);
                if (productSku == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "SKU不存在";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                //WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                WXMallProductInfo productInfo = productList.Single(p => p.PID == productSku.ProductId.ToString());
                if (productInfo.IsOnSale == "0")
                {
                    resp.errcode = 1;
                    resp.errmsg  = string.Format("{0}已下架", productInfo.PName);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (bllMall.GetSkuCount(productSku) < sku.count)
                {
                    resp.errcode = 1;
                    resp.errmsg  = string.Format("{0}{1}库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.Stock);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (bllMall.IsPromotionTime(productSku))
                {
                    if (sku.count > productSku.PromotionStock)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("{0}{1}特卖库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.PromotionStock);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                if (productInfo.Score > 0)//必须使用的积分
                {
                    needUseScore += sku.count * productInfo.Score;
                }
                if (productInfo.IsCashPayOnly == 1)//必须使用的现金
                {
                    needUseCash += bllMall.GetSkuPrice(productSku) * sku.count;
                }
                WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
                detailModel.OrderID     = orderInfo.OrderID;
                detailModel.PID         = productInfo.PID;
                detailModel.TotalCount  = sku.count;
                detailModel.OrderPrice  = bllMall.GetSkuPrice(productSku);
                detailModel.ProductName = productInfo.PName;
                detailModel.SkuId       = productSku.SkuId;
                detailModel.SkuShowProp = bllMall.GetProductShowProperties(productSku.SkuId);
                detailList.Add(detailModel);
            }
            #endregion

            #region 纯积分购买
            if (needUseScore > 0)
            {
                if ((CurrentUserInfo.TotalScore < needUseScore) || (orderRequestModel.use_score < needUseScore))
                {
                    resp.errcode = 1;
                    resp.errmsg  = string.Format("您需要使用{0}积分来兑换, 可用积分不足", needUseScore);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
            }
            #endregion
            productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;//商品费用

            //物流费用
            //#region 运费计算
            //FreightModel freightModel = new FreightModel();
            //freightModel.skus = orderRequestModel.skus;
            //decimal freight = 0;//运费
            //string freightMsg = "";
            //if (!bllMall.CalcFreight(freightModel, out freight, out  freightMsg))
            //{
            //    resp.errcode = 1;
            //    resp.errmsg = freightMsg;
            //    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            //    return;

            //}
            //orderInfo.Transport_Fee = freight;
            //#endregion

            #region 优惠券计算
            decimal discountAmount   = 0;//优惠金额
            bool    canUseCardCoupon = false;
            string  msg = "";
            if (orderRequestModel.cardcoupon_id > 0)//有优惠券
            {
                discountAmount = bllMall.CalcDiscountAmount(orderRequestModel.cardcoupon_id.ToString(), data, CurrentUserInfo.UserID, out canUseCardCoupon, out msg);
                if (!canUseCardCoupon)
                {
                    resp.errcode = 1;
                    resp.errmsg  = msg;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                //if (discountAmount > productFee + orderInfo.Transport_Fee)
                //{
                //    resp.errcode = 1;
                //    resp.errmsg = "优惠券可优惠金额超过了订单总金额";
                //    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                //    return;

                //}
            }
            //优惠券计算
            #endregion


            #region 积分计算
            decimal scoreExchangeAmount = 0;///积分抵扣的金额
            //积分计算
            if (orderRequestModel.use_score > 0)
            {
                #region 使用宏巍积分
                if (websiteInfo.IsUnionHongware == 1)
                {
                    CurrentUserInfo.TotalScore = hongWeiWareMemberInfo.member.point;
                }
                #endregion
                if (CurrentUserInfo.TotalScore < orderRequestModel.use_score)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "积分不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }



                ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                if (scoreConfig == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "未配置积分兑换";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (scoreConfig.ExchangeScore == 0 || scoreConfig.ExchangeAmount == 0)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "未配置积分兑换";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
            }



            //积分计算
            #endregion

            #region 使用账户余额
            if (orderRequestModel.use_amount > 0)
            {
                if (!bllMall.IsEnableAccountAmountPay())
                {
                    resp.errcode = 1;
                    resp.errmsg  = "尚未启用余额支付功能";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                #region 使用宏巍余额
                if (websiteInfo.IsUnionHongware == 1)
                {
                    CurrentUserInfo.AccountAmount = (decimal)hongWeiWareMemberInfo.member.balance;
                }
                #endregion

                if (CurrentUserInfo.AccountAmount < orderRequestModel.use_amount)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "您的账户余额不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
            }
            #endregion


            //合计计算
            orderInfo.Product_Fee         = productFee;
            orderInfo.TotalAmount         = orderInfo.Product_Fee + orderInfo.Transport_Fee;
            orderInfo.TotalAmount        -= discountAmount;               //优惠券优惠金额
            orderInfo.TotalAmount        -= scoreExchangeAmount;          //积分优惠金额
            orderInfo.TotalAmount        -= orderRequestModel.use_amount; //余额
            orderInfo.PayableAmount       = orderInfo.TotalAmount;        //应付金额
            orderInfo.ScoreExchangAmount  = scoreExchangeAmount;          //优惠券抵扣金额
            orderInfo.CardcouponDisAmount = discountAmount;               //卡券抵扣金额
            if ((productFee + orderInfo.Transport_Fee - discountAmount - scoreExchangeAmount) < orderInfo.TotalAmount)
            {
                resp.errcode = 1;
                resp.errmsg  = "积分兑换金额不能大于订单总金额,请减少积分兑换";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            if (orderInfo.TotalAmount < 0)
            {
                orderInfo.TotalAmount = 0;
            }
            if (orderInfo.TotalAmount == 0)
            {
                orderInfo.PaymentStatus = 1;
                orderInfo.PayTime       = DateTime.Now;
                orderInfo.Status        = "待发货";
            }
            if (orderInfo.TotalAmount < needUseCash)
            {
                resp.errcode = 1;
                resp.errmsg  = string.Format("最少需要支付{0}元" + needUseCash);
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                if (!this.bllMall.Add(orderInfo, tran))
                {
                    tran.Rollback();
                    resp.errcode = 1;
                    resp.errmsg  = "提交失败";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                #region 更新优惠券使用状态
                //优惠券
                if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用
                {
                    MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                    myCardCoupon.UseDate = DateTime.Now;
                    myCardCoupon.Status  = 1;
                    if (!bllCardCoupon.Update(myCardCoupon, tran))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "更新优惠券状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                //优惠券
                #endregion

                #region 积分抵扣
                //积分扣除
                if (orderRequestModel.use_score > 0)
                {
                    CurrentUserInfo.TotalScore -= orderRequestModel.use_score;
                    if (

                        bllMall.Update(CurrentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", CurrentUserInfo.AutoID)) < 0)
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "更新用户积分失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    //积分记录
                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = -orderRequestModel.use_score;
                    scoreRecord.TotalScore   = CurrentUserInfo.TotalScore;
                    scoreRecord.ScoreType    = "OrderSubmit";
                    scoreRecord.UserID       = CurrentUserInfo.UserID;
                    scoreRecord.AddNote      = "微商城-下单使用积分";
                    scoreRecord.WebSiteOwner = CurrentUserInfo.WebsiteOwner;
                    if (!bllMall.Add(scoreRecord))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "插入积分记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    #region 更新宏巍积分
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        if (!hongWareClient.UpdateMemberScore(hongWeiWareMemberInfo.member.mobile, CurrentUserInfo.WXOpenId, -orderRequestModel.use_score))
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "更新宏巍积分失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion

                    //积分记录
                }

                //积分扣除
                #endregion


                #region 余额抵扣

                if (orderRequestModel.use_amount > 0 && bllMall.IsEnableAccountAmountPay())
                {
                    CurrentUserInfo.AccountAmount -= orderRequestModel.use_amount;
                    if (bllMall.Update(CurrentUserInfo, string.Format(" AccountAmount={0}", CurrentUserInfo.AccountAmount), string.Format(" AutoID={0}", CurrentUserInfo.AutoID)) < 0)
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "更新用户余额失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }


                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = -(double)orderRequestModel.use_amount;
                    scoreRecord.TotalScore   = (double)CurrentUserInfo.AccountAmount;
                    scoreRecord.UserID       = CurrentUserInfo.UserID;
                    scoreRecord.AddNote      = "账户余额变动-下单使用余额";
                    scoreRecord.RelationID   = orderInfo.OrderID;
                    scoreRecord.WebSiteOwner = bllUser.WebsiteOwner;
                    scoreRecord.ScoreType    = "AccountAmount";
                    if (!bllMall.Add(scoreRecord))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入余额记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    UserCreditAcountDetails record = new UserCreditAcountDetails();
                    record.WebsiteOwner = bllUser.WebsiteOwner;
                    record.Operator     = CurrentUserInfo.UserID;
                    record.UserID       = CurrentUserInfo.UserID;
                    record.CreditAcount = -orderRequestModel.use_amount;
                    record.SysType      = "AccountAmount";
                    record.AddTime      = DateTime.Now;
                    record.AddNote      = "账户余额变动-" + orderRequestModel.use_amount;
                    if (!bllMall.Add(record))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "插入余额记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    #region 更新宏巍余额
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        if (!hongWareClient.UpdateMemberBlance(hongWeiWareMemberInfo.member.mobile, CurrentUserInfo.WXOpenId, -(float)orderRequestModel.use_amount))
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "更新宏巍余额失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion
                }


                #endregion

                #region 插入订单详情页及更新库存
                foreach (var item in detailList)
                {
                    ProductSku        productSku  = bllMall.GetProductSku((int)(item.SkuId));
                    WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    if (!this.bllMall.Add(item, tran))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "提交失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    //productSku.Stock -= item.TotalCount;
                    //if (bllMall.IsPromotionTime(productSku))
                    //{
                    //    productSku.PromotionStock -= item.TotalCount;
                    //}
                    //if (ZentCloud.ZCBLLEngine.BLLBase.ExecuteSql(string.Format("update ZCJ_ProductSku set Stock={0},PromotionStock={1} where SkuId={2}", productSku.Stock, productSku.PromotionStock, productSku.SkuId), tran) <= 0)
                    //{
                    //    tran.Rollback();
                    //    resp.errcode = 1;
                    //    resp.errmsg = "更新SKU失败";
                    //    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    //    return;

                    //}
                    //更新 SKU库存
                    System.Text.StringBuilder sbUpdateStock = new StringBuilder();//更新库存sql
                    sbUpdateStock.AppendFormat(" Update ZCJ_ProductSku Set Stock-={0} ", item.TotalCount);
                    if (bllMall.IsPromotionTime(productSku))
                    {
                        sbUpdateStock.AppendFormat(",PromotionStock-={0} ", item.TotalCount);
                    }
                    sbUpdateStock.AppendFormat(" Where SkuId={0} And Stock>0 ", productSku.SkuId);
                    if (bllMall.IsPromotionTime(productSku))
                    {
                        sbUpdateStock.AppendFormat(" And PromotionStock>0 ", item.TotalCount);
                    }
                    if (ZentCloud.ZCBLLEngine.BLLBase.ExecuteSql(sbUpdateStock.ToString(), tran) <= 0)
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "提交订单失败,库存不足";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                #endregion
                tran.Commit();//提交订单事务

                #region 宏巍通知
                if (websiteInfo.IsUnionHongware == 1)
                {
                    hongWareClient.OrderNotice(CurrentUserInfo.WXOpenId, orderInfo.OrderID);
                }
                #endregion
            }
            catch (Exception ex)
            {
                //回滚事物
                tran.Rollback();
                resp.errcode = 1;
                resp.errmsg  = ex.ToString();
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(new
            {
                errcode  = 0,
                errmsg   = "ok",
                order_id = orderInfo.OrderID
            }));
        }
예제 #16
0
        /// <summary>
        /// 获取奖品接口
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private string GetPrize(HttpContext context)
        {
            if (!bllUser.IsLogin)
            {
                resp.errcode = (int)APIErrCode.UserIsNotLogin;
                resp.errmsg  = "请先登录";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            else
            {
                currentUserInfo = bllUser.GetCurrentUserInfo();
            }
            VoteInfo voteInfo = bllVote.GetVoteInfo(voteId);//主投票信息

            if (!string.IsNullOrEmpty(voteInfo.StopDate))
            {
                if (DateTime.Now > DateTime.Parse(voteInfo.StopDate))
                {
                    VoteObjectInfo myInfo = bllVote.GetVoteObjectInfo(voteId, currentUserInfo.UserID);
                    if (myInfo == null)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "未参加";
                        return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    }
                    if (myInfo.Ex1 == "1")//Ex1 表示是否已领奖
                    {
                        resp.errcode = 1;
                        resp.errmsg  = "已领奖";
                        return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    }
                    if (myInfo.Rank == 1)
                    {
                        //领取奖品
                        ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();

                        try
                        {
                            #region 获得积分
                            if (voteInfo.Ex1 == "0")//获得积分
                            {
                                if (string.IsNullOrEmpty(voteInfo.Ex2) && (int.Parse(voteInfo.Ex2) > 0))
                                {
                                    int addScore = int.Parse(voteInfo.Ex2);//增加的积分
                                    if (bllUser.Update(currentUserInfo, string.Format(" TotalScore+={0}", addScore), string.Format(" AutoID={0}", currentUserInfo.AutoID), tran) <= 0)
                                    {
                                        tran.Rollback();
                                        resp.errcode = 1;
                                        resp.errmsg  = "更新用户积分失败";
                                        return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                                    }
                                    WBHScoreRecord scoreRecord = new WBHScoreRecord();
                                    scoreRecord.InsertDate   = DateTime.Now;
                                    scoreRecord.NameStr      = string.Format("参加今日我最美点赞,使用{0}积分", voteInfo.UseScore);
                                    scoreRecord.RecordType   = "1";
                                    scoreRecord.ScoreNum     = voteInfo.UseScore.ToString();
                                    scoreRecord.UserId       = currentUserInfo.UserID;
                                    scoreRecord.WebsiteOwner = bllUser.WebsiteOwner;
                                    if (!bllUser.Add(scoreRecord, tran))
                                    {
                                        tran.Rollback();
                                        resp.errcode = 1;
                                        resp.errmsg  = "插入积分记录表失败";
                                        return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                                    }

                                    #region 增加yike 积分

                                    if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, ""))
                                    {
                                        if (!string.IsNullOrEmpty(currentUserInfo.Phone))
                                        {
                                            yiKeClient.BonusUpdate(currentUserInfo.Ex2, (voteInfo.UseScore), "参加今日我最美获得积分" + voteInfo.UseScore);
                                        }
                                    }
                                    #endregion
                                }
                            }

                            #endregion



                            #region 获得优惠券
                            if (voteInfo.Ex1 == "1")//获得积分
                            {
                                if (string.IsNullOrEmpty(voteInfo.Ex2) && (int.Parse(voteInfo.Ex2) > 0))
                                {
                                    int           cardCouponId = int.Parse(voteInfo.Ex2);                   //优惠券编号
                                    CardCoupons   cardCoupon   = bllCardCoupon.GetCardCoupon(cardCouponId); //主卡券编号
                                    MyCardCoupons myCard       = new MyCardCoupons();
                                    myCard.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMdd"), new Random().Next(11111, 99999).ToString());
                                    myCard.CardCouponType   = cardCoupon.CardCouponType;
                                    myCard.CardId           = cardCouponId;
                                    myCard.InsertDate       = DateTime.Now;
                                    myCard.UserId           = currentUserInfo.UserID;
                                    myCard.WebSiteOwner     = bllUser.WebsiteOwner;
                                    if (!bllCardCoupon.Add(myCard, tran))
                                    {
                                        tran.Rollback();
                                        resp.errcode = 1;
                                        resp.errmsg  = "领取优惠券失败";
                                        return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                                    }
                                }
                            }

                            #endregion
                        }
                        catch (Exception)
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "领取失败";
                            return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        }


                        //最后更新选手领奖状态为已经领奖
                        myInfo.Ex1 = "1";
                        if (!bllVote.Update(myInfo))
                        {
                            tran.Rollback();
                            resp.errcode = 1;
                            resp.errmsg  = "更新领奖状态失败";
                            return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        }
                        tran.Commit();
                        resp.errcode = 0;
                        resp.errmsg  = voteInfo.Prize;
                        return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    }
                }
                else
                {
                    resp.errcode = 1;
                    resp.errmsg  = "还未到截止时间";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                }
            }
            resp.errcode = 1;
            resp.errmsg  = "";
            return(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
        }
예제 #17
0
파일: Join.ashx.cs 프로젝트: uvbs/mmp
        public void ProcessRequest(HttpContext context)
        {
            WebsiteInfo websiteInfo = bllMall.GetWebsiteInfoModelFromDataBase();

            Open.HongWareSDK.Client     hongWareClient        = new Open.HongWareSDK.Client(websiteInfo.WebsiteOwner);
            Open.HongWareSDK.MemberInfo hongWeiWareMemberInfo = null;
            if (websiteInfo.IsUnionHongware == 1)
            {
                hongWeiWareMemberInfo = hongWareClient.GetMemberInfo(CurrentUserInfo.WXOpenId);
                if (hongWeiWareMemberInfo.member == null)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "您尚未绑定宏巍账号,请先绑定";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
            }
            string data = context.Request["data"];

            if (string.IsNullOrEmpty(data))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "data 参数必传";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            decimal    productFee = 0;    //商品总价格 不包含邮费
            OrderModel orderRequestModel; //订单模型

            try
            {
                orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderModel>(data);
            }
            catch (Exception ex)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "JSON格式错误,请检查。错误信息:" + ex.Message;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderRequestModel.order_id))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "order_id 必传";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }



            WXMallOrderInfo parentOrderInfo = bllMall.GetOrderInfo(orderRequestModel.order_id);//父订单

            if (parentOrderInfo == null)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "订单不存在";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (parentOrderInfo.OrderUserID == CurrentUserInfo.UserID)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "团长不可以参加";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (parentOrderInfo.OrderType != 2)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "不是拼团订单";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (!string.IsNullOrEmpty(parentOrderInfo.GroupBuyParentOrderId))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "订单无效";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (parentOrderInfo.PaymentStatus == 0)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "团长订单未付款";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (bllMall.GetCount <WXMallOrderInfo>(string.Format("PaymentStatus=1 And GroupBuyParentOrderId='{0}' Or OrderId='{0}'", parentOrderInfo.OrderID)) >= parentOrderInfo.PeopleCount)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "团购人数已满";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (bllMall.GetCount <WXMallOrderInfo>(string.Format("GroupBuyParentOrderId='{0}' And OrderUserId='{1}' And PaymentStatus=0", parentOrderInfo.OrderID, CurrentUserInfo.UserID)) > 0)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "您还有未支付的订单,请先支付";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (DateTime.Now >= (((DateTime)parentOrderInfo.PayTime).AddDays(parentOrderInfo.ExpireDay)))
            {
                parentOrderInfo.GroupBuyStatus = "2";
                bllMall.Update(parentOrderInfo);
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "拼团已过期";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }

            #region 分销关系建立
            if (websiteInfo.DistributionRelationBuildMallOrder == 1)
            {
                UserInfo orderUserInfo = bllUser.GetUserInfo(parentOrderInfo.OrderUserID, parentOrderInfo.WebsiteOwner);
                if (bllUser.IsDistributionMember(orderUserInfo))
                {
                    if (string.IsNullOrEmpty(CurrentUserInfo.DistributionOwner))
                    {
                        var setUserDistributionOwnerResult = bllDis.SetUserDistributionOwner(CurrentUserInfo.UserID, orderUserInfo.UserID, CurrentUserInfo.WebsiteOwner);
                        if (setUserDistributionOwnerResult)
                        {
                            CurrentUserInfo.DistributionOwner = orderUserInfo.UserID;
                            CurrentUserInfo.Channel           = orderUserInfo.Channel;
                        }
                    }
                }
            }
            #endregion


            WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表
            orderInfo.Address       = orderRequestModel.receiver_address;
            orderInfo.Consignee     = orderRequestModel.receiver_name;
            orderInfo.InsertDate    = DateTime.Now;
            orderInfo.OrderUserID   = CurrentUserInfo.UserID;
            orderInfo.Phone         = orderRequestModel.receiver_phone;
            orderInfo.WebsiteOwner  = bllMall.WebsiteOwner;
            orderInfo.Transport_Fee = 0;
            orderInfo.OrderID       = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
            if (bllMall.WebsiteOwner != "mixblu")
            {
                orderInfo.OutOrderId = orderInfo.OrderID;
            }
            orderInfo.OrderMemo            = orderRequestModel.buyer_memo;
            orderInfo.ReceiverProvince     = orderRequestModel.receiver_province;
            orderInfo.ReceiverProvinceCode = orderRequestModel.receiver_province_code.ToString();
            orderInfo.ReceiverCity         = orderRequestModel.receiver_city;
            orderInfo.ReceiverCityCode     = orderRequestModel.receiver_city_code.ToString();
            orderInfo.ReceiverDist         = orderRequestModel.receiver_dist;
            orderInfo.ReceiverDistCode     = orderRequestModel.receiver_dist_code.ToString();
            orderInfo.ZipCode               = orderRequestModel.receiver_zip;
            orderInfo.Status                = "待付款";
            orderInfo.OrderType             = 2;
            orderInfo.GroupBuyParentOrderId = parentOrderInfo.OrderID;
            orderInfo.MyCouponCardId        = orderRequestModel.cardcoupon_id.ToString();
            orderInfo.UseScore              = orderRequestModel.use_score;
            orderInfo.UseAmount             = orderRequestModel.use_amount;
            orderInfo.LastUpdateTime        = DateTime.Now;

            if (orderRequestModel.pay_type == "WEIXIN")//微信支付
            {
                orderInfo.PaymentType = 2;
            }
            else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
            {
                orderInfo.PaymentType = 1;
            }

            #region 格式检查

            if (string.IsNullOrEmpty(orderInfo.Consignee))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "收货人姓名不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.Phone))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "收货人联系电话不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverProvince))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "省份名称不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverProvinceCode))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "省份代码不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverCity))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市名称不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverCityCode))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市代码不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverDist))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市区域名称不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverCityCode))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市区域代码不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.Address))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "收货地址不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }



            //相关检查
            #endregion


            #region 商品检查 订单详情生成


            var     needUseScore = 0; //必须使用的积分
            decimal needUseCash  = 0; //必须使用的现金

            var parentOrderDetailList = bllMall.GetOrderDetailsList(parentOrderInfo.OrderID);

            //先检查库存
            ProductSku productSku = bllMall.GetProductSku((int)parentOrderDetailList[0].SkuId);
            if (productSku == null)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "SKU不存在";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }

            WXMallProductInfo productInfo    = bllMall.GetProduct(productSku.ProductId.ToString());
            string            cardCouponType = "";//优惠券类型

            #region 检查优惠券是否可用
            if (orderRequestModel.cardcoupon_id > 0)
            {
                var mycardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                if (mycardCoupon == null)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                var cardCoupon = bllCardCoupon.GetCardCoupon(mycardCoupon.CardId);
                if (cardCoupon == null)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                cardCouponType = cardCoupon.CardCouponType;
                #region 需要购买指定商品
                if ((!string.IsNullOrEmpty(cardCoupon.Ex2)) && (cardCoupon.Ex2 != "0"))
                {
                    if (productInfo.PID != cardCoupon.Ex2)
                    {
                        var productInfoCard = bllMall.GetProduct(cardCoupon.Ex2);
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = string.Format("此优惠券需要购买{0}时才可以使用", productInfoCard.PName);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                #endregion

                #region 需要购买指定标签商品
                if (!string.IsNullOrEmpty(cardCoupon.Ex8))
                {
                    if (string.IsNullOrEmpty(productInfo.Tags))//全部商品都没有标签
                    {
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    bool checkResult = true;

                    if (!string.IsNullOrEmpty(productInfo.Tags))
                    {
                        bool tempResult = false;
                        foreach (string tag in productInfo.Tags.Split(','))
                        {
                            if (cardCoupon.Ex8.Contains(tag))
                            {
                                tempResult = true;
                                break;
                            }
                        }
                        if (!tempResult)
                        {
                            checkResult = false;
                        }
                    }
                    else//商品不包含标签
                    {
                        checkResult = false;
                    }
                    if (!checkResult)
                    {
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                #endregion
            }
            #endregion


            if (productInfo.IsOnSale == "0")
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = string.Format("{0}已下架", productInfo.PName);
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (productSku.Stock < 1)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = string.Format("{0}{1}库存余量为{2},库存不足", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.Stock);
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }

            if (productInfo.Score > 0)//必须使用的积分
            {
                needUseScore = productInfo.Score;
            }
            if (productInfo.IsCashPayOnly == 1)                                                                            //必须使用的现金
            {
                needUseCash = Math.Round((decimal)(productSku.Price * (decimal)(parentOrderInfo.MemberDiscount / 10)), 2); //四舍五入
            }

            WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
            detailModel.OrderID     = orderInfo.OrderID;
            detailModel.PID         = productInfo.PID;
            detailModel.TotalCount  = 1;
            detailModel.OrderPrice  = Math.Round((decimal)(productSku.Price * (decimal)(parentOrderInfo.MemberDiscount / 10)), 2);//四舍五入
            detailModel.ProductName = productInfo.PName;
            detailModel.SkuId       = productSku.SkuId;
            detailModel.SkuShowProp = bllMall.GetProductShowProperties(productSku.SkuId);
            detailModel.IsComplete  = 1;//拼团的只要下单就算销量


            #endregion
            #region 纯积分购买
            if (needUseScore > 0)
            {
                if ((CurrentUserInfo.TotalScore < needUseScore) || (orderRequestModel.use_score < needUseScore))
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = string.Format("您需要使用{0}积分来兑换, 可用积分不足", needUseScore);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
            }
            #endregion



            productFee = (decimal)detailModel.OrderPrice;
            //物流费用
            #region 运费计算

            List <SkuModel> skus = new List <SkuModel>();
            skus.Add(new SkuModel
            {
                sku_id = productSku.SkuId,
                count  = 1
            });
            FreightModel freightModel = new FreightModel();
            freightModel.receiver_province_code = orderRequestModel.receiver_province_code;
            freightModel.receiver_city_code     = orderRequestModel.receiver_city_code;
            freightModel.receiver_dist_code     = orderRequestModel.receiver_dist_code;
            freightModel.skus = skus;
            decimal freight    = 0;//运费
            string  freightMsg = "";
            if (!bllMall.CalcFreight(freightModel, out freight, out freightMsg))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = freightMsg;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
            }
            orderInfo.Transport_Fee = freight;
            #endregion

            #region 优惠券计算

            decimal discountAmount   = 0;//优惠金额
            bool    canUseCardCoupon = false;
            string  msg = "";
            if (orderRequestModel.cardcoupon_id > 0)//有优惠券
            {
                discountAmount = bllMall.CalcDiscountAmount(orderRequestModel.cardcoupon_id.ToString(), data, CurrentUserInfo.UserID, out canUseCardCoupon, out msg);
                if (!canUseCardCoupon)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = msg;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (cardCouponType == "MallCardCoupon_FreeFreight")//免邮券
                {
                    orderInfo.Transport_Fee = 0;
                }
            }
            //优惠券计算
            #endregion


            #region 积分计算
            decimal scoreExchangeAmount = 0;///积分抵扣的金额
            //积分计算
            if (orderRequestModel.use_score > 0)
            {
                #region 使用宏巍积分
                if (websiteInfo.IsUnionHongware == 1)
                {
                    CurrentUserInfo.TotalScore = hongWeiWareMemberInfo.member.point;
                }
                #endregion
                orderInfo.UseScore = orderRequestModel.use_score;
                if (CurrentUserInfo.TotalScore < orderRequestModel.use_score)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "积分不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }

                ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                if (scoreConfig != null && scoreConfig.ExchangeAmount > 0)
                {
                    scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
                }
                //scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
            }



            //积分计算
            #endregion

            #region 使用账户余额
            if (orderRequestModel.use_amount > 0)
            {
                if (!bllMall.IsEnableAccountAmountPay())
                {
                    apiResp.msg = "尚未启用余额支付功能";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                #region 使用宏巍余额
                if (websiteInfo.IsUnionHongware == 1)
                {
                    CurrentUserInfo.AccountAmount = (decimal)hongWeiWareMemberInfo.member.balance;
                }
                #endregion
                if (CurrentUserInfo.AccountAmount < orderRequestModel.use_amount)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "您的账户余额不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
            }
            #endregion

            //合计计算
            orderInfo.Product_Fee   = productFee;
            orderInfo.TotalAmount   = orderInfo.Product_Fee + orderInfo.Transport_Fee;
            orderInfo.TotalAmount  -= discountAmount;                  //优惠券优惠金额
            orderInfo.TotalAmount  -= scoreExchangeAmount;             //积分优惠金额
            orderInfo.TotalAmount  -= orderRequestModel.use_amount;    //余额
            orderInfo.PayableAmount = orderInfo.TotalAmount - freight; //应付金额

            orderInfo.HeadDiscount          = parentOrderInfo.HeadDiscount;
            orderInfo.MemberDiscount        = parentOrderInfo.MemberDiscount;
            orderInfo.PeopleCount           = parentOrderInfo.PeopleCount;
            orderInfo.ExpireDay             = parentOrderInfo.ExpireDay;
            orderInfo.GroupBuyParentOrderId = parentOrderInfo.OrderID;

            orderInfo.ScoreExchangAmount  = scoreExchangeAmount; //优惠券抵扣金额
            orderInfo.CardcouponDisAmount = discountAmount;      //卡券抵扣金额

            if (orderInfo.TotalAmount <= 0)
            {
                orderInfo.TotalAmount   = 0;
                orderInfo.PaymentStatus = 1;
                orderInfo.PayTime       = DateTime.Now;
                orderInfo.Status        = "待发货";
            }
            if (orderInfo.TotalAmount < needUseCash)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = string.Format("最少需要支付{0}元" + needUseCash);
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                if (!this.bllMall.Add(orderInfo, tran))
                {
                    tran.Rollback();
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "提交失败";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }

                #region 更新优惠券使用状态
                //优惠券
                if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用
                {
                    MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                    myCardCoupon.UseDate = DateTime.Now;
                    myCardCoupon.Status  = 1;
                    if (!bllCardCoupon.Update(myCardCoupon, tran))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "更新优惠券状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                //优惠券
                #endregion

                #region 积分抵扣
                //积分扣除
                if (orderRequestModel.use_score > 0)
                {
                    CurrentUserInfo.TotalScore -= orderRequestModel.use_score;
                    if (bllMall.Update(CurrentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", CurrentUserInfo.AutoID), tran) < 0)
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "更新用户积分失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    //积分记录
                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = -orderRequestModel.use_score;
                    scoreRecord.TotalScore   = CurrentUserInfo.TotalScore;
                    scoreRecord.ScoreType    = "OrderSubmit";
                    scoreRecord.UserID       = CurrentUserInfo.UserID;
                    scoreRecord.AddNote      = "微商城-参加团购使用积分";
                    scoreRecord.WebSiteOwner = CurrentUserInfo.WebsiteOwner;
                    if (!bllMall.Add(scoreRecord, tran))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入积分记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    #region 更新宏巍积分
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        if (!hongWareClient.UpdateMemberScore(hongWeiWareMemberInfo.member.mobile, CurrentUserInfo.WXOpenId, -orderRequestModel.use_score))
                        {
                            tran.Rollback();
                            apiResp.code = (int)APIErrCode.OperateFail;
                            apiResp.msg  = "更新宏巍积分失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                            return;
                        }
                    }
                    #endregion
                }

                //积分扣除
                #endregion

                #region 余额抵扣

                if (orderRequestModel.use_amount > 0 && bllMall.IsEnableAccountAmountPay())
                {
                    CurrentUserInfo.AccountAmount -= orderRequestModel.use_amount;
                    if (bllMall.Update(CurrentUserInfo, string.Format(" AccountAmount={0}", CurrentUserInfo.AccountAmount), string.Format(" AutoID={0}", CurrentUserInfo.AutoID)) < 0)
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "更新用户余额失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }


                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = -(double)orderRequestModel.use_amount;
                    scoreRecord.TotalScore   = (double)CurrentUserInfo.AccountAmount;
                    scoreRecord.UserID       = CurrentUserInfo.UserID;
                    scoreRecord.AddNote      = "拼团-参团使用余额";
                    scoreRecord.RelationID   = orderInfo.OrderID;
                    scoreRecord.WebSiteOwner = bllUser.WebsiteOwner;
                    scoreRecord.ScoreType    = "AccountAmount";
                    if (!bllMall.Add(scoreRecord))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入余额记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    UserCreditAcountDetails record = new UserCreditAcountDetails();
                    record.WebsiteOwner = bllUser.WebsiteOwner;
                    record.Operator     = CurrentUserInfo.UserID;
                    record.UserID       = CurrentUserInfo.UserID;
                    record.CreditAcount = -orderRequestModel.use_amount;
                    record.SysType      = "AccountAmount";
                    record.AddTime      = DateTime.Now;
                    record.AddNote      = "账户余额变动-" + orderRequestModel.use_amount;
                    if (!bllMall.Add(record))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入余额记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    #region 更新宏巍余额
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        if (!hongWareClient.UpdateMemberBlance(hongWeiWareMemberInfo.member.mobile, CurrentUserInfo.WXOpenId, -(float)orderRequestModel.use_amount))
                        {
                            tran.Rollback();
                            apiResp.code = (int)APIErrCode.OperateFail;
                            apiResp.msg  = "更新宏巍余额失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion
                }


                #endregion

                #region 插入订单详情表及更新库存

                if (!this.bllMall.Add(detailModel, tran))
                {
                    tran.Rollback();
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "提交失败";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                //更新 SKU库存
                System.Text.StringBuilder sbUpdateStock = new StringBuilder();//更新库存sql
                sbUpdateStock.AppendFormat(" Update ZCJ_ProductSku Set Stock-={0} ", 1);
                sbUpdateStock.AppendFormat(" Where SkuId={0} And Stock>0 ", productSku.SkuId);
                if (ZentCloud.ZCBLLEngine.BLLBase.ExecuteSql(sbUpdateStock.ToString(), tran) <= 0)
                {
                    tran.Rollback();
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "提交订单失败,库存不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }

                #endregion

                tran.Commit();//提交订单事务
                #region 宏巍通知
                if (websiteInfo.IsUnionHongware == 1)
                {
                    hongWareClient.OrderNotice(CurrentUserInfo.WXOpenId, orderInfo.OrderID);
                }
                #endregion
                try
                {
                    //团购完成取消其它未付款订单
                    if (parentOrderInfo.Ex10 == "1")
                    {
                        if (bllMall.GetCount <WXMallOrderInfo>(string.Format("PaymentStatus=1 And  (GroupBuyParentOrderId='{0}')", parentOrderInfo.OrderID)) >= parentOrderInfo.PeopleCount)
                        {
                            bllMall.Update(new WXMallOrderInfo(), string.Format("Status='已取消'"), string.Format("  GroupBuyParentOrderId='{0}' And PaymentStatus=0", parentOrderInfo.OrderID));
                            parentOrderInfo.GroupBuyStatus = "1";
                            bllMall.Update(parentOrderInfo);
                        }
                    }
                    else
                    {
                        if (bllMall.GetCount <WXMallOrderInfo>(string.Format("PaymentStatus=1 And  (GroupBuyParentOrderId='{0}' Or OrderId='{0}')", parentOrderInfo.OrderID)) >= parentOrderInfo.PeopleCount)
                        {
                            bllMall.Update(new WXMallOrderInfo(), string.Format("Status='已取消'"), string.Format("  GroupBuyParentOrderId='{0}' And PaymentStatus=0", parentOrderInfo.OrderID));
                            parentOrderInfo.GroupBuyStatus = "1";
                            bllMall.Update(parentOrderInfo);
                        }
                    }

                    #region 微信模板消息
                    string title = "订单已成功提交";
                    if (orderInfo.TotalAmount > 0)
                    {
                        title += ",请尽快付款";
                    }
                    bllWeiXin.SendTemplateMessageNotifyComm(CurrentUserInfo, title, string.Format("订单号:{0}\\n订单金额:{1}元\\n收货人:{2}\\n电话:{3}", orderInfo.OrderID, orderInfo.TotalAmount, orderInfo.Consignee, orderInfo.Phone));
                    #endregion
                }
                catch
                {
                }
            }
            catch (Exception ex)
            {
                //回滚事物
                tran.Rollback();
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "提交订单失败";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            apiResp.status = true;
            apiResp.msg    = "ok";
            apiResp.result = new
            {
                order_id = orderInfo.OrderID
            };
            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
        }
예제 #18
0
파일: CardCoupon.ashx.cs 프로젝트: uvbs/mmp
        /// <summary>
        /// 卡券核销
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private string Hexiao(HttpContext context)
        {
            string cardCouponId = context.Request["cardcoupon_id"]; //主卡券ID
            string hexiaoCode   = context.Request["hexiao_code"];   //核销码

            if (string.IsNullOrEmpty(cardCouponId))
            {
                apiResp.msg = "cardcoupon_id 参数必传";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            if (string.IsNullOrEmpty(hexiaoCode))
            {
                apiResp.msg = "hexiao_code 参数必传";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            CardCoupons cardCoupon = bllCardCoupon.GetCardCoupon(int.Parse(cardCouponId));

            if (cardCoupon == null)
            {
                apiResp.msg = "卡券不存在";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            MyCardCoupons myCardCoupon = bllCardCoupon.Get <MyCardCoupons>(string.Format(" CardId={0} And Status=0 And UserId='{1}'", cardCoupon.CardId, currentUserInfo.UserID));

            if (myCardCoupon == null)
            {
                apiResp.msg = "卡券不存在";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            if (myCardCoupon.Status == 1)
            {
                apiResp.msg = "卡券已经使用";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            string hexiaoChanel = "";
            bool   hexiaoResult = GetHexiaoChannel(hexiaoCode, out hexiaoChanel);

            if (!hexiaoResult)
            {
                apiResp.msg = "核销失败";
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            try
            {
                myCardCoupon.HexiaoCode    = hexiaoCode;
                myCardCoupon.HexiaoChannel = hexiaoChanel;
                myCardCoupon.Status        = 1;
                myCardCoupon.UseDate       = DateTime.Now;
                if (!bllCardCoupon.Update(myCardCoupon))
                {
                    apiResp.msg = "核销失败";
                    return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                }
                else
                {
                    apiResp.status = true;
                    apiResp.msg    = "ok";
                }
            }
            catch (Exception ex)
            {
                apiResp.msg = ex.Message;
                return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
            }
            return(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
        }
예제 #19
0
파일: Add.ashx.cs 프로젝트: uvbs/mmp
        public void ProcessRequest(HttpContext context)
        {
            WebsiteInfo websiteInfo = bllMall.GetWebsiteInfoModelFromDataBase();

            Open.HongWareSDK.Client     hongWareClient        = new Open.HongWareSDK.Client(websiteInfo.WebsiteOwner);
            Open.HongWareSDK.MemberInfo hongWeiWareMemberInfo = null;
            if (websiteInfo.IsUnionHongware == 1)
            {
                hongWeiWareMemberInfo = hongWareClient.GetMemberInfo(CurrentUserInfo.WXOpenId);
                if (hongWeiWareMemberInfo.member == null)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "您尚未绑定宏巍账号,请先绑定";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
            }
            string data = context.Request["data"];

            if (string.IsNullOrEmpty(data))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "data 参数必传";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            decimal    productFee = 0;    //商品总价格 不包含邮费
            OrderModel orderRequestModel; //订单模型

            try
            {
                orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderModel>(data);
            }
            catch (Exception ex)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "JSON格式错误,请检查。错误信息:" + ex.Message;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表

            orderInfo.Address   = orderRequestModel.receiver_address;
            orderInfo.Consignee = orderRequestModel.receiver_name;
            //orderInfo.ExpressCompanyName = orderRequestModel.express_company;
            orderInfo.InsertDate    = DateTime.Now;
            orderInfo.OrderUserID   = CurrentUserInfo.UserID;
            orderInfo.Phone         = orderRequestModel.receiver_phone;
            orderInfo.WebsiteOwner  = bllMall.WebsiteOwner;
            orderInfo.Transport_Fee = 0;
            orderInfo.OrderID       = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
            if (bllMall.WebsiteOwner != "mixblu")
            {
                orderInfo.OutOrderId = orderInfo.OrderID;
            }
            orderInfo.OrderMemo            = orderRequestModel.buyer_memo;
            orderInfo.ReceiverProvince     = orderRequestModel.receiver_province;
            orderInfo.ReceiverProvinceCode = orderRequestModel.receiver_province_code.ToString();
            orderInfo.ReceiverCity         = orderRequestModel.receiver_city;
            orderInfo.ReceiverCityCode     = orderRequestModel.receiver_city_code.ToString();
            orderInfo.ReceiverDist         = orderRequestModel.receiver_dist;
            orderInfo.ReceiverDistCode     = orderRequestModel.receiver_dist_code.ToString();
            orderInfo.ZipCode        = orderRequestModel.receiver_zip;
            orderInfo.MyCouponCardId = orderRequestModel.cardcoupon_id.ToString();
            orderInfo.UseScore       = orderRequestModel.use_score;
            orderInfo.UseAmount      = orderRequestModel.use_amount;
            orderInfo.Status         = "待付款";
            orderInfo.OrderType      = 2;
            orderInfo.LastUpdateTime = DateTime.Now;

            //if (!string.IsNullOrEmpty(orderRequestModel.sale_id))
            //{
            //    long saleId = 0;
            //    if (long.TryParse(orderRequestModel.sale_id, out saleId))
            //    {
            //        orderInfo.SellerId = saleId;
            //    }
            //    else
            //    {

            //    }


            //}
            if (orderRequestModel.pay_type == "WEIXIN")//微信支付
            {
                orderInfo.PaymentType = 2;
            }
            else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
            {
                orderInfo.PaymentType = 1;
            }

            #region 格式检查


            //相关检查
            if (string.IsNullOrEmpty(orderRequestModel.rule_id))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "rule_id 必传";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.Consignee))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "收货人姓名不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.Phone))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "收货人联系电话不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverProvince))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "省份名称不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverProvinceCode))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "省份代码不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverCity))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市名称不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverCityCode))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市代码不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverDist))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市区域名称不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.ReceiverCityCode))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "城市区域代码不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderInfo.Address))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "收货地址不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (orderRequestModel.skus == null)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "参数skus 不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }


            //相关检查
            #endregion

            #region 分销关系建立
            if (websiteInfo.DistributionRelationBuildMallOrder == 1)
            {
                if (!string.IsNullOrEmpty(orderRequestModel.sale_id))
                {
                    int saleId = 0;
                    if (int.TryParse(orderRequestModel.sale_id, out saleId))
                    {
                        orderInfo.SellerId = saleId;
                        if (string.IsNullOrEmpty(CurrentUserInfo.DistributionOwner))
                        {
                            var recommendUserInfo = bllUser.GetUserInfoByAutoID(saleId);
                            if (recommendUserInfo != null)
                            {
                                var setUserDistributionOwnerResult = bllDis.SetUserDistributionOwner(CurrentUserInfo.UserID, recommendUserInfo.UserID, CurrentUserInfo.WebsiteOwner);

                                if (setUserDistributionOwnerResult)
                                {
                                    CurrentUserInfo.DistributionOwner = recommendUserInfo.UserID;
                                    CurrentUserInfo.Channel           = recommendUserInfo.Channel;
                                }
                            }
                        }
                    }
                    else
                    {
                    }
                }
                else
                {
                    if (string.IsNullOrEmpty(CurrentUserInfo.DistributionOwner))
                    {
                        CurrentUserInfo.DistributionOwner = bllUser.WebsiteOwner;
                        bllUser.Update(CurrentUserInfo);
                    }
                }
            }
            #endregion

            if (orderRequestModel.skus.Count > 1)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "只能购买一种商品";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (orderRequestModel.skus.Sum(p => p.count) > 1)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "团购商品只能购买一件";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }


            List <ProductGroupBuyRule> groupBuyList = new List <ProductGroupBuyRule>();//此商品的团购规则列表

            #region 购买的商品
            List <WXMallProductInfo> productList = new List <WXMallProductInfo>();
            foreach (var sku in orderRequestModel.skus)
            {
                ProductSku productSku = bllMall.GetProductSku(sku.sku_id);
                if (productSku == null)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "sku_id 无效";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                // WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                //productList.Add(productInfo);

                //ProductSku productSku = bllMall.GetProductSku(sku.sku_id);

                //if (productSku == null) continue;
                if (productList.Count(p => p.PID == productSku.ProductId.ToString()) > 0)
                {
                    continue;
                }

                WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                productList.Add(productInfo);
                groupBuyList = bllMall.GetProductGroupBuyRuleList(productSku.ProductId.ToString());
            }

            if (groupBuyList.Count == 0)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "此商品不能团购";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (groupBuyList.SingleOrDefault(p => p.RuleId == int.Parse(orderRequestModel.rule_id)) == null)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "rule_id 错误,请检查";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }

            ProductGroupBuyRule groupBuyRule = groupBuyList.SingleOrDefault(p => p.RuleId == int.Parse(orderRequestModel.rule_id));//团购规则

            // productList = productList.Distinct().ToList();
            #endregion

            string cardCouponType = "";//优惠券类型
            #region 检查优惠券是否可用
            if (orderRequestModel.cardcoupon_id > 0)
            {
                var mycardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                if (mycardCoupon == null)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                var cardCoupon = bllCardCoupon.GetCardCoupon(mycardCoupon.CardId);
                if (cardCoupon == null)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                cardCouponType = cardCoupon.CardCouponType;
                #region 需要购买指定商品
                if ((!string.IsNullOrEmpty(cardCoupon.Ex2)) && (cardCoupon.Ex2 != "0"))
                {
                    if (productList.Count(p => p.PID == cardCoupon.Ex2) == 0)
                    {
                        var productInfo = bllMall.GetProduct(cardCoupon.Ex2);
                        apiResp.code = 1;
                        apiResp.msg  = string.Format("此优惠券需要购买{0}时才可以使用", productInfo.PName);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                #endregion

                #region 需要购买指定标签商品
                if (!string.IsNullOrEmpty(cardCoupon.Ex8))
                {
                    if (productList.Where(p => p.Tags == "" || p.Tags == null).Count() == productList.Count)//全部商品都没有标签
                    {
                        apiResp.code = 1;
                        apiResp.msg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    bool checkResult = true;
                    foreach (var product in productList)
                    {
                        if (!string.IsNullOrEmpty(product.Tags))
                        {
                            bool tempResult = false;
                            foreach (string tag in product.Tags.Split(','))
                            {
                                if (cardCoupon.Ex8.Contains(tag))
                                {
                                    tempResult = true;
                                    break;
                                }
                            }
                            if (!tempResult)
                            {
                                checkResult = false;
                                break;
                            }
                        }
                        else//商品不包含标签
                        {
                            checkResult = false;
                            break;
                        }
                    }
                    if (!checkResult)
                    {
                        apiResp.code = 1;
                        apiResp.msg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                #endregion
            }
            #endregion

            var     needUseScore = 0; //必须使用的积分
            decimal needUseCash  = 0; //必须使用的现金
            #region 商品检查 订单详情生成
            ///订单详情
            List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情
            orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList();
            foreach (var sku in orderRequestModel.skus)
            {
                //先检查库存
                ProductSku productSku = bllMall.GetProductSku(sku.sku_id);
                if (productSku == null)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "SKU不存在";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }

                WXMallProductInfo productInfo = productList.Single(p => p.PID == productSku.ProductId.ToString());
                if (productInfo.IsOnSale == "0")
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = string.Format("{0}已下架", productInfo.PName);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (productSku.Stock < sku.count)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = string.Format("{0}{1}库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.Stock);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (productInfo.Score > 0)//必须使用的积分
                {
                    needUseScore += sku.count * productInfo.Score;
                }
                if (productInfo.IsCashPayOnly == 1)//必须使用的现金
                {
                    needUseCash += (Math.Round((decimal)(productSku.Price * (decimal)(groupBuyRule.HeadDiscount / 10)), 2)) * sku.count;
                }
                WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
                detailModel.OrderID     = orderInfo.OrderID;
                detailModel.PID         = productInfo.PID;
                detailModel.TotalCount  = sku.count;
                detailModel.OrderPrice  = Math.Round((decimal)(productSku.Price * (decimal)(groupBuyRule.HeadDiscount / 10)), 2);//四舍五入
                detailModel.ProductName = productInfo.PName;
                detailModel.SkuId       = productSku.SkuId;
                detailModel.SkuShowProp = bllMall.GetProductShowProperties(productSku.SkuId);
                detailModel.IsComplete  = 1;//拼团的只要下单就算销量
                detailList.Add(detailModel);
            }
            #endregion

            #region 纯积分购买
            if (needUseScore > 0)
            {
                if ((CurrentUserInfo.TotalScore < needUseScore) || (orderRequestModel.use_score < needUseScore))
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = string.Format("您需要使用{0}积分来兑换, 可用积分不足", needUseScore);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
            }
            #endregion

            productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;//商品费用
            //物流费用
            #region 运费计算
            FreightModel freightModel = new FreightModel();
            freightModel.receiver_province_code = orderRequestModel.receiver_province_code;
            freightModel.receiver_city_code     = orderRequestModel.receiver_city_code;
            freightModel.receiver_dist_code     = orderRequestModel.receiver_dist_code;
            freightModel.skus = orderRequestModel.skus;
            decimal freight    = 0;//运费
            string  freightMsg = "";
            if (!bllMall.CalcFreight(freightModel, out freight, out freightMsg))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = freightMsg;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            orderInfo.Transport_Fee = freight;
            #endregion

            #region 优惠券计算

            decimal discountAmount   = 0;//优惠金额
            bool    canUseCardCoupon = false;
            string  msg = "";
            if (orderRequestModel.cardcoupon_id > 0)//有优惠券
            {
                discountAmount = bllMall.CalcDiscountAmount(orderRequestModel.cardcoupon_id.ToString(), data, CurrentUserInfo.UserID, out canUseCardCoupon, out msg);
                if (!canUseCardCoupon)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = msg;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (cardCouponType == "MallCardCoupon_FreeFreight")//免邮券
                {
                    orderInfo.Transport_Fee = 0;
                }
            }
            //优惠券计算
            #endregion

            #region 积分计算
            decimal scoreExchangeAmount = 0;///积分抵扣的金额
            //积分计算
            if (orderRequestModel.use_score > 0)
            {
                #region 使用宏巍积分
                if (websiteInfo.IsUnionHongware == 1)
                {
                    CurrentUserInfo.TotalScore = hongWeiWareMemberInfo.member.point;
                }
                #endregion
                if (CurrentUserInfo.TotalScore < orderRequestModel.use_score)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "积分不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }

                ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                if (scoreConfig != null && scoreConfig.ExchangeAmount > 0)
                {
                    scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
                }
                //scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
            }



            //积分计算
            #endregion

            #region 使用账户余额
            if (orderRequestModel.use_amount > 0)
            {
                if (!bllMall.IsEnableAccountAmountPay())
                {
                    apiResp.msg = "尚未启用余额支付功能";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                #region 使用宏巍余额
                if (websiteInfo.IsUnionHongware == 1)
                {
                    CurrentUserInfo.AccountAmount = (decimal)hongWeiWareMemberInfo.member.balance;
                }
                #endregion

                if (CurrentUserInfo.AccountAmount < orderRequestModel.use_amount)
                {
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "您的账户余额不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
            }
            #endregion

            //合计计算
            orderInfo.Product_Fee         = productFee;
            orderInfo.TotalAmount         = orderInfo.Product_Fee + orderInfo.Transport_Fee;
            orderInfo.TotalAmount        -= discountAmount;                  //优惠券优惠金额
            orderInfo.TotalAmount        -= scoreExchangeAmount;             //积分优惠金额
            orderInfo.TotalAmount        -= orderRequestModel.use_amount;    //余额
            orderInfo.PayableAmount       = orderInfo.TotalAmount - freight; //应付金额
            orderInfo.ScoreExchangAmount  = scoreExchangeAmount;             //优惠券抵扣金额
            orderInfo.CardcouponDisAmount = discountAmount;                  //卡券抵扣金额
            if ((productFee + orderInfo.Transport_Fee - discountAmount - scoreExchangeAmount) < orderInfo.TotalAmount)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "积分兑换金额不能大于订单总金额,请减少积分兑换";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }

            if (orderInfo.TotalAmount < 0)
            {
                orderInfo.TotalAmount = 0;
            }
            if (orderInfo.TotalAmount == 0)
            {
                orderInfo.PaymentStatus = 1;
                orderInfo.PayTime       = DateTime.Now;
                orderInfo.Status        = "待发货";
            }
            orderInfo.HeadDiscount   = groupBuyRule.HeadDiscount;
            orderInfo.MemberDiscount = groupBuyRule.MemberDiscount;
            orderInfo.PeopleCount    = groupBuyRule.PeopleCount;
            orderInfo.ExpireDay      = groupBuyRule.ExpireDay;

            if (orderInfo.TotalAmount < needUseCash)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = string.Format("最少需要支付{0}元" + needUseCash);
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                if (!this.bllMall.Add(orderInfo, tran))
                {
                    tran.Rollback();
                    apiResp.code = (int)APIErrCode.OperateFail;
                    apiResp.msg  = "提交失败";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }

                #region 更新优惠券使用状态
                //优惠券
                if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用
                {
                    MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                    myCardCoupon.UseDate = DateTime.Now;
                    myCardCoupon.Status  = 1;
                    if (!bllCardCoupon.Update(myCardCoupon, tran))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "更新优惠券状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                //优惠券
                #endregion

                #region 积分抵扣
                //积分扣除
                if (orderRequestModel.use_score > 0)
                {
                    CurrentUserInfo.TotalScore -= orderRequestModel.use_score;
                    if (bllMall.Update(CurrentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", CurrentUserInfo.AutoID), tran) < 0)
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "更新用户积分失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    //积分记录
                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = -orderRequestModel.use_score;
                    scoreRecord.TotalScore   = CurrentUserInfo.TotalScore;
                    scoreRecord.ScoreType    = "OrderSubmit";
                    scoreRecord.UserID       = CurrentUserInfo.UserID;
                    scoreRecord.AddNote      = "微商城-开团使用积分";
                    scoreRecord.WebSiteOwner = CurrentUserInfo.WebsiteOwner;
                    if (!bllMall.Add(scoreRecord, tran))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入积分记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    #region 更新宏巍积分
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        if (!hongWareClient.UpdateMemberScore(hongWeiWareMemberInfo.member.mobile, CurrentUserInfo.WXOpenId, -orderRequestModel.use_score))
                        {
                            tran.Rollback();
                            apiResp.code = (int)APIErrCode.OperateFail;
                            apiResp.msg  = "更新宏巍积分失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                            return;
                        }
                    }
                    #endregion
                }

                //积分扣除
                #endregion

                #region 余额抵扣

                if (orderRequestModel.use_amount > 0 && bllMall.IsEnableAccountAmountPay())
                {
                    CurrentUserInfo.AccountAmount -= orderRequestModel.use_amount;
                    if (bllMall.Update(CurrentUserInfo, string.Format(" AccountAmount={0}", CurrentUserInfo.AccountAmount), string.Format(" AutoID={0}", CurrentUserInfo.AutoID)) < 0)
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "更新用户余额失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }


                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = -(double)orderRequestModel.use_amount;
                    scoreRecord.TotalScore   = (double)CurrentUserInfo.AccountAmount;
                    scoreRecord.UserID       = CurrentUserInfo.UserID;
                    scoreRecord.AddNote      = "拼团-开团使用余额";
                    scoreRecord.RelationID   = orderInfo.OrderID;
                    scoreRecord.WebSiteOwner = bllUser.WebsiteOwner;
                    scoreRecord.ScoreType    = "AccountAmount";
                    if (!bllMall.Add(scoreRecord))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入余额记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    UserCreditAcountDetails record = new UserCreditAcountDetails();
                    record.WebsiteOwner = bllUser.WebsiteOwner;
                    record.Operator     = CurrentUserInfo.UserID;
                    record.UserID       = CurrentUserInfo.UserID;
                    record.CreditAcount = -orderRequestModel.use_amount;
                    record.SysType      = "AccountAmount";
                    record.AddTime      = DateTime.Now;
                    record.AddNote      = "账户余额变动-" + orderRequestModel.use_amount;
                    if (!bllMall.Add(record))
                    {
                        tran.Rollback();
                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "插入余额记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }

                    #region 更新宏巍余额
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        if (!hongWareClient.UpdateMemberBlance(hongWeiWareMemberInfo.member.mobile, CurrentUserInfo.WXOpenId, -(float)orderRequestModel.use_amount))
                        {
                            tran.Rollback();
                            apiResp.code = (int)APIErrCode.OperateFail;
                            apiResp.msg  = "更新宏巍余额失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion
                }


                #endregion

                #region 插入订单详情表及更新库存
                foreach (var item in detailList)
                {
                    ProductSku        productSku  = bllMall.GetProductSku((int)(item.SkuId));
                    WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    if (!this.bllMall.Add(item, tran))
                    {
                        tran.Rollback();

                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "提交失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    //更新 SKU库存
                    System.Text.StringBuilder sbUpdateStock = new StringBuilder();//更新库存sql
                    sbUpdateStock.AppendFormat(" Update ZCJ_ProductSku Set Stock-={0} ", item.TotalCount);

                    sbUpdateStock.AppendFormat(" Where SkuId={0} And Stock>0 ", productSku.SkuId);

                    if (ZentCloud.ZCBLLEngine.BLLBase.ExecuteSql(sbUpdateStock.ToString(), tran) <= 0)
                    {
                        tran.Rollback();

                        apiResp.code = (int)APIErrCode.OperateFail;
                        apiResp.msg  = "提交订单失败,库存不足";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }
                #endregion



                bllMall.DeleteShoppingCart(CurrentUserInfo.UserID, orderRequestModel.skus);
                tran.Commit();//提交订单事务
                #region 宏巍通知
                if (websiteInfo.IsUnionHongware == 1)
                {
                    hongWareClient.OrderNotice(CurrentUserInfo.WXOpenId, orderInfo.OrderID);
                }
                #endregion


                #region 微信模板消息
                try
                {
                    string title = "订单已成功提交";
                    if (orderInfo.TotalAmount > 0)
                    {
                        title += ",请尽快付款";
                    }
                    bllWeiXin.SendTemplateMessageNotifyComm(CurrentUserInfo, title, string.Format("订单号:{0}\\n订单金额:{1}元\\n收货人:{2}\\n电话:{3}", orderInfo.OrderID, orderInfo.TotalAmount, orderInfo.Consignee, orderInfo.Phone));
                }
                catch
                {
                }
                #endregion
            }
            catch (Exception ex)
            {
                //回滚事物
                tran.Rollback();
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "提交订单失败";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            apiResp.status = true;
            apiResp.msg    = "ok";
            apiResp.result = new
            {
                order_id = orderInfo.OrderID
            };

            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
        }
예제 #20
0
        public void ProcessRequest(HttpContext context)
        {
            BLLJIMP.Model.API.User.PayRegisterUser requestUser = bll.ConvertRequestToModel <BLLJIMP.Model.API.User.PayRegisterUser>(new BLLJIMP.Model.API.User.PayRegisterUser());
            string websiteOwner = bll.WebsiteOwner;

            WebsiteInfo website = bllUser.GetWebsiteInfoModelFromDataBase(websiteOwner);

            if (string.IsNullOrWhiteSpace(requestUser.level.ToString()))
            {
                apiResp.code = (int)APIErrCode.PrimaryKeyIncomplete;
                apiResp.msg  = "请选择会员级别";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (string.IsNullOrWhiteSpace(requestUser.phone))
            {
                apiResp.code = (int)APIErrCode.PrimaryKeyIncomplete;
                apiResp.msg  = "请输入手机号码";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (string.IsNullOrWhiteSpace(requestUser.spreadid))
            {
                apiResp.code = (int)APIErrCode.PrimaryKeyIncomplete;
                apiResp.msg  = "请输入推荐人编号";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (!ZentCloud.Common.MyRegex.PhoneNumLogicJudge(requestUser.phone))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "手机号码格式不正确";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (!ZentCloud.Common.MyRegex.IsIDCard(requestUser.idcard))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "身份证号码必须如实填写";
                bll.ContextResponse(context, apiResp);
                return;
            }
            UserLevelConfig levelConfig = bll.QueryUserLevel(websiteOwner, "DistributionOnLine", requestUser.level.ToString());

            if (levelConfig == null)
            {
                apiResp.code = (int)APIErrCode.IsNotFound;
                apiResp.msg  = "会员级别未找到";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (levelConfig.IsDisable == 1)
            {
                apiResp.code = (int)APIErrCode.IsNotFound;
                apiResp.msg  = "会员级别禁止注册";
                bll.ContextResponse(context, apiResp);
                return;
            }
            UserInfo spreadUser = bllUser.GetSpreadUser(requestUser.spreadid, websiteOwner);

            if (spreadUser == null)
            {
                apiResp.code = (int)APIErrCode.IsNotFound;
                apiResp.msg  = "推荐人未找到";
                bll.ContextResponse(context, apiResp);
                return;
            }
            requestUser.spreadid = spreadUser.UserID; //推荐人
            UserInfo regUser = bllUser.GetUserInfoByPhone(requestUser.phone, websiteOwner);

            if (regUser != null && regUser.MemberLevel >= 10)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "该手机已注册会员";
                bll.ContextResponse(context, apiResp);
                return;
            }
            if (regUser != null && regUser.MemberLevel >= requestUser.level)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "该会员有更高级别";
                bll.ContextResponse(context, apiResp);
                return;
            }
            string configV1CouponId = ZentCloud.Common.ConfigHelper.GetConfigString("YGBV1CouponId");
            string configV2CouponId = ZentCloud.Common.ConfigHelper.GetConfigString("YGBV2CouponId");
            string v1LevelNumber    = ZentCloud.Common.ConfigHelper.GetConfigString("V1LevelNumber");
            string v2LevelNumber    = ZentCloud.Common.ConfigHelper.GetConfigString("V2LevelNumber");

            string couponId = string.Empty;

            CardCoupons   cardModel    = null;
            MyCardCoupons myCardCoupon = null;

            if (requestUser.vType == "V1")
            {
                if (string.IsNullOrEmpty(configV1CouponId))
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "V1优惠券未配置";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                couponId     = configV1CouponId;
                cardModel    = bllCardCoupon.GetCardCoupon(Convert.ToInt32(couponId));
                myCardCoupon = bllCardCoupon.GetMyCardCouponMainId(Convert.ToInt32(couponId), regUser.UserID);
                if (cardModel == null || myCardCoupon == null)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不存在";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                if (requestUser.level.ToString() != v1LevelNumber)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不能用于此升级";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (requestUser.vType == "V2")
            {
                if (string.IsNullOrEmpty(configV2CouponId))
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "V2优惠券未配置";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                couponId     = configV2CouponId;
                cardModel    = bllCardCoupon.GetCardCoupon(Convert.ToInt32(couponId));
                myCardCoupon = bllCardCoupon.GetMyCardCouponMainId(Convert.ToInt32(couponId), regUser.UserID);
                if (cardModel == null || myCardCoupon == null)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不存在";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                if (requestUser.level.ToString() != v2LevelNumber)
                {
                    apiResp.code = (int)APIErrCode.ContentNotFound;
                    apiResp.msg  = "优惠券不能用于此升级";
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
            }


            if (regUser == null)
            {
                regUser               = new UserInfo();
                regUser.UserID        = string.Format("ZYUser{0}{1}", DateTime.Now.ToString("yyyyMMdd"), Guid.NewGuid().ToString("N").ToUpper());
                regUser.UserType      = 2;
                regUser.WebsiteOwner  = websiteOwner;
                regUser.Regtime       = DateTime.Now;
                regUser.LastLoginDate = DateTime.Parse("1970-01-01");
            }
            regUser.TrueName          = requestUser.truename;
            regUser.DistributionOwner = requestUser.spreadid;
            regUser.Phone             = requestUser.phone;
            regUser.MemberLevel       = requestUser.level;
            regUser.MemberApplyTime   = DateTime.Now;
            regUser.MemberStartTime   = DateTime.Now;
            regUser.MemberApplyStatus = 9;
            regUser.IdentityCard      = requestUser.idcard;
            regUser.Province          = requestUser.province;
            regUser.City         = requestUser.city;
            regUser.District     = requestUser.district;
            regUser.Town         = requestUser.town;
            regUser.ProvinceCode = requestUser.provinceCode;
            regUser.CityCode     = requestUser.cityCode;
            regUser.DistrictCode = requestUser.districtCode;
            regUser.TownCode     = requestUser.townCode;
            regUser.RegIP        = context.Request.UserHostAddress;//ip
            regUser.Password     = ZentCloud.Common.Rand.Number(6);
            regUser.RegUserID    = CurrentUserInfo.UserID;
            regUser.EmptyBill    = 0;
            regUser.RegisterWay  = "线上";
            regUser.IsDisable    = 0;

            int disLevel = 1;

            if (website.DistributionLimitLevel > 1)
            {
                disLevel = website.DistributionLimitLevel;
            }

            StringBuilder     sbSql                  = new StringBuilder();
            UserInfo          upUserLevel1           = null; //分销上一级
            UserInfo          upUserLevel2           = null; //分销上二级
            UserInfo          upUserLevel3           = null; //分销上三级
            UserLevelConfig   levelConfig1           = null; //分销上一级规则
            UserLevelConfig   levelConfig2           = null; //分销上二级规则
            UserLevelConfig   levelConfig3           = null; //分销上三级规则
            ProjectCommission modelLevel1            = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel1Info    = new ScoreLockInfo();
            ProjectCommission modelLevel1ex1         = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel1ex1Info = new ScoreLockInfo();
            ProjectCommission modelLevel2            = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel2Info    = new ScoreLockInfo();
            ProjectCommission modelLevel3            = new ProjectCommission();
            ScoreLockInfo     scoreLockLevel3Info    = new ScoreLockInfo();

            string projectId = bll.GetGUID(TransacType.PayRegisterOrder);

            //计算分佣
            bll.ComputeTransfers(disLevel, regUser, projectId, decimal.Parse(cardModel.Ex3), websiteOwner, "优惠券注册", ref sbSql, ref upUserLevel1,
                                 ref upUserLevel2, ref upUserLevel3, ref levelConfig1, ref levelConfig2, ref levelConfig3, ref modelLevel1, ref scoreLockLevel1Info,
                                 ref modelLevel1ex1, ref scoreLockLevel1ex1Info, ref modelLevel2, ref scoreLockLevel2Info, ref modelLevel3, ref scoreLockLevel3Info,
                                 levelConfig.LevelString);

            BLLTransaction tran = new BLLTransaction();

            #region 注册会员

            if (regUser.AutoID == 0)
            {
                regUser.AutoID = Convert.ToInt32(bllUser.AddReturnID(regUser, tran));
                if (regUser.AutoID <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "注册用户出错";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            else
            {
                if (!bllUser.Update(regUser, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "注册用户出错";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            #endregion
            #region  更新优惠券状态
            myCardCoupon.UseDate = DateTime.Now;
            myCardCoupon.Status  = 1;
            if (!bllCardCoupon.Update(myCardCoupon, tran))
            {
                tran.Rollback();
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "更新优惠券状态失败";
                bll.ContextResponse(context, apiResp);
                return;
            }
            #endregion

            #region 注册账号余额明细
            //自己的消费记录
            if (bllUser.AddScoreDetail(regUser.UserID, websiteOwner, double.Parse(cardModel.Ex3),
                                       string.Format("优惠券抵扣{0}元", double.Parse(cardModel.Ex3)),
                                       "TotalAmount", double.Parse(cardModel.Ex3),
                                       "", "注册会员", "", "", double.Parse(cardModel.Ex3), 0, regUser.UserID,
                                       tran, ex3: levelConfig.LevelNumber.ToString(), ex4: levelConfig.LevelString) <= 0)
            {
                tran.Rollback();
                apiResp.msg  = "积分明细添加失败";
                apiResp.code = (int)APIErrCode.OperateFail;
                bll.ContextResponse(context, apiResp);
                return;
            }
            #endregion
            bool hasProjectCommission = false;
            #region 记录分佣信息
            if (modelLevel1.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel1Id = Convert.ToInt32(bll.AddReturnID(modelLevel1, tran));
                if (modelLevel1Id <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返利失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel1Info.ForeignkeyId2 = modelLevel1Id.ToString();
                scoreLockLevel1Info.AutoId        = Convert.ToInt32(bll.AddReturnID(scoreLockLevel1Info, tran));
                if (scoreLockLevel1Info.AutoId <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返利冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel1.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel1Info.UserId, websiteOwner, (double)scoreLockLevel1Info.Score,
                                           scoreLockLevel1Info.Memo, "TotalAmount", (double)(upUserLevel1.TotalAmount + scoreLockLevel1Info.Score),
                                           scoreLockLevel1Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel1.SourceAmount, (double)modelLevel1.DeductAmount,
                                           modelLevel1.CommissionUserId,
                                           tran, ex3: levelConfig.LevelNumber.ToString(), ex4: levelConfig.LevelString,
                                           ex5: modelLevel1.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返利明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (modelLevel1ex1.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel1ex1Id = Convert.ToInt32(bll.AddReturnID(modelLevel1ex1, tran));
                if (modelLevel1ex1Id <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返购房补助失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel1ex1Info.ForeignkeyId2 = modelLevel1ex1Id.ToString();

                scoreLockLevel1ex1Info.AutoId = Convert.ToInt32(bll.AddReturnID(scoreLockLevel1ex1Info, tran));
                if (scoreLockLevel1ex1Info.AutoId <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返购房补助冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel1ex1.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel1ex1Info.UserId, websiteOwner, (double)scoreLockLevel1ex1Info.Score,
                                           scoreLockLevel1ex1Info.Memo, "TotalAmount", (double)(upUserLevel1.TotalAmount + scoreLockLevel1ex1Info.Score),
                                           scoreLockLevel1ex1Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel1ex1.SourceAmount, (double)modelLevel1ex1.DeductAmount,
                                           modelLevel1ex1.CommissionUserId,
                                           tran, ex3: levelConfig.LevelNumber.ToString(), ex4: levelConfig.LevelString,
                                           ex5: modelLevel1ex1.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "一级返购房补助明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (modelLevel2.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel2Id = Convert.ToInt32(bll.AddReturnID(modelLevel2, tran));
                if (modelLevel2Id <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "二级返利失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel2Info.ForeignkeyId2 = modelLevel2Id.ToString();

                scoreLockLevel2Info.AutoId = Convert.ToInt32(bll.AddReturnID(scoreLockLevel2Info, tran));
                if (scoreLockLevel2Info.AutoId <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "二级返利冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel2.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel2Info.UserId, websiteOwner, (double)scoreLockLevel2Info.Score,
                                           scoreLockLevel2Info.Memo, "TotalAmount", (double)(upUserLevel2.TotalAmount + scoreLockLevel2Info.Score),
                                           scoreLockLevel2Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel2.SourceAmount, (double)modelLevel2.DeductAmount,
                                           modelLevel2.CommissionUserId,
                                           tran, ex3: levelConfig.LevelNumber.ToString(), ex4: levelConfig.LevelString,
                                           ex5: modelLevel2.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "二级返利明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (modelLevel3.Amount > 0)
            {
                hasProjectCommission = true;
                int modelLevel3Id = Convert.ToInt32(bll.AddReturnID(modelLevel3, tran));
                if (!bll.Add(modelLevel3, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "三级返利失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                scoreLockLevel3Info.ForeignkeyId2 = modelLevel3Id.ToString();
                scoreLockLevel3Info.AutoId        = Convert.ToInt32(bll.AddReturnID(scoreLockLevel3Info, tran));
                if (scoreLockLevel3Info.AutoId <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "三级返利冻结失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
                string scoreDetailEvent = modelLevel3.ProjectName.Contains("购房补助") ? "返购房补助" : "返利";
                if (bllUser.AddScoreDetail(scoreLockLevel3Info.UserId, websiteOwner, (double)scoreLockLevel3Info.Score,
                                           scoreLockLevel3Info.Memo, "TotalAmount", (double)(upUserLevel3.TotalAmount + scoreLockLevel3Info.Score),
                                           scoreLockLevel3Info.AutoId.ToString(), scoreDetailEvent, "", projectId, (double)modelLevel3.SourceAmount, (double)modelLevel3.DeductAmount,
                                           modelLevel3.CommissionUserId,
                                           tran, ex3: levelConfig.LevelNumber.ToString(), ex4: levelConfig.LevelString,
                                           ex5: modelLevel3.CommissionLevel) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "三级返利明细记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            if (hasProjectCommission)
            {
                if (BLLBase.ExecuteSql(sbSql.ToString(), tran) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = string.Format("更新分佣账面{0}出错", website.TotalAmountShowName);
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bll.ContextResponse(context, apiResp);
                    return;
                }
            }
            #endregion

            #region 记录业绩明细
            TeamPerformanceDetails perDetail = new TeamPerformanceDetails();
            perDetail.AddType           = "注册";
            perDetail.AddNote           = "注册" + levelConfig.LevelString;
            perDetail.AddTime           = DateTime.Now;
            perDetail.DistributionOwner = regUser.DistributionOwner;
            perDetail.UserId            = regUser.UserID;
            perDetail.UserName          = regUser.TrueName;
            perDetail.UserPhone         = regUser.Phone;
            perDetail.Performance       = decimal.Parse(cardModel.Ex3);
            string yearMonthString = perDetail.AddTime.ToString("yyyyMM");
            int    yearMonth       = Convert.ToInt32(yearMonthString);
            perDetail.YearMonth    = yearMonth;
            perDetail.WebsiteOwner = websiteOwner;

            if (!bllUser.Add(perDetail, tran))
            {
                tran.Rollback();
                apiResp.msg  = "记录业绩明细失败";
                apiResp.code = (int)APIErrCode.OperateFail;
                bll.ContextResponse(context, apiResp);
                return;
            }
            #endregion

            tran.Commit();

            if (hasProjectCommission)
            {
                //异步修改积分明细表
                Thread th1 = new Thread(delegate()
                {
                    //计算相关业绩
                    bll.BuildCurMonthPerformanceByUserID(websiteOwner, regUser.UserID);
                });
                th1.Start();
            }


            string msg = "";

            #region 短信发送密码
            BLLSMS bllSms    = new BLLSMS("");
            bool   smsBool   = false;
            string smsString = string.Format("恭喜您成功注册为天下华商月供宝:{1},您的初始密码为:{0}。您可关注公众号:songhetz,登录账户修改密码,并设置支付密码。", regUser.Password, levelConfig.LevelString);
            bllSms.SendSmsMisson(regUser.Phone, smsString, "", website.SmsSignature, out smsBool, out msg);
            #endregion

            if (string.IsNullOrWhiteSpace(msg))
            {
                msg = "注册成功";
            }
            apiResp.msg    = msg;
            apiResp.code   = (int)APIErrCode.IsSuccess;
            apiResp.status = true;
            apiResp.result = new
            {
                password = regUser.Password
            };
            bll.ContextResponse(context, apiResp);
        }
예제 #21
0
        public void ProcessRequest(HttpContext context)
        {
            /// <summary>
            /// 卡券BLL
            /// </summary>
            BLLJIMP.BLLCardCoupon bllCardCoupon = new BLLJIMP.BLLCardCoupon();
            /// <summary>
            /// 商城BLL
            /// </summary>
            BLLJIMP.BLLMall bllMall = new BLLJIMP.BLLMall();
            /// <summary>
            /// 用户BLL
            /// </summary>
            BLLJIMP.BLLUser bllUser = new BLLJIMP.BLLUser();
            /// <summary>
            /// 微信BLL
            /// </summary>
            BLLJIMP.BLLWeixin bllWeixin = new BLLJIMP.BLLWeixin();
            /// <summary>
            ///
            /// </summary>
            BLLJIMP.BLLStoredValueCard bllStoredValue = new BLLJIMP.BLLStoredValueCard();
            /// <summary>
            ///
            /// </summary>
            BLLJIMP.BLLWeixinCard bllWeixinCard = new BLLJIMP.BLLWeixinCard();

            string cardCouponId   = context.Request["cardcoupon_id"];    //主卡券ID
            string myCardCouponId = context.Request["my_cardcoupon_id"]; //我的卡券ID

            if (string.IsNullOrEmpty(cardCouponId))
            {
                resp.status = false;
                resp.msg    = "cardcoupon_id 参数必传";
                context.Response.Write(JsonConvert.SerializeObject(resp));
                return;
            }
            CardCoupons cardCoupon = bllCardCoupon.GetCardCouponByWXCardId(cardCouponId);

            if (cardCoupon == null)
            {
                cardCoupon = bllCardCoupon.GetCardCoupon(int.Parse(cardCouponId));
                if (cardCoupon == null)
                {
                    resp.status = false;
                    resp.msg    = "cardcoupon_id 不存在";
                    context.Response.Write(JsonConvert.SerializeObject(resp));
                    return;
                }
            }
            cardCoupon = bllCardCoupon.ConvertExpireTime(cardCoupon);

            MainCardModel model = new MainCardModel();

            model.cardcoupon_id      = cardCoupon.CardId;
            model.cardcoupon_name    = cardCoupon.Name;
            model.cardcoupon_type    = ConvertCardCouponType(cardCoupon.CardCouponType);
            model.valid_from         = cardCoupon.ValidFrom.ToString();
            model.valid_to           = cardCoupon.ValidTo.ToString();
            model.img_url            = bllMall.GetImgUrl(cardCoupon.Logo);
            model.discount           = string.IsNullOrEmpty(cardCoupon.Ex1) ? 0 : double.Parse(cardCoupon.Ex1);
            model.product_id         = string.IsNullOrEmpty(cardCoupon.Ex2) ? 0 : double.Parse(cardCoupon.Ex2);
            model.deductible_amount  = string.IsNullOrEmpty(cardCoupon.Ex3) ? 0 : double.Parse(cardCoupon.Ex3);
            model.freefreight_amount = string.IsNullOrEmpty(cardCoupon.Ex4) ? 0 : double.Parse(cardCoupon.Ex4);
            model.buckle_amount      = string.IsNullOrEmpty(cardCoupon.Ex5) ? 0 : double.Parse(cardCoupon.Ex5);
            model.buckle_sub_amount  = string.IsNullOrEmpty(cardCoupon.Ex6) ? 0 : double.Parse(cardCoupon.Ex6);
            model.max_count          = cardCoupon.MaxCount;
            model.send_count         = cardCoupon.SendCount;
            model.un_send_count      = cardCoupon.UnSendCount;
            //model.is_recivece = bllCardCoupon.IsReciveCoupon(cardCoupon.CardId, CurrentUserInfo.UserID);
            model.valid_to_timestamp  = bllCardCoupon.GetTimeStamp((DateTime)cardCoupon.ValidTo);
            model.limit_type          = cardCoupon.Ex7;
            model.product_tags        = cardCoupon.Ex8;
            model.user_get_limit_type = cardCoupon.GetLimitType;
            model.is_can_use_shop     = cardCoupon.IsCanUseShop;
            model.is_can_use_groupbuy = cardCoupon.IsCanUseGroupbuy;
            model.expire_time_type    = cardCoupon.ExpireTimeType;
            model.expire_day          = cardCoupon.ExpireDay;
            model.weixin_card_id      = cardCoupon.WeixinCardId == null ? "" : cardCoupon.WeixinCardId;
            if (!string.IsNullOrEmpty(myCardCouponId))
            {
                MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(int.Parse(myCardCouponId));
                if (myCardCoupon != null)
                {
                    UserInfo fromUserInfo = bllUser.GetUserInfo(myCardCoupon.UserId);

                    if (fromUserInfo != null)
                    {
                        model.from_user_info = new UserInfoModel();
                        model.from_user_info.head_img_url = bllUser.GetUserDispalyAvatar(fromUserInfo);
                        model.from_user_info.nick_name    = bllUser.GetUserDispalyName(fromUserInfo);
                    }

                    if (!string.IsNullOrEmpty(myCardCoupon.ToUserId))
                    {
                        model.is_donation = true;
                    }
                }
            }

            resp.status = true;
            resp.result = model;

            context.Response.Write(JsonConvert.SerializeObject(resp));
        }
예제 #22
0
        /// <summary>
        /// 赠送满送券
        /// </summary>
        public void Give(decimal totalAmount, UserInfo userInfo)
        {
            try
            {
                BLLWeixin            bllWeixin      = new BLLWeixin();
                BLLWebsiteDomainInfo bllDomain      = new BLLWebsiteDomainInfo();
                List <CardCoupons>   cardCouponList = GetList <CardCoupons>(string.Format("WebsiteOwner='{0}' And CardCouponType='MallCardCoupon_BuckleGive'", userInfo.WebsiteOwner)).OrderBy(p => p.Ex5).ToList();
                foreach (var cardCoupon in cardCouponList)
                {
                    if (totalAmount >= decimal.Parse(cardCoupon.Ex5))
                    {
                        if (cardCoupon.MaxCount > 0)
                        {
                            int sendCount = GetCount <MyCardCoupons>(string.Format(" CardID={0}", cardCoupon.CardId));
                            if (sendCount >= cardCoupon.MaxCount)
                            {
                                break;
                            }
                        }
                        //给用户发满送券
                        MyCardCoupons model = new MyCardCoupons();
                        model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), GetGUID(BLLJIMP.TransacType.CommAdd));
                        model.CardCouponType   = cardCoupon.CardCouponType;
                        model.CardId           = cardCoupon.CardId;
                        model.InsertDate       = DateTime.Now;
                        model.UserId           = userInfo.UserID;
                        model.WebSiteOwner     = userInfo.WebsiteOwner;
                        if (Add(model))
                        {
                            string title     = "您收到一张优惠券";
                            string content   = string.Format("{0}", cardCoupon.Name);
                            string redicturl = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/mycoupons#/mycoupons", bllDomain.GetWebsiteDoMain(userInfo.WebsiteOwner));
                            bllWeixin.SendTemplateMessageNotifyComm(userInfo, title, content, redicturl);
                        }


                        //给用户发满送券
                        //break;
                    }
                }


                #region New
                List <CardCoupons> cardCouponListNew = GetList <CardCoupons>(string.Format("WebsiteOwner='{0}' And FullGive!=''", userInfo.WebsiteOwner));

                foreach (var cardCoupon in cardCouponListNew)
                {
                    if (totalAmount >= decimal.Parse(cardCoupon.FullGive))
                    {
                        if (cardCoupon.MaxCount > 0)
                        {
                            int sendCount = GetCount <MyCardCoupons>(string.Format(" CardID={0}", cardCoupon.CardId));
                            if (sendCount >= cardCoupon.MaxCount)
                            {
                                break;
                            }
                        }
                        //给用户发券
                        MyCardCoupons model = new MyCardCoupons();
                        model.CardCouponNumber = string.Format("No.{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), GetGUID(BLLJIMP.TransacType.CommAdd));
                        model.CardCouponType   = cardCoupon.CardCouponType;
                        model.CardId           = cardCoupon.CardId;
                        model.InsertDate       = DateTime.Now;
                        model.UserId           = userInfo.UserID;
                        model.WebSiteOwner     = userInfo.WebsiteOwner;
                        if (Add(model))
                        {
                            string title     = "您收到一张优惠券";
                            string content   = string.Format("{0}", cardCoupon.Name);
                            string redicturl = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/mycoupons#/mycoupons", bllDomain.GetWebsiteDoMain(userInfo.WebsiteOwner));
                            bllWeixin.SendTemplateMessageNotifyComm(userInfo, title, content, redicturl);
                        }
                        else
                        {
                        }


                        //给用户发券
                        //break;
                    }
                    else
                    {
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
            }
        }
예제 #23
0
        public void ProcessRequest(HttpContext context)
        {
            string     data       = context.Request["data"];
            decimal    productFee = 0;    //商品总价格
            OrderModel orderRequestModel; //订单模型

            try
            {
                orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderModel>(data);
            }
            catch (Exception ex)
            {
                apiResp.code = 1;
                apiResp.msg  = "JSON格式错误,请检查.错误信息:" + ex.Message;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            #region 检查是否可以下单
            if (string.IsNullOrEmpty(orderRequestModel.select_time_type))
            {
                apiResp.code = 1;
                apiResp.msg  = "请选择一种时间预约方式";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            int totalHours = 0;                            //预约小时数
            if (orderRequestModel.select_time_type == "0") //直接选择开始时间结束时间方式
            {
                if (string.IsNullOrEmpty(orderRequestModel.start_time) || string.IsNullOrEmpty(orderRequestModel.stop_time))
                {
                    apiResp.code = 1;
                    apiResp.msg  = "请选择开始时间与结束时间";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (DateTime.Parse(orderRequestModel.start_time) <= DateTime.Now)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "开始时间需要晚于当前时间";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (DateTime.Parse(orderRequestModel.stop_time) <= DateTime.Parse(orderRequestModel.start_time))
                {
                    apiResp.code = 1;
                    apiResp.msg  = "结束时间需要晚于开始时间";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }

                totalHours = (int)(DateTime.Parse(orderRequestModel.stop_time) - DateTime.Parse(orderRequestModel.start_time)).TotalHours;
            }
            else if (orderRequestModel.select_time_type == "1")//选择某一天的多个时间段的方式
            {
                if (string.IsNullOrEmpty(orderRequestModel.date) || string.IsNullOrEmpty(orderRequestModel.date_time_ranges))
                {
                    apiResp.code = 1;
                    apiResp.msg  = "请选择预约时间段";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                if (DateTime.Parse(orderRequestModel.date) <= DateTime.Now)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "开始时间需要晚于当前时间";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }
                totalHours = orderRequestModel.date_time_ranges.Split(';').Count();
            }


            if (!Check(orderRequestModel))
            {
                apiResp.code = 1;
                apiResp.msg  = "您所选的时间段已经被占用,请选择别的时间段";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            #endregion



            WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表
            orderInfo.OrderID        = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
            orderInfo.Consignee      = orderRequestModel.receiver_name;
            orderInfo.InsertDate     = DateTime.Now;
            orderInfo.OrderUserID    = CurrentUserInfo.UserID;
            orderInfo.Phone          = orderRequestModel.receiver_phone;
            orderInfo.WebsiteOwner   = bllMall.WebsiteOwner;
            orderInfo.Transport_Fee  = 0;
            orderInfo.OrderMemo      = orderRequestModel.buyer_memo;
            orderInfo.MyCouponCardId = orderRequestModel.cardcoupon_id.ToString();
            orderInfo.UseScore       = orderRequestModel.use_score;
            orderInfo.Status         = "待付款";
            orderInfo.OrderType      = 3;
            orderInfo.Ex3            = orderRequestModel.select_time_type;
            orderInfo.Ex4            = orderRequestModel.start_time;
            orderInfo.Ex5            = orderRequestModel.stop_time;
            orderInfo.Ex6            = orderRequestModel.date;
            orderInfo.Ex7            = orderRequestModel.date_time_ranges;
            orderInfo.LastUpdateTime = DateTime.Now;
            if (!string.IsNullOrEmpty(orderRequestModel.sale_id))//分销ID
            {
                long saleId = 0;
                if (long.TryParse(orderRequestModel.sale_id, out saleId))
                {
                    orderInfo.SellerId = saleId;
                }
            }
            if (orderRequestModel.pay_type == "WEIXIN")//微信支付
            {
                orderInfo.PaymentType = 2;
            }
            else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
            {
                orderInfo.PaymentType = 1;
            }

            #region 格式检查
            if (string.IsNullOrEmpty(orderInfo.Consignee))
            {
                apiResp.code = 1;
                apiResp.msg  = "收货人姓名不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (string.IsNullOrEmpty(orderRequestModel.receiver_phone))
            {
                apiResp.code = 1;
                apiResp.msg  = "联系手机号不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }


            if (orderRequestModel.skus == null)
            {
                apiResp.code = 1;
                apiResp.msg  = "skus 参数不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }

            //相关检查
            #endregion

            #region 商品检查 订单详情生成
            ///订单详情
            List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情
            #region 购买的商品
            List <WXMallProductInfo> productList = new List <WXMallProductInfo>();
            foreach (var sku in orderRequestModel.skus)
            {
                ProductSku        productSku  = bllMall.GetProductSku(sku.sku_id);
                WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                productList.Add(productInfo);
            }
            productList = productList.Distinct().ToList();
            #endregion
            #region 检查优惠券是否可用
            if (orderRequestModel.cardcoupon_id > 0)
            {
                var mycardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                if (mycardCoupon == null)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }
                var cardCoupon = bllCardCoupon.GetCardCoupon(mycardCoupon.CardId);
                if (cardCoupon == null)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "无效的优惠券";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }
                #region 需要购买指定商品
                if ((!string.IsNullOrEmpty(cardCoupon.Ex2)) && (cardCoupon.Ex2 != "0"))
                {
                    if (productList.Count(p => p.PID == cardCoupon.Ex2) == 0)
                    {
                        var productInfo = bllMall.GetProduct(cardCoupon.Ex2);
                        apiResp.code = 1;
                        apiResp.msg  = string.Format("此优惠券需要购买{0}时才可以使用", productInfo.PName);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                    }
                }


                #endregion

                #region 需要购买指定标签商品
                if (!string.IsNullOrEmpty(cardCoupon.Ex8))
                {
                    if (productList.Where(p => p.Tags == "" || p.Tags == null).Count() == productList.Count)//全部商品都没有标签
                    {
                        apiResp.code = 1;
                        apiResp.msg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                    }
                    bool checkResult = false;
                    foreach (var product in productList)
                    {
                        if (!string.IsNullOrEmpty(product.Tags))
                        {
                            foreach (string tag in product.Tags.Split(','))
                            {
                                if (cardCoupon.Ex8.Contains(tag))
                                {
                                    checkResult = true;
                                    break;
                                }
                            }
                        }
                    }
                    if (!checkResult)
                    {
                        apiResp.code = 1;
                        apiResp.msg  = string.Format("使用此优惠券需要购买标签为{0}的商品", cardCoupon.Ex8);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                    }
                }
                #endregion
            }
            #endregion

            foreach (var sku in orderRequestModel.skus)
            {
                //先检查库存
                ProductSku productSku = bllMall.GetProductSku(sku.sku_id);
                if (productSku == null)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "SKU不存在";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }
                WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                if (productInfo.IsOnSale == "0")
                {
                    apiResp.code = 1;
                    apiResp.msg  = string.Format("{0}已下架", productInfo.PName);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                    return;
                }

                WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
                detailModel.OrderID     = orderInfo.OrderID;
                detailModel.PID         = productInfo.PID;
                detailModel.TotalCount  = sku.count;
                detailModel.OrderPrice  = bllMall.GetSkuPrice(productSku) * totalHours;
                detailModel.ProductName = productInfo.PName;
                detailModel.SkuId       = productSku.SkuId;
                detailList.Add(detailModel);
            }
            #endregion
            productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;   //商品费用
            orderInfo.Transport_Fee = 0;
            orderInfo.Product_Fee   = productFee;
            orderInfo.TotalAmount   = orderInfo.Product_Fee + orderInfo.Transport_Fee;
            #region 优惠券计算
            decimal discountAmount   = 0;//优惠金额
            bool    canUseCardCoupon = false;
            string  msg = "";
            if (orderRequestModel.cardcoupon_id > 0)//有优惠券
            {
                discountAmount = bllMall.CalcDiscountAmount(orderRequestModel.cardcoupon_id.ToString(), data, CurrentUserInfo.UserID, out canUseCardCoupon, out msg);
                if (!canUseCardCoupon)
                {
                    apiResp.code = 1;
                    apiResp.msg  = msg;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }
                if (discountAmount > productFee)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "优惠券可优惠金额超过了订单总金额";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }
                orderInfo.CardcouponDisAmount = discountAmount;
            }
            #endregion

            #region 积分计算
            decimal scoreExchangeAmount = 0;///积分抵扣的金额
            //积分计算
            if (orderRequestModel.use_score > 0)
            {
                if (CurrentUserInfo.TotalScore < orderRequestModel.use_score)
                {
                    apiResp.code = 1;
                    apiResp.msg  = "积分不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }
                ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
            }



            //积分计算
            #endregion

            #region 合计计算

            orderInfo.TotalAmount  -= discountAmount;        //优惠券优惠金额
            orderInfo.TotalAmount  -= scoreExchangeAmount;   //积分优惠金额
            orderInfo.PayableAmount = orderInfo.TotalAmount; //应付金额
            if ((productFee - discountAmount - scoreExchangeAmount) < orderInfo.TotalAmount)
            {
                apiResp.code = 1;
                apiResp.msg  = "积分兑换金额不能大于订单总金额,请减少积分兑换";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            #endregion
            if (orderInfo.TotalAmount < 0)
            {
                apiResp.code = 1;
                apiResp.msg  = "付款金额不能小于0";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            if (orderInfo.TotalAmount == 0)
            {
                orderInfo.PaymentStatus = 1;
                orderInfo.PayTime       = DateTime.Now;
                orderInfo.Status        = "待发货";
            }
            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                if (!this.bllMall.Add(orderInfo, tran))
                {
                    tran.Rollback();
                    apiResp.code = 1;
                    apiResp.msg  = "提交失败";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                }

                #region 更新优惠券使用状态
                //优惠券
                if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用
                {
                    MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, CurrentUserInfo.UserID);
                    myCardCoupon.UseDate = DateTime.Now;
                    myCardCoupon.Status  = 1;
                    if (!bllCardCoupon.Update(myCardCoupon, tran))
                    {
                        tran.Rollback();
                        apiResp.code = 1;
                        apiResp.msg  = "更新优惠券状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                    }
                }
                //优惠券
                #endregion

                #region 积分抵扣
                //积分扣除
                if (orderRequestModel.use_score > 0)
                {
                    CurrentUserInfo.TotalScore -= orderRequestModel.use_score;
                    if (bllMall.Update(CurrentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", CurrentUserInfo.AutoID)) < 0)
                    {
                        tran.Rollback();
                        apiResp.code = 1;
                        apiResp.msg  = "更新用户积分失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                    }
                    //积分记录
                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime   = DateTime.Now;
                    scoreRecord.Score     = -orderRequestModel.use_score;
                    scoreRecord.ScoreType = "OrderSubmit";
                    scoreRecord.UserID    = CurrentUserInfo.UserID;
                    scoreRecord.AddNote   = "预约使用积分";
                    if (!bllMall.Add(scoreRecord))
                    {
                        tran.Rollback();
                        apiResp.code = 1;
                        apiResp.msg  = "插入积分记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    //积分记录
                }

                //积分扣除
                #endregion

                #region 插入订单详情页
                foreach (var item in detailList)
                {
                    ProductSku        productSku  = bllMall.GetProductSku((int)(item.SkuId));
                    WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    if (!this.bllMall.Add(item, tran))
                    {
                        tran.Rollback();
                        apiResp.code = 1;
                        apiResp.msg  = "提交失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return;
                    }
                }
                #endregion

                tran.Commit();//提交订单事务
            }
            catch (Exception ex)
            {
                //回滚事物
                tran.Rollback();
                apiResp.code = 1;
                apiResp.msg  = "提交订单失败,内部错误";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            apiResp.status = true;
            apiResp.msg    = "ok";
            apiResp.result = new
            {
                order_id = orderInfo.OrderID
            };
            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
        }
예제 #24
0
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            currentUserInfo = bllUser.GetCurrentUserInfo();
            string            data              = context.Request["data"];
            decimal           productFee        = 0;                       //商品总价格 不包含邮费
            OrderRequestModel orderRequestModel = new OrderRequestModel(); //订单模型

            try
            {
                orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderRequestModel>(data);
            }
            catch (Exception ex)
            {
                resp.errcode = 1;
                resp.errmsg  = "JSON格式错误,请检查。错误信息:" + ex.Message;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
            }
            WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表

            orderInfo.InsertDate     = DateTime.Now;
            orderInfo.OrderUserID    = currentUserInfo.UserID;
            orderInfo.WebsiteOwner   = bllMall.WebsiteOwner;
            orderInfo.Transport_Fee  = 0;
            orderInfo.OrderID        = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
            orderInfo.OrderMemo      = orderRequestModel.buyer_memo;
            orderInfo.MyCouponCardId = orderRequestModel.cardcoupon_id.ToString();
            orderInfo.UseScore       = orderRequestModel.use_score;
            orderInfo.Status         = "待付款";
            orderInfo.OrderType      = 1;
            if (orderRequestModel.pay_type == "WEIXIN")//微信支付
            {
                orderInfo.PaymentType = 2;
            }
            else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
            {
                orderInfo.PaymentType = 1;
            }

            #region 格式检查
            //相关检查
            if (orderRequestModel.skus == null)
            {
                resp.errcode = 1;
                resp.errmsg  = "参数skus 不能为空";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            //相关检查
            #endregion


            #region 商品检查 订单详情生成
            ///订单详情
            List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情
            orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList();
            foreach (var sku in orderRequestModel.skus)
            {
                //先检查库存
                ProductSku productSku = bllMall.GetProductSku(sku.sku_id);
                if (productSku == null)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "SKU不存在";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                if (productInfo.IsOnSale == "0")
                {
                    resp.errcode = 1;
                    resp.errmsg  = string.Format("{0}已下架", productInfo.PName);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (bllMall.GetSkuCount(productSku) < sku.count)
                {
                    resp.errcode = 1;
                    resp.errmsg  = string.Format("{0}{1}库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.Stock);
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (bllMall.IsPromotionTime(productSku))
                {
                    if (sku.count > productSku.PromotionStock)
                    {
                        resp.errcode = 1;
                        resp.errmsg  = string.Format("{0}{1}特卖库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.PromotionStock);
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
                detailModel.OrderID     = orderInfo.OrderID;
                detailModel.PID         = productInfo.PID;
                detailModel.TotalCount  = sku.count;
                detailModel.OrderPrice  = bllMall.GetSkuPrice(productSku);
                detailModel.ProductName = productInfo.PName;
                detailModel.SkuId       = productSku.SkuId;
                detailModel.SkuShowProp = bllMall.GetProductShowProperties(productSku.SkuId);
                detailList.Add(detailModel);
            }
            #endregion

            productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;//商品费用

            //物流费用
            #region 运费计算
            FreightModel freightModel = new FreightModel();
            freightModel.skus = orderRequestModel.skus;
            decimal freight    = 0;//运费
            string  freightMsg = "";
            if (!bllMall.CalcFreight(freightModel, out freight, out freightMsg))
            {
                resp.errcode = 1;
                resp.errmsg  = freightMsg;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            orderInfo.Transport_Fee = freight;
            #endregion
            #region 优惠券计算
            decimal discountAmount   = 0;//优惠金额
            bool    canUseCardCoupon = false;
            string  msg = "";
            if (orderRequestModel.cardcoupon_id > 0)//有优惠券
            {
                discountAmount = bllMall.CalcDiscountAmount(orderRequestModel.cardcoupon_id.ToString(), data, currentUserInfo.UserID, out canUseCardCoupon, out msg);
                if (!canUseCardCoupon)
                {
                    resp.errcode = 1;
                    resp.errmsg  = msg;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (discountAmount > productFee + orderInfo.Transport_Fee)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "优惠券可优惠金额超过了订单总金额";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
            }
            //优惠券计算
            #endregion


            #region 积分计算
            decimal scoreExchangeAmount = 0;///积分抵扣的金额
            //积分计算
            if (orderRequestModel.use_score > 0)
            {
                if (currentUserInfo.TotalScore < orderRequestModel.use_score)
                {
                    resp.errcode = 1;
                    resp.errmsg  = "积分不足";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
            }
            #region 驿氪积分同步



            #endregion


            //积分计算
            #endregion


            //合计计算
            orderInfo.Product_Fee   = productFee;
            orderInfo.TotalAmount   = orderInfo.Product_Fee + orderInfo.Transport_Fee;
            orderInfo.TotalAmount  -= discountAmount;                  //优惠券优惠金额
            orderInfo.TotalAmount  -= scoreExchangeAmount;             //积分优惠金额
            orderInfo.PayableAmount = orderInfo.TotalAmount - freight; //应付金额
            if ((productFee + orderInfo.Transport_Fee - discountAmount - scoreExchangeAmount) < orderInfo.TotalAmount)
            {
                resp.errcode = 1;
                resp.errmsg  = "积分兑换金额不能大于订单总金额,请减少积分兑换";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }



            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                if (!this.bllMall.Add(orderInfo, tran))
                {
                    tran.Rollback();
                    resp.errcode = 1;
                    resp.errmsg  = "提交失败";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                #region 更新优惠券使用状态
                //优惠券
                if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用
                {
                    MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, currentUserInfo.UserID);
                    myCardCoupon.UseDate = DateTime.Now;
                    myCardCoupon.Status  = 1;
                    if (!bllCardCoupon.Update(myCardCoupon, tran))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "更新优惠券状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                //优惠券
                #endregion

                #region 积分抵扣
                //积分扣除
                if (orderRequestModel.use_score > 0)
                {
                    currentUserInfo.TotalScore -= orderRequestModel.use_score;
                    if (

                        bllMall.Update(currentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", currentUserInfo.AutoID)) < 0)
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "更新用户积分失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    //积分记录
                    WXMallScoreRecord scoreRecord = new WXMallScoreRecord();
                    scoreRecord.InsertDate   = DateTime.Now;
                    scoreRecord.OrderID      = orderInfo.OrderID;
                    scoreRecord.Score        = orderRequestModel.use_score;
                    scoreRecord.Type         = 1;
                    scoreRecord.UserId       = currentUserInfo.UserID;
                    scoreRecord.WebsiteOwner = bllMall.WebsiteOwner;
                    scoreRecord.Remark       = "积分抵扣";
                    if (!bllMall.Add(scoreRecord))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "插入积分记录失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    //积分记录
                }

                //积分扣除
                #endregion

                #region 插入订单详情页及更新库存
                foreach (var item in detailList)
                {
                    ProductSku        productSku  = bllMall.GetProductSku((int)(item.SkuId));
                    WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    if (!this.bllMall.Add(item, tran))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "提交失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                    //更新 SKU库存
                    productSku.Stock -= item.TotalCount;
                    if (bllMall.IsPromotionTime(productSku))
                    {
                        productSku.PromotionStock -= item.TotalCount;
                    }
                    if (!bllMall.Update(productSku, tran))
                    {
                        tran.Rollback();
                        resp.errcode = 1;
                        resp.errmsg  = "更新SKU失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }
                }
                #endregion
                tran.Commit();//提交订单事务
            }
            catch (Exception ex)
            {
                //回滚事物
                tran.Rollback();
                resp.errcode = 1;
                resp.errmsg  = ex.Message;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(new
            {
                errcode  = 0,
                errmsg   = "ok",
                order_id = orderInfo.OrderID
            }));
        }