示例#1
0
        public void ProcessRequest(HttpContext context)
        {
            var websiteInfo = bllUser.GetWebsiteInfoModelFromDataBase();

            string ids = context.Request["ids"];

            if (string.IsNullOrEmpty(ids))
            {
                apiResp.msg  = "ids为必填参数,请检查";
                apiResp.code = (int)BLLJIMP.Enums.APIErrCode.IsNotFound;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                return;
            }
            string[] strIds = ids.Split(',');
            for (int i = 0; i < strIds.Length; i++)
            {
                UserInfo userModel = bllUser.GetUserInfoByAutoID(int.Parse(strIds[i]));
                if (websiteInfo.IsUnionHongware == 1)
                {
                    Open.HongWareSDK.Client hongWareClient = new Open.HongWareSDK.Client(websiteInfo.WebsiteOwner);
                    var memberInfo = hongWareClient.GetMemberInfo(userModel.WXOpenId);
                    if (memberInfo.member == null)
                    {
                        apiResp.msg = "宏巍会员不存在";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                    if (!hongWareClient.UpdateMemberScore(memberInfo.member.mobile, userModel.WXOpenId, -memberInfo.member.point))
                    {
                        apiResp.msg = "清空宏巍会员积分失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
                        return;
                    }
                }

                if (userModel.TotalScore == 0)
                {
                    continue;
                }
                double score = userModel.TotalScore;
                bllUser.Update(new UserInfo(), string.Format(" TotalScore=0"), string.Format("  AutoId={0} ", userModel.AutoID));

                UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                scoreRecord.UserID       = userModel.UserID;
                scoreRecord.AddTime      = DateTime.Now;
                scoreRecord.TotalScore   = 0;
                scoreRecord.Score        = -score;
                scoreRecord.ScoreType    = "AdminSubmit";
                scoreRecord.AddNote      = "积分清零";
                scoreRecord.RelationID   = bllUser.GetCurrUserID();
                scoreRecord.WebSiteOwner = bllUser.WebsiteOwner;
                bllUser.Add(scoreRecord);
            }
            apiResp.msg    = "操作完成";
            apiResp.status = true;
            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp));
        }
示例#2
0
        /// <summary>
        /// 手动添加报名数据
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private string AddActivityData(HttpContext context)
        {
            //接收到的实体
            BLLJIMP.Model.ActivityDataInfo reqModel = bllActivity.ConvertRequestToModel <BLLJIMP.Model.ActivityDataInfo>(new BLLJIMP.Model.ActivityDataInfo());

            string activityId           = context.Request["ActivityID"];
            var    newActivityUId       = 1001;
            var    lastActivityDataInfo = bllActivity.Get <ActivityDataInfo>(string.Format("ActivityID='{0}' order by UID DESC", activityId));

            if (lastActivityDataInfo != null)
            {
                newActivityUId = lastActivityDataInfo.UID + 1;
            }
            reqModel.ActivityID   = activityId;
            reqModel.UID          = newActivityUId;
            reqModel.InsertDate   = DateTime.Now;
            reqModel.WebsiteOwner = bllActivity.WebsiteOwner;

            #region OLD
            //BLLJIMP.Model.ActivityDataInfo Model = new ActivityDataInfo();
            //Model.UserId = context.Request["UserId"];
            //Model.ActivityID = ActivityID;
            //Model.UID = NewActivityUID;
            //Model.InsertDate = DateTime.Now;
            //Model.Name = GetPostParm("Name");
            //Model.Phone = GetPostParm("Phone");
            //Model.K1 = GetPostParm("K1");
            //Model.K2 = GetPostParm("K2");
            //Model.K3 = GetPostParm("K3");
            //Model.K4 = GetPostParm("K4");
            //Model.K5 = GetPostParm("K5");
            //Model.K6 = GetPostParm("K6");
            //Model.K7 = GetPostParm("K7");
            //Model.K8 = GetPostParm("K8");
            //Model.K9 = GetPostParm("K9");
            //Model.K10 = GetPostParm("K10");
            //Model.K11 = GetPostParm("K11");
            //Model.K12 = GetPostParm("K12");
            //Model.K13 = GetPostParm("K13");
            //Model.K14 = GetPostParm("K14");
            //Model.K15 = GetPostParm("K15");
            //Model.K16 = GetPostParm("K16");
            //Model.K17 = GetPostParm("K17");
            //Model.K18 = GetPostParm("K18");
            //Model.K19 = GetPostParm("K19");
            //Model.K20 = GetPostParm("K20");

            //Model.K21 = GetPostParm("K21");
            //Model.K22 = GetPostParm("K22");
            //Model.K23 = GetPostParm("K23");
            //Model.K24 = GetPostParm("K24");
            //Model.K25 = GetPostParm("K25");
            //Model.K26 = GetPostParm("K26");
            //Model.K27 = GetPostParm("K27");
            //Model.K28 = GetPostParm("K28");
            //Model.K29 = GetPostParm("K29");
            //Model.K30 = GetPostParm("K30");

            //Model.K31 = GetPostParm("K31");
            //Model.K32 = GetPostParm("K32");
            //Model.K33 = GetPostParm("K33");
            //Model.K34 = GetPostParm("K34");
            //Model.K35 = GetPostParm("K35");
            //Model.K36 = GetPostParm("K36");
            //Model.K37 = GetPostParm("K37");
            //Model.K38 = GetPostParm("K38");
            //Model.K39 = GetPostParm("K39");
            //Model.K40 = GetPostParm("K40");

            //Model.K41 = GetPostParm("K41");
            //Model.K42 = GetPostParm("K42");
            //Model.K43 = GetPostParm("K43");
            //Model.K44 = GetPostParm("K44");
            //Model.K45 = GetPostParm("K45");
            //Model.K46 = GetPostParm("K46");
            //Model.K47 = GetPostParm("K47");
            //Model.K48 = GetPostParm("K48");
            //Model.K49 = GetPostParm("K49");
            //Model.K50 = GetPostParm("K50");

            //Model.K51 = GetPostParm("K51");
            //Model.K52 = GetPostParm("K52");
            //Model.K53 = GetPostParm("K53");
            //Model.K54 = GetPostParm("K54");
            //Model.K55 = GetPostParm("K55");
            //Model.K56 = GetPostParm("K56");
            //Model.K57 = GetPostParm("K57");
            //Model.K58 = GetPostParm("K58");
            //Model.K59 = GetPostParm("K59");
            //Model.K60 = GetPostParm("K60");
            #endregion

            UserInfo userInfo = bllUser.GetUserInfo(reqModel.UserId);
            if (!string.IsNullOrEmpty(reqModel.UserId))
            {
                if (userInfo == null)
                {
                    resp.Msg = "用户不存在,请检查";
                    return(Common.JSONHelper.ObjectToJson(resp));
                }
                else
                {
                    #region 自动补充信息
                    reqModel.WeixinOpenID = userInfo.WXOpenId;
                    reqModel.UserId       = userInfo.UserID;
                    if (!string.IsNullOrEmpty(userInfo.TrueName))
                    {
                        reqModel.Name = userInfo.TrueName;
                    }
                    if (!string.IsNullOrEmpty(userInfo.Phone))
                    {
                        reqModel.Phone = userInfo.Phone;
                    }
                    var  fieldMappingList = bllActivity.GetActivityFieldMappingList(reqModel.ActivityID);
                    Type type             = reqModel.GetType();
                    if (!string.IsNullOrEmpty(userInfo.Company))
                    {
                        if (fieldMappingList.Where(p => p.MappingName.Contains("公司")).Count() > 0)
                        {
                            PropertyInfo propertyInfo = type.GetProperty("K" + fieldMappingList.Where(p => p.MappingName.Contains("公司")).First().ExFieldIndex.ToString());

                            propertyInfo.SetValue(reqModel, userInfo.Company, null);
                        }
                    }
                    if (!string.IsNullOrEmpty(userInfo.Postion))
                    {
                        if (fieldMappingList.Where(p => p.MappingName.Contains("职位")).Count() > 0)
                        {
                            PropertyInfo propertyInfo = type.GetProperty("K" + fieldMappingList.Where(p => p.MappingName.Contains("职位")).First().ExFieldIndex.ToString());

                            propertyInfo.SetValue(reqModel, userInfo.Postion, null);
                        }
                    }
                    if (!string.IsNullOrEmpty(userInfo.Email))
                    {
                        if (fieldMappingList.Where(p => p.MappingName.Contains("邮箱")).Count() > 0)
                        {
                            PropertyInfo propertyInfo = type.GetProperty("K" + fieldMappingList.Where(p => p.MappingName.Contains("邮箱")).First().ExFieldIndex.ToString());

                            propertyInfo.SetValue(reqModel, userInfo.Email, null);
                        }
                    }



                    #endregion
                }
            }
            if (string.IsNullOrEmpty(reqModel.Name))
            {
                resp.Msg = "该用户没有填写姓名,请填写姓名";
                return(Common.JSONHelper.ObjectToJson(resp));
            }
            if (string.IsNullOrEmpty(reqModel.Phone))
            {
                resp.Msg = "该用户没有填写手机号,请填写手机号";
                return(Common.JSONHelper.ObjectToJson(resp));
            }
            if (bllActivity.Add(reqModel))
            {
                resp.Status = 1;
                #region 扣积分
                JuActivityInfo juActivityInfo = bllJuActivity.GetJuActivityByActivityID(activityId);
                if ((juActivityInfo != null) && (juActivityInfo.ActivityIntegral > 0))
                {
                    if (userInfo != null)
                    {
                        //userInfo.TotalScore -= juActivityInfo.ActivityIntegral;
                        if (bllUser.Update(userInfo, string.Format(" TotalScore-={0}", juActivityInfo.ActivityIntegral), string.Format(" AutoID={0}", userInfo.AutoID)) > 0)
                        {
                            ////积分记录
                            //BLLJIMP.Model.WBHScoreRecord record = new BLLJIMP.Model.WBHScoreRecord()
                            //{
                            //    InsertDate = DateTime.Now,
                            //    ScoreNum = "-" + juActivityInfo.ActivityIntegral.ToString(),
                            //    WebsiteOwner = bllUser.WebsiteOwner,
                            //    UserId = reqModel.UserId,
                            //    NameStr = "参加" + juActivityInfo.ActivityName,
                            //    Nums = "b55",
                            //    RecordType = "1",
                            //};
                            UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                            scoreRecord.AddTime      = DateTime.Now;
                            scoreRecord.Score        = juActivityInfo.ActivityIntegral;
                            scoreRecord.ScoreType    = "ActivityUse";
                            scoreRecord.UserID       = userInfo.UserID;
                            scoreRecord.AddNote      = "参加" + juActivityInfo.ActivityName + "使用" + juActivityInfo.ActivityIntegral + "积分";
                            scoreRecord.WebSiteOwner = userInfo.WebsiteOwner;
                            //bllUser.Add(record);
                            bllUser.Add(scoreRecord);
                        }
                        else
                        {
                            resp.Msg = "更新用户积分失败";
                            return(Common.JSONHelper.ObjectToJson(resp));
                        }
                    }
                }
                #endregion
            }
            else
            {
                resp.Msg = "添加失败";
                return(Common.JSONHelper.ObjectToJson(resp));
            }
            return(Common.JSONHelper.ObjectToJson(resp));
        }
示例#3
0
        /// <summary>
        /// 积分事件触发
        /// </summary>
        /// <param name="websiteOwner">站点所有者</param>
        /// <param name="openId">openId</param>
        /// <param name="value">原始值</param>
        /// <param name="scoreEvent">事件名称</param>
        /// <param name="remark">备注</param>
        /// <param name="msg">提示信息</param>
        /// <param name="addScore">增加积分</param>
        /// <param name="showName">显示名称</param>
        /// <returns></returns>
        public bool EventUpdate(string websiteOwner, string openId, decimal value, string scoreEvent, string remark, out string msg, out int addScore, string showName = "", string serialNumber = "")
        {
            int score = 0;//最终添加的积分

            addScore = 0;
            msg      = "";//返回消息
            BLLApiLog       bllApiLog       = new BLLApiLog();
            BLLScoreDefine  bllScoreDefine  = new BLLScoreDefine();
            ScoreDefineInfo scoreDefineInfo = bllScoreDefine.GetScoreDefineInfoByScoreEvent(scoreEvent, WebsiteOwner);

            if (scoreDefineInfo == null)
            {
                msg = "积分规则不存在,请检查";
                return(false);
            }
            if (scoreDefineInfo.IsHide == 1)
            {
                msg = "积分规则已停用";
                return(false);
            }
            UserInfo userInfo = bllUser.GetUserInfoByOpenId(openId);

            if (userInfo == null && (websiteOwner == "dongwu" || websiteOwner == "dongwudev"))
            {
                userInfo = bllUser.CreateNewUser(websiteOwner, openId, showName);
            }
            if (userInfo == null)
            {
                msg = "openid不存在,请检查";
                return(false);
            }
            List <ScoreDefineInfoExt> scoreDefineEx = bllScoreDefine.GetScoreDefineExList(scoreDefineInfo.ScoreId);

            //优先级: 扩展->基本比例-一般
            if (scoreDefineEx != null && scoreDefineEx.Count > 0)
            {
                DateTime dtNow = DateTime.Now;
                var      item  = scoreDefineEx.FirstOrDefault(p => p.BeginTime <= DateTime.Now && p.EndTime >= DateTime.Now);
                if (item != null)
                {
                    //score = (double)Math.Round(value / (item.RateValue / item.RateScore), 2);
                    score = (int)Math.Ceiling(value / (item.RateValue / item.RateScore));
                }
            }
            if (score == 0)
            {
                if (scoreDefineInfo.BaseRateScore > 0 && scoreDefineInfo.BaseRateValue > 0)//基础比例
                {
                    //score = (double)Math.Round(value / (scoreDefineInfo.BaseRateValue / scoreDefineInfo.BaseRateScore), 2);
                    score = (int)Math.Ceiling(value / (scoreDefineInfo.BaseRateValue / scoreDefineInfo.BaseRateScore));
                }
            }
            if (score == 0)
            {
                score = (int)scoreDefineInfo.Score;
            }

            //if (score == 0)
            //{
            //    msg = "增加积分不能为0";
            //    return false;
            //}
            if (scoreDefineInfo.DayLimit > 0)
            {
                double nTotal = bllUser.GetUserDayScoreSUMEvent(userInfo.UserID, scoreEvent, true);
                if (scoreDefineInfo.DayLimit < nTotal + score)
                {
                    msg = scoreDefineInfo.ScoreEvent + "每日所得积分超限制";
                    return(false);
                }
            }
            if (scoreDefineInfo.TotalLimit > 0)
            {
                double nTotal = bllUser.GetUserDayScoreSUMEvent(userInfo.UserID, scoreEvent, false);
                if (scoreDefineInfo.TotalLimit < nTotal + score)
                {
                    msg = scoreDefineInfo.ScoreEvent + "所得总积分超限制";
                    return(false);
                }
            }

            //积分记录
            UserScoreDetailsInfo scoreModel = new UserScoreDetailsInfo();

            scoreModel.AddNote      = !string.IsNullOrEmpty(remark) ? remark : scoreDefineInfo.Description;
            scoreModel.AddTime      = DateTime.Now;
            scoreModel.Score        = score;
            scoreModel.UserID       = userInfo.UserID;
            scoreModel.OpenId       = userInfo.WXOpenId;
            scoreModel.ScoreType    = scoreDefineInfo.ScoreType;
            scoreModel.WebSiteOwner = WebsiteOwner;
            scoreModel.ScoreEvent   = scoreEvent;
            scoreModel.SerialNumber = serialNumber;
            BLLTransaction tran = new BLLTransaction();

            try
            {
                int historyTotalScore = 0;
                if (score > 0)
                {
                    historyTotalScore = score;
                }
                string sql = string.Format("TotalScore+={0},HistoryTotalScore+={1}", score, historyTotalScore);
                if (!string.IsNullOrEmpty(showName))
                {
                    sql += string.Format(",TrueName='{0}'", showName);
                }
                if (Update(userInfo, sql, string.Format(" AutoId={0}", userInfo.AutoID), tran) == 1 && Add(scoreModel, tran))
                {
                    #region 日志记录
                    if (!bllApiLog.Add(userInfo.WebsiteOwner, Enums.EnumApiModule.ScoreEvent, string.Format("积分事件,事件名称:{0}原始值{1}积分值:{2}", scoreDefineInfo.ScoreEvent, value, score), userInfo.WXOpenId, userInfo.UserID, serialNumber))
                    {
                        msg = "日志记录失败";
                        tran.Rollback();
                        return(false);
                    }

                    #endregion
                    tran.Commit();
                    addScore = score;
                    return(true);
                }
                else
                {
                    msg = "操作失败";
                    tran.Rollback();
                    return(false);
                }
            }
            catch (Exception ex)
            {
                msg = ex.ToString();
                tran.Rollback();
                return(false);
            }
        }
示例#4
0
        public void ProcessRequest(HttpContext context)
        {
            int    score      = Convert.ToInt32(context.Request["score"]);
            string moduleName = "积分";

            if (!string.IsNullOrWhiteSpace(context.Request["module_name"]))
            {
                moduleName = context.Request["module_name"];
            }
            string websiteOwner = bllKeyValueData.WebsiteOwner;

            if (score <= 0)
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = moduleName + "不能为0";
                bllKeyValueData.ContextResponse(context, apiResp);
                return;
            }
            string rechargeValue        = bllKeyValueData.GetDataVaule("Recharge", "100", websiteOwner);
            string minScore             = bllKeyValueData.GetDataVaule("MinScore", "1", websiteOwner);
            string minWithdrawCashScore = bllKeyValueData.GetDataVaule("MinWithdrawCashScore", "1", websiteOwner);

            if (score < Convert.ToDecimal(minWithdrawCashScore))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "提现数额不能少于" + minWithdrawCashScore + moduleName;
                bllKeyValueData.ContextResponse(context, apiResp);
                return;
            }

            double curTotalScore = CurrentUserInfo.TotalScore;
            double sTotalScore   = curTotalScore - score;
            double nScore        = Convert.ToDouble(minScore) + score;

            if (sTotalScore < Convert.ToDouble(minScore))
            {
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = moduleName + "不足";
                bllKeyValueData.ContextResponse(context, apiResp);
                return;
            }
            decimal rechargeFee = Convert.ToDecimal(rechargeValue);
            decimal money       = rechargeFee / 100 * score;


            WithdrawCash model = new WithdrawCash();

            model.Amount           = money;
            model.UserId           = CurrentUserInfo.UserID;
            model.TrueName         = CurrentUserInfo.TrueName;
            model.WebSiteOwner     = websiteOwner;
            model.WithdrawCashType = "ScoreOnLine";
            model.TransfersType    = 1;
            model.Status           = 0;
            model.Score            = score;
            model.RealAmount       = money;
            model.ServerFee        = 0;
            model.Phone            = CurrentUserInfo.Phone;
            model.LastUpdateDate   = DateTime.Now;
            model.InsertDate       = DateTime.Now;
            model.IsPublic         = 2;

            //积分明细
            UserScoreDetailsInfo scoreModel = new UserScoreDetailsInfo();

            scoreModel.AddNote      = string.Format("申请提现消耗{0}{1}", score, moduleName);
            scoreModel.AddTime      = DateTime.Now;
            scoreModel.Score        = 0 - score;
            scoreModel.UserID       = CurrentUserInfo.UserID;
            scoreModel.ScoreType    = "WithdrawCash";
            scoreModel.TotalScore   = sTotalScore;
            scoreModel.WebSiteOwner = websiteOwner;

            //通知
            BLLJIMP.Model.SystemNotice notice = new BLLJIMP.Model.SystemNotice();
            notice.Ncontent     = scoreModel.AddNote;
            notice.UserId       = CurrentUserInfo.UserID;
            notice.Receivers    = CurrentUserInfo.UserID;
            notice.SendType     = 2;
            notice.SerialNum    = bllKeyValueData.GetGUID(TransacType.SendSystemNotice);
            notice.Title        = "申请提现消耗淘股币";
            notice.NoticeType   = 1;
            notice.WebsiteOwner = websiteOwner;
            notice.InsertTime   = DateTime.Now;

            BLLTransaction tran = new BLLTransaction();

            if (bllUser.Update(CurrentUserInfo,
                               string.Format("TotalScore=TotalScore-{0}", score),
                               string.Format("AutoID={0} AND WebsiteOwner='{1}' AND TotalScore>{2}", CurrentUserInfo.AutoID, websiteOwner, nScore),
                               tran) > 0 &&
                bllUser.Add(scoreModel, tran) &&
                bllUser.Add(notice, tran) &&
                bllUser.Add(model, tran))
            {
                tran.Commit();
                apiResp.code   = (int)APIErrCode.IsSuccess;
                apiResp.msg    = "申请成功";
                apiResp.status = true;
            }
            else
            {
                tran.Rollback();
                apiResp.code = (int)APIErrCode.OperateFail;
                apiResp.msg  = "申请失败";
            }
            bllKeyValueData.ContextResponse(context, apiResp);
        }
示例#5
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));
        }
示例#6
0
        public void ProcessRequest(HttpContext context)
        {
            string ids        = context.Request["ids"];
            string moduleName = "积分";

            if (!string.IsNullOrWhiteSpace(context.Request["module_name"]))
            {
                moduleName = context.Request["module_name"];
            }
            int total = 0;

            if (string.IsNullOrWhiteSpace(ids))
            {
                apiResp.msg  = "请选中申请";
                apiResp.code = (int)APIErrCode.IsNotFound;
                bll.ContextResponse(context, apiResp);
                return;
            }
            var        sourceList   = bll.QueryWithdrawCashList(1, int.MaxValue, null, out total, "0", context.Request["type"], ids);
            string     websiteOwner = bll.WebsiteOwner;
            List <int> idList       = new List <int>();

            foreach (var p in sourceList)
            {
                UserInfo pu = bllUser.GetUserInfo(p.UserId, websiteOwner);

                //积分明细
                UserScoreDetailsInfo scoreModel = new UserScoreDetailsInfo();
                if (pu != null)
                {
                    scoreModel.AddNote      = string.Format("申请提现未通过审核,返还{0}{1},编号:{2}", p.Score, moduleName, p.AutoID);
                    scoreModel.AddTime      = DateTime.Now;
                    scoreModel.Score        = p.Score;
                    scoreModel.UserID       = p.UserId;
                    scoreModel.ScoreType    = "RefuseWithdrawCash";
                    scoreModel.TotalScore   = pu.TotalScore + p.Score;
                    scoreModel.WebSiteOwner = websiteOwner;
                }

                //通知
                BLLJIMP.Model.SystemNotice notice = new BLLJIMP.Model.SystemNotice();
                if (pu != null)
                {
                    notice.Ncontent     = scoreModel.AddNote;
                    notice.UserId       = currentUserInfo.UserID;
                    notice.Receivers    = pu.UserID;
                    notice.SendType     = 2;
                    notice.Title        = "申请提现未通过审核";
                    notice.NoticeType   = 1;
                    notice.WebsiteOwner = websiteOwner;
                    notice.InsertTime   = DateTime.Now;
                }

                BLLTransaction tran   = new BLLTransaction();
                bool           result = bll.Update(p, string.Format("Status=3,LastUpdateDate=getdate()"), string.Format("AutoID={0}", p.AutoID), tran) > 0;
                if (!result)
                {
                    idList.Add(p.AutoID);
                    tran.Rollback();
                    continue;
                }
                if (pu != null)
                {
                    result = bll.Update(pu, string.Format("TotalScore=TotalScore+{0}", p.Score), string.Format("UserID='{0}' And WebsiteOwner='{1}'", pu.UserID, websiteOwner), tran) > 0;
                    if (!result)
                    {
                        idList.Add(p.AutoID);
                        tran.Rollback();
                        continue;
                    }

                    result = bll.Add(scoreModel, tran);
                    if (!result)
                    {
                        idList.Add(p.AutoID);
                        tran.Rollback();
                        continue;
                    }
                    notice.SerialNum = bllUser.GetGUID(TransacType.SendSystemNotice);
                    result           = bll.Add(notice, tran);
                    if (!result)
                    {
                        idList.Add(p.AutoID);
                        tran.Rollback();
                        continue;
                    }
                }
                tran.Commit();
            }

            apiResp.status = true;
            apiResp.code   = (int)APIErrCode.IsSuccess;
            if (idList.Count == 0)
            {
                apiResp.msg = "处理完成";
            }
            else
            {
                apiResp.msg = string.Format("处理完成,编号[{0}]处理失败", ZentCloud.Common.MyStringHelper.ListToStr(idList, "", ","));
            }
            bll.ContextResponse(context, apiResp);
        }
示例#7
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));
        }
示例#8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="curUser"></param>
        /// <param name="author"></param>
        /// <param name="activity"></param>
        /// <returns></returns>
        public bool RewardJuActivity(UserInfo curUser, UserInfo author, JuActivityInfo activity, double score, string websiteOwner, out string msg,
                                     string scoreName = "积分", string actionName = "赠送")
        {
            msg = "";
            msg = string.Format("{0}{1}完成", actionName, scoreName);

            if (author == null && activity == null)
            {
                msg = string.Format("{0}目标不能为空", actionName);
                return(false);
            }
            DateTime        curTime         = DateTime.Now;
            BLLSystemNotice bllSystemNotice = new BLLSystemNotice();
            BLLUser         bllUser         = new BLLUser();

            UserScoreDetailsInfo scoreModel = new UserScoreDetailsInfo();

            #region 打赏明细
            scoreModel.Score        = 0 - score;
            scoreModel.ScoreType    = "Reward";
            scoreModel.UserID       = curUser.UserID;
            scoreModel.WebSiteOwner = websiteOwner;
            scoreModel.AddTime      = curTime;
            scoreModel.AddNote      = string.Format("{0}消耗{1}", actionName, scoreName);
            if (activity != null)
            {
                scoreModel.RelationID = activity.JuActivityID.ToString();
            }
            if (author != null)
            {
                scoreModel.Ex1 = author.AutoID.ToString();
            }
            #endregion

            SystemNotice systemNotice = new SystemNotice();
            #region 打赏通知
            systemNotice.Title = scoreModel.AddNote;
            if (activity != null)
            {
                systemNotice.Ncontent = string.Format("您{0}了<a href=\"{6}\">{7}</a>{1}{2}{3} : <a href=\"{4}\">{5}</a>", actionName,
                                                      bllSystemNotice.GetArticleTypeName(activity.ArticleType, websiteOwner),
                                                      score,
                                                      scoreName,
                                                      bllSystemNotice.GetArticleLink(activity.JuActivityID, websiteOwner, activity.ArticleType),
                                                      bllSystemNotice.GetArticleLinkText(activity),
                                                      bllSystemNotice.GetUserLink(author.AutoID, websiteOwner),
                                                      bllUser.GetUserDispalyName(author)
                                                      );
            }
            else
            {
                systemNotice.Ncontent = string.Format("您{0}了<a href=\"{4}\">{1}</a>{2}{3}",
                                                      actionName,
                                                      bllUser.GetUserDispalyName(author),
                                                      score,
                                                      scoreName,
                                                      bllSystemNotice.GetUserLink(author.AutoID, websiteOwner));
            }
            systemNotice.NoticeType   = (int)BLLSystemNotice.NoticeType.Reward;
            systemNotice.InsertTime   = curTime;
            systemNotice.WebsiteOwner = websiteOwner;
            systemNotice.SendType     = 2;
            systemNotice.UserId       = curUser.UserID;
            systemNotice.Receivers    = curUser.UserID;
            #endregion 打赏通知

            UserScoreDetailsInfo scoreGetModel   = new UserScoreDetailsInfo();
            SystemNotice         systemNoticeGet = new SystemNotice();
            #region 获赏明细
            if (author != null)
            {
                scoreGetModel.Score        = score;
                scoreGetModel.ScoreType    = "GetReward";
                scoreGetModel.UserID       = author.UserID;
                scoreGetModel.WebSiteOwner = websiteOwner;
                scoreGetModel.AddTime      = curTime;
                scoreGetModel.AddNote      = string.Format("获得{0}{1}", actionName, scoreName);
                if (activity != null)
                {
                    scoreGetModel.RelationID = activity.JuActivityID.ToString();
                }
                scoreGetModel.Ex1 = curUser.AutoID.ToString();

                #region 获赏通知
                systemNoticeGet.Title = scoreGetModel.AddNote;
                if (activity != null)
                {
                    systemNoticeGet.Ncontent = string.Format("您的{0}获得了<a href=\"{1}\">{2}</a>{3}的{4}{5} : <a href=\"{6}\">{7}</a>",
                                                             bllSystemNotice.GetArticleTypeName(activity.ArticleType, websiteOwner),
                                                             bllSystemNotice.GetUserLink(curUser.AutoID, websiteOwner),
                                                             bllUser.GetUserDispalyName(curUser),
                                                             actionName,
                                                             score,
                                                             scoreName,
                                                             bllSystemNotice.GetArticleLink(activity.JuActivityID, websiteOwner, activity.ArticleType),
                                                             bllSystemNotice.GetArticleLinkText(activity));
                }
                else
                {
                    systemNoticeGet.Ncontent = string.Format("您获得了<a href=\"{0}\">{1}</a>{2}的{3}{4}",
                                                             bllSystemNotice.GetUserLink(curUser.AutoID, websiteOwner),
                                                             bllUser.GetUserDispalyName(curUser),
                                                             actionName,
                                                             score,
                                                             scoreName);
                }
                systemNoticeGet.NoticeType   = (int)BLLSystemNotice.NoticeType.GetReward;
                systemNoticeGet.InsertTime   = curTime;
                systemNoticeGet.WebsiteOwner = websiteOwner;
                systemNoticeGet.SendType     = 2;
                systemNoticeGet.UserId       = author.UserID;
                systemNoticeGet.Receivers    = author.UserID;

                #endregion 打赏通知
            }
            #endregion

            ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            #region 打赏用户积分处理
            if (Update(curUser,
                       string.Format(" TotalScore = TotalScore - {0}", score),
                       string.Format(" AutoID = {0} And  TotalScore>= {1}", curUser.AutoID, score),
                       tran) <= 0)
            {
                tran.Rollback();
                msg = string.Format("{0}失败,可能是{1}不足", actionName, scoreName);
                return(false);
            }
            curUser = GetByKey <UserInfo>("AutoID", curUser.AutoID.ToString(), false, tran: tran);
            scoreModel.TotalScore = curUser.TotalScore;
            if (!Add(scoreModel, tran))
            {
                tran.Rollback();
                msg = string.Format("{0}记录{1}明细出错", actionName, scoreName);
                return(false);
            }

            systemNotice.SerialNum = GetGUID(TransacType.SendSystemNotice);
            if (!Add(systemNotice, tran))
            {
                tran.Rollback();
                msg = string.Format("{0}{1}通知出错", actionName, scoreName);
                return(false);
            }

            #endregion

            #region 打赏目标用户积分处理
            if (author != null)
            {
                if (Update(author,
                           string.Format(" TotalScore = TotalScore + {0}", score),
                           string.Format(" AutoID = {0} ", author.AutoID),
                           tran) <= 0)
                {
                    tran.Rollback();
                    msg = string.Format("{0}目标用户加{1}出错", actionName, scoreName);
                    return(false);
                }
                author = GetByKey <UserInfo>("AutoID", author.AutoID.ToString(), false, tran: tran);
                scoreGetModel.TotalScore = author.TotalScore;
                if (!Add(scoreGetModel, tran))
                {
                    tran.Rollback();
                    msg = string.Format("{0}目标用户记录{1}明细出错", actionName, scoreName);
                    return(false);
                }
                systemNoticeGet.SerialNum = GetGUID(TransacType.SendSystemNotice);
                if (!Add(systemNoticeGet, tran))
                {
                    tran.Rollback();
                    msg = string.Format("获得{0}{1}通知出错", actionName, scoreName);
                    return(false);
                }
            }
            #endregion
            #region 打赏目标积分处理
            if (activity != null)
            {
                double sumScore = GetSumScore(websiteOwner, "GetReward", activity.JuActivityID.ToString(), "", tran);

                if (Update(activity,
                           string.Format(" RewardTotal={0}", sumScore),
                           string.Format(" JuActivityID = {0} ", activity.JuActivityID),
                           tran) <= 0)
                {
                    tran.Rollback();
                    msg = string.Format("{0}目标加{1}出错", actionName, scoreName);
                    return(false);
                }
            }
            #endregion

            tran.Commit();
            return(true);
        }
示例#9
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
            }));
        }
示例#10
0
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                Tolog("京东支付通知start");
                var    payConfig = bllPay.GetPayConfig();
                byte[] byts      = new byte[context.Request.InputStream.Length];
                context.Request.InputStream.Read(byts, 0, byts.Length);
                string req = Encoding.UTF8.GetString(byts);
                Tolog("通知参数" + req);

                //var jdPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKE5N2xm3NIrXON8Zj19GNtLZ8xwEQ6uDIyrS3S03UhgBJMkGl4msfq4Xuxv6XUAN7oU1XhV3/xtabr9rXto4Ke3d6WwNbxwXnK5LSgsQc1BhT5NcXHXpGBdt7P8NMez5qGieOKqHGvT0qvjyYnYA29a8Z4wzNR7vAVHp36uD5RwIDAQAB";

                //req = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><jdpay><version>V2.0</version><merchant>110226843002</merchant><result><code>000000</code><desc>success</desc></result><encrypt>MDIxZjNkNjI1YjU1NzQ4MWE5N2ExMTg3YjkxNmQ4NzkxYzQyMmFjZjM4YTM1MjZjY2JjNzM1ZDkxY2Q5ZDNmMTMzMGFjYTBkNTI0MzYzNjc3MTVhODI3OWUzZTAxMmY5ODEyOTVmNDNiNWY5MDZhZGJiYTcwYTYyOTFlYzVmYTU2Y2EyN2U1YzhkNzllMGE3ZTUyNDE4NWU4OWMxNjIwNDFkODcyYzJiZDA4ZWY4YWEyMmY5ZWUxNDk3YTg3MTI3YmU1NTMxNjc5NWJiOTlmN2ZmNGU1MTc1YWJhNjNkYjUzYWUwZDQzOTk4ZjIzMjBiYmVkNGJkMDcxOWUzOThjZjU1ODUwNzM4Y2RiNzM2Njc1N2U2ZTcxN2Q0N2ZiYTZmN2M1YzBiYzRmMjc4ZThiZDNhYTkxZTExNzBiYjg2ZDNjNmQ3OWUyZTBlYjUzZWNlZjFjODQ2MzdiN2E5MTQxN2Y3NmRhZmNkNDdiMzMwNjc1MGRhYjhiYzg0NTFkOWNiY2QyMDZhOTJiYzU2YTFiOWEwMjRmNTZhMWZhNTVhNjlmYTA1ZDFlMmI0YTI4MGE1YTU0N2NlMjc3ZWMwM2QyNWE4ODdlOTA0ZGM3YTY2MDViY2I1OTI5MDBlYWU4MGU0Mzc4MmEwOWY3ZjEwZTk5MGZkOGUzYTA4MzNkNGMyZGZkNWM3MDhkOGU4N2NhMmQyZGM1MDgwYzUyOTg3OGNkMzFhZWRkMTE1NDM5ZjExYTM2OGM2OGE4MGZjZTYyMjJkNzlmODcwNGYyNDMzMTYyZThhZTBkODM2ODBjYzg5ZGRjMWY3ZGVmYzQzYjc4MDZiMDNhMTBmZTc2YjI3MThjYjQ0YjQwZDkyY2E3OGUzYmYzZmFlNjBlOTI4OGU1ODVkNjBjMWZiNDBmMjFjNzVmNDkxYmRkYWFlNzQ0YjZkYmU1ODNkOWQ4OGYwN2EyMDViOWQ5MGNjMzViMTE3MDQ4NWVlNTdlN2Y5MTRhZDM3YzFlODY1NDFiZmQyNDg1MzhlZGZiNDNiZWZmZjY3YmE3NWQ5YjI0MzE4ZDMzMDE5NTE3YWM4ZTJiMDZhZWYyM2NhNjMwODc3MDhkNTdkZWI3MWVhMmY2MzA2ZDliZjBmZGFlNzQ3ODgzODg0ZjVhOWFkODIxYWM0NGQ1ZDlmMGRlNDhkMjBiYTJjYmQ4NTlkMmU3NDMxZDExZmRjMzkxMDU3ZmE3NGE0Yzg2OThkMmY0ZWQ1ZjE3MjIwOWQ1ZTBmZGIzZjFhNGYwOTllZWY5YzRiMWYyZDAxZjlhNzhlYWY5ZjU0YmIyZjczNmUxMjJkNWY2NzhlMDFmYjU0YjY3NWRlYTc1ZWZkNmMwNTJhZmY3ZGVhMGM5NjAyMWQwMGQyMjI2NzdhM2RlNDdhMTdkMWI4ZWQxYmEyYWZlZDg1ZjI4NDk2ZmI2MGVjOTc5OTc4MjgzZTEyNzY2ZmI1OWUzZjY1MWI4OTVlMmQ4OGNlNGRhODg0NzJiNTFiN2RmZDc5NzdkNDk4NTY0NGU4ZjBmNGZjMTM3MmUzMGNhMTUwOTFkNDFhODIzMjZiODU0YjMzNmI1N2EwZDVjMjZjOWNjMzBlMjFjZjNkMDA0NjQ4Zjk0NjQzZWRhOTU1MmIyZjJkYzZjNGJmOTU5MDIzNTBlODlmOTNhZDRhYmEyMzZiY2E1OWE4NzY5Mjc0ZTcwN2MyNGFjNGJmOTU5MDIzNTBlODlmNDNlZGE5NTUyYjJmMmRjNjU0MTNlZjYxZTNlODc4MDk3MmNiYjg3NTVjNmU1NWNlZDljNWU0ZDE5ZTRmZjJjZTAxNmJiMGIzYWFlOTdlYTQzYmM5NWVmMGU0ZjUyNzY4NDNlZGE5NTUyYjJmMmRjNmMyOWRiYWZkYTNjYzQ1M2E3ZGJhZWNjZWJmNGIxZmQ5MTMxMmRiMzliOTU2YzBmNmNiODMxMDQ1ZDBiYjM1ZTNmMzlmMGE0ODNiN2M3ODYyZjNjMTFiN2ZiODljNDNkMjE4NGFlNzU5M2JhMmQ2YTJkOWMwMmYxYTBlNTg2MzhkYzU0NzE0NjExNzkyNGU4ZjQ4NDgzMTAyNDY5OGRlNGZiMDVmNGQzNzE3NGMwOGI2NGU2NjkxMmU2NGY5M2I0YjNiMThmMzZiZmY0NTgwN2FjMDAxOWRlY2ZkYTcyOGFmNzIyZTQwNjhlMTViM2UwMmQzMmRiYjJkOTE2MmQzNWMzZWM2OGRkZjJjMjdmOTRhZGNmYzEzOTdlOWY0NjQwODFiYWU0Y2E3Y2NjZDY0NjQzNGFmZWU4ODExYWRiZTBlY2MwY2JlOThmNDliMDZkYjE2YjNjNTZhOTRiOGZkMDU=</encrypt></jdpay>";

                //req = Regex.Replace(req, @"[\t\n\r]", "", RegexOptions.IgnoreCase);

                req = req.Replace("\r", "").Replace("\n", "").Replace("\t", "");

                AsynNotifyResponse anyResponse = Payment.JDPay.XMLUtil.decryptResXml <AsynNotifyResponse>(Payment.JDPay.Config.JDPubKey, payConfig.JDPayDESKey, req);
                // System.Diagnostics.Debug.WriteLine("异步通知订单号:" + anyResponse.tradeNum + ",状态:" + anyResponse.status);
                Tolog("异步通知订单号:" + anyResponse.tradeNum + ",状态:" + anyResponse.status);
                var orderId   = anyResponse.tradeNum;
                var orderInfo = bllMall.GetOrderInfo(orderId);
                if (orderInfo == null)
                {
                    //context.Response.Write("订单未找到");
                    context.Response.StatusCode = 500;
                    context.Response.Write(failStr);
                    return;
                }
                if (orderInfo.PaymentStatus.Equals(1))
                {
                    //Tolog("已支付");
                    // context.Response.Write("订单已支付");
                    context.Response.StatusCode = 200;
                    context.Response.Write(successStr);
                    return;
                }



                if (anyResponse.status == "2")
                {
                    orderInfo.PaymentType = 3;

                    //支付成功
                    WXMallProductInfo tProductInfo  = new WXMallProductInfo();
                    UserInfo          orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID, orderInfo.WebsiteOwner);//下单用户信息
                    string            hasOrderIDs   = "";
                    int maxCount = 1;
                    //Tolog("准备检查更新订单状态");
                    if (BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType))
                    {
                        //Tolog("预订类型");
                        #region 预约订单修改状态
                        orderInfo.PaymentStatus = 1;
                        orderInfo.PayTime       = DateTime.Now;
                        orderInfo.Status        = "预约成功";

                        #region 检查是否有预约成功的订单
                        List <WXMallOrderDetailsInfo> tDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID, null, orderInfo.ArticleCategoryType, null, null);
                        List <WXMallOrderDetailsInfo> oDetailList = bllMall.GetOrderDetailsList(null, tDetailList[0].PID, orderInfo.ArticleCategoryType, tDetailList.Min(p => p.StartDate), tDetailList.Max(p => p.EndDate));
                        tProductInfo = bllMall.GetByKey <WXMallProductInfo>("PID", tDetailList[0].PID);
                        maxCount     = tProductInfo.Stock;
                        List <string> hasOrderIDList = new List <string>();
                        foreach (var item in tDetailList)
                        {
                            List <WXMallOrderDetailsInfo> hasOrderDetailList = oDetailList.Where(p => !((item.StartDate >= p.EndDate && item.EndDate > p.EndDate) || (item.StartDate < p.StartDate && item.EndDate <= p.StartDate))).ToList();
                            if (hasOrderDetailList.Count >= maxCount)
                            {
                                hasOrderIDList.AddRange(hasOrderDetailList.Select(p => p.OrderID).Distinct());
                            }
                        }
                        hasOrderIDList = hasOrderIDList.Where(p => !p.Contains(orderInfo.OrderID)).ToList();
                        if (hasOrderIDList.Count > 0)
                        {
                            hasOrderIDList = hasOrderIDList.Distinct().ToList();
                            hasOrderIDs    = MyStringHelper.ListToStr(hasOrderIDList, "'", ",");
                        }
                        #endregion 检查是否有预约成功的订单

                        #endregion 预约订单修改状态
                    }
                    else
                    {
                        //Tolog("普通类型");
                        #region 原订单修改状态
                        orderInfo.PaymentStatus = 1;
                        orderInfo.Status        = "待发货";
                        orderInfo.PayTime       = DateTime.Now;
                        Tolog("更改状态start");
                        //if (bllMall.GetWebsiteInfoModelFromDataBase().IsDistributionMall.Equals(1))
                        //{
                        orderInfo.GroupBuyStatus     = "0";
                        orderInfo.DistributionStatus = 1;

                        #region 拼团订单
                        if (orderInfo.OrderType == 2)
                        {
                            try
                            {
                                if (!string.IsNullOrEmpty(orderInfo.GroupBuyParentOrderId))
                                {
                                    var parentOrderInfo = bllMall.GetOrderInfo(orderInfo.GroupBuyParentOrderId);

                                    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);
                                    }
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                        #endregion

                        #region 活动订单
                        if (orderInfo.OrderType == 4)
                        {
                            ActivityDataInfo data = bllMall.Get <ActivityDataInfo>(string.Format(" OrderId='{0}'", orderInfo.OrderID));
                            if (data != null)
                            {
                                bllMall.Update(data, string.Format(" PaymentStatus=1"), string.Format("  OrderId='{0}'", orderInfo.OrderID));
                            }
                        }
                        #endregion

                        bllMall.Update(orderInfo, string.Format("PaymentStatus=1,Status='待发货',PayTime=GETDATE(),DistributionStatus=1"), string.Format("ParentOrderId='{0}'", orderInfo.OrderID));

                        //}
                        #endregion 原订单修改状态

                        //orderInfo.PayTranNo = tradeNo;
                    }
                    bool result = false;

                    if (BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType))
                    {
                        if (string.IsNullOrWhiteSpace(hasOrderIDs))
                        {
                            hasOrderIDs = "'0'";
                        }
                        result = bllMall.Update(new WXMallOrderInfo(),
                                                string.Format("PaymentStatus={0},PayTime=GetDate(),Status='{1}'", 1, "预约成功"),
                                                string.Format("OrderID='{0}' and WebsiteOwner='{4}' AND (select count(1) from [ZCJ_WXMallOrderInfo] where Status='{3}' and WebsiteOwner='{4}' and  OrderID IN({1}))<{2}",
                                                              orderInfo.OrderID, hasOrderIDs, maxCount, "预约成功", bllMall.WebsiteOwner)
                                                ) > 0;
                        if (result)
                        {
                            // #region 交易成功加积分
                            //增加积分 (慧聚不需要)
                            //if (orderInfo.TotalAmount > 0)
                            //{
                            //    ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                            //    int addScore = 0;
                            //    if (scoreConfig != null && scoreConfig.OrderAmount > 0 && scoreConfig.OrderScore > 0)
                            //    {
                            //        addScore = (int)(orderInfo.PayableAmount / (scoreConfig.OrderAmount / scoreConfig.OrderScore));
                            //    }
                            //    if (addScore > 0)
                            //    {
                            //        if (bllUser.Update(new UserInfo(),
                            //            string.Format(" TotalScore+={0},HistoryTotalScore+={0}", addScore),
                            //            string.Format(" UserID='{0}'", orderInfo.OrderUserID)) > 0)
                            //        {
                            //            UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                            //            scoreRecord.AddTime = DateTime.Now;
                            //            scoreRecord.Score = addScore;
                            //            scoreRecord.ScoreType = "OrderSuccess";
                            //            scoreRecord.UserID = orderInfo.OrderUserID;
                            //            scoreRecord.AddNote = "预约-交易成功获得积分";
                            //            bllMall.Add(scoreRecord);
                            //        }
                            //    }
                            //}
                            // #endregion

                            #region 修改其他预约订单为预约失败 返还积分

                            if (BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType) && !string.IsNullOrWhiteSpace(hasOrderIDs))
                            {
                                int tempCount = 0;
                                List <WXMallOrderInfo> tempList = bllMall.GetOrderList(0, 1, "", out tempCount, "预约成功", null, null, null,
                                                                                       null, null, null, null, null, null, null, orderInfo.ArticleCategoryType, hasOrderIDs);
                                tempCount = tempCount + 1; //加上当前订单的数量
                                if (tempCount >= maxCount)
                                {
                                    tempList = bllMall.GetColOrderListInStatus("'待付款','待审核'", hasOrderIDs, "OrderID,OrderUserID,UseScore", bllMall.WebsiteOwner);
                                    if (tempList.Count > 0)
                                    {
                                        string stopOrderIds = MyStringHelper.ListToStr(tempList.Select(p => p.OrderID).ToList(), "'", ",");
                                        tempList = tempList.Where(p => p.UseScore > 0).ToList();
                                        foreach (var item in tempList)
                                        {
                                            orderUserInfo.TotalScore += item.UseScore;
                                            if (bllUser.Update(new UserInfo(), string.Format(" TotalScore+={0}", item.UseScore),
                                                               string.Format(" UserID='{0}'", item.OrderUserID)) > 0)
                                            {
                                                UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                                                scoreRecord.AddTime      = DateTime.Now;
                                                scoreRecord.Score        = item.UseScore;
                                                scoreRecord.TotalScore   = orderUserInfo.TotalScore;
                                                scoreRecord.ScoreType    = "OrderCancel";
                                                scoreRecord.UserID       = item.OrderUserID;
                                                scoreRecord.RelationID   = item.OrderID;
                                                scoreRecord.AddNote      = "预约-订单失败返还积分";
                                                scoreRecord.WebSiteOwner = item.WebsiteOwner;
                                                bllMall.Add(scoreRecord);
                                            }
                                        }
                                        bllMall.Update(new WXMallOrderInfo(),
                                                       string.Format("Status='{0}'", "预约失败"),
                                                       string.Format("OrderID In ({0}) and WebsiteOwner='{1}'", stopOrderIds, bllMall.WebsiteOwner));
                                    }
                                }
                                //Tolog("更改修改其他预约为预约失败");
                            }
                            #endregion
                        }
                    }
                    else
                    {
                        result = bllMall.Update(orderInfo);
                    }
                    if (result)
                    {
                        Open.HongWareSDK.Client hongWareClient = new Open.HongWareSDK.Client(orderInfo.WebsiteOwner);

                        //Tolog("更改状态true");

                        #region Efast同步
                        //判读当前站点是否需要同步到驿氪和efast
                        if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncEfast, bllCommRelation.WebsiteOwner, ""))
                        {
                            try
                            {
                                Tolog("开始同步efast");

                                string outOrderId = string.Empty, msg = string.Empty;
                                var    syncResult = bllEfast.CreateOrder(orderInfo.OrderID, out outOrderId, out msg);
                                if (syncResult)
                                {
                                    orderInfo.OutOrderId = outOrderId;
                                    bllMall.Update(orderInfo);
                                }
                                Tolog(string.Format("efast订单同步结果:{0},订单号:{1},提示信息:{2}", syncResult, outOrderId, msg));
                            }
                            catch (Exception ex)
                            {
                                Tolog("efast订单同步异常:" + ex.Message);
                            }
                        }
                        #endregion

                        #region 驿氪同步
                        if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, ""))
                        {
                            try
                            {
                                Tolog("开始同步驿氪");
                                //同步成功订单到驿氪

                                //UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID);
                                //if ((!string.IsNullOrEmpty(orderUserInfo.Ex1)) && (!string.IsNullOrEmpty(orderUserInfo.Ex2)) && (!string.IsNullOrEmpty(orderUserInfo.Phone)))
                                //{
                                //    client.BonusUpdate(orderUserInfo.Ex2, -(orderInfo.UseScore), "商城下单使用积分" + orderInfo.UseScore);

                                //}
                                var uploadOrderResult = yikeClient.OrderUpload(orderInfo);

                                Tolog(string.Format("驿氪订单同步结果:{0}", Common.JSONHelper.ObjectToJson(uploadOrderResult)));
                            }
                            catch (Exception ex)
                            {
                                Tolog("驿氪订单同步异常:" + ex.Message);
                            }
                        }
                        #endregion

                        #region 付款加积分
                        try
                        {
                            bllUser.AddUserScoreDetail(orderInfo.OrderUserID, CommonPlatform.Helper.EnumStringHelper.ToString(ZentCloud.BLLJIMP.Enums.ScoreDefineType.OrderPay), bllMall.WebsiteOwner, null, null);
                        }
                        catch (Exception)
                        { }

                        #endregion


                        #region 消息通知
                        if (!BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType))
                        {
                            try
                            {
                                var    productName = bllMall.GetOrderDetailsList(orderInfo.OrderID)[0].ProductName;
                                string remark      = "";
                                if (!string.IsNullOrEmpty(orderInfo.OrderMemo))
                                {
                                    remark = string.Format("客户留言:{0}", orderInfo.OrderMemo);
                                }
                                bllWeiXin.SendTemplateMessageToKefu("有新的订单", string.Format("订单号:{0}\\n订单金额:{1}元\\n收货人:{2}\\n电话:{3}\\n商品:{4}\\n{5}", orderInfo.OrderID, orderInfo.TotalAmount, orderInfo.Consignee, orderInfo.Phone, productName, remark));
                                if (orderInfo.OrderType != 4)//付费的活动不发消息
                                {
                                    if (orderInfo.WebsiteOwner != "jikuwifi")
                                    {
                                        string url = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/orderDetail/{1}#/orderDetail/{1}", context.Request.Url.Host, orderInfo.OrderID);
                                        bllWeiXin.SendTemplateMessageNotifyComm(orderUserInfo, "订单已成功支付,我们将尽快发货,请保持手机畅通等待物流送达!", string.Format("订单号:{0}\\n订单金额:{1}元\\n收货人:{2}\\n电话:{3}\\n商品:{4}...\\n查看详情", orderInfo.OrderID, orderInfo.TotalAmount, orderInfo.Consignee, orderInfo.Phone, productName), url);
                                    }
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                        else
                        {
                            try
                            {
                                bllWeiXin.SendTemplateMessageToKefu(orderInfo.Status, string.Format("预约:{2}\\n订单号:{0}\\n订单金额:{1}元\\n预约人:{3}\\n预约人手机:{4}", orderInfo.OrderID, orderInfo.TotalAmount, tProductInfo.PName, orderUserInfo.TrueName, orderUserInfo.Phone));
                                bllWeiXin.SendTemplateMessageNotifyComm(orderUserInfo, orderInfo.Status, string.Format("预约:{2}\\n订单号:{0}\\n订单金额:{1}元", orderInfo.OrderID, orderInfo.TotalAmount, tProductInfo.PName));
                            }
                            catch (Exception)
                            {
                            }
                        }
                        #endregion
                        WebsiteInfo websiteInfo = bllMall.Get <WebsiteInfo>(string.Format(" WebsiteOwner='{0}'", orderInfo.WebsiteOwner));
                        #region 分销相关
                        try
                        {
                            if (bllMenuPermission.CheckUserAndPmsKey(websiteInfo.WebsiteOwner, BLLPermission.Enums.PermissionSysKey.OnlineDistribution, websiteInfo.WebsiteOwner))
                            {
                                if (string.IsNullOrWhiteSpace(orderUserInfo.DistributionOwner))
                                {
                                    if (websiteInfo.DistributionRelationBuildMallOrder == 1)
                                    {
                                        orderUserInfo.DistributionOwner = bllMall.WebsiteOwner;
                                        bllMall.Update(orderUserInfo);
                                    }
                                }

                                bllDis.AutoUpdateLevel(orderInfo);
                                bllDis.TransfersEstimate(orderInfo);
                                bllDis.SendMessageToUser(orderInfo);
                                bllDis.UpdateDistributionSaleAmountUp(orderInfo);
                            }
                        }
                        catch (Exception ex)
                        {
                            Tolog("设置分销员异常:" + ex.Message + " 用户id:" + orderUserInfo.UserID);
                        }
                        #endregion


                        #region 宏巍通知
                        try
                        {
                            if (websiteInfo.IsUnionHongware == 1)
                            {
                                hongWareClient.OrderNotice(orderUserInfo.WXOpenId, orderInfo.OrderID);
                            }
                        }
                        catch (Exception)
                        {
                        }

                        #endregion

                        bllCard.Give(orderInfo.TotalAmount, orderUserInfo);


                        string v1ProductId = Common.ConfigHelper.GetConfigString("YGBV1ProductId");
                        string v2ProductId = Common.ConfigHelper.GetConfigString("YGBV2ProductId");
                        string v1CouponId  = Common.ConfigHelper.GetConfigString("YGBV1CouponId");
                        string v2CouponId  = Common.ConfigHelper.GetConfigString("YGBV2CouponId");

                        List <WXMallOrderDetailsInfo> orderDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID);
                        foreach (var item in orderDetailList)
                        {
                            item.IsComplete = 1;
                            bllMall.Update(item);
                            #region 购买指定商品发送指定的优惠券
                            if (!string.IsNullOrEmpty(v1ProductId) && !string.IsNullOrEmpty(v1CouponId) && item.PID == v1ProductId)
                            {
                                bllCard.SendCardCouponsByCurrUserInfo(orderUserInfo, v1CouponId);
                            }

                            if (!string.IsNullOrEmpty(v2ProductId) && !string.IsNullOrEmpty(v2CouponId) && item.PID == v2ProductId)
                            {
                                bllCard.SendCardCouponsByCurrUserInfo(orderUserInfo, v2CouponId);
                            }
                            #endregion
                        }
                        //更新销量
                        bllMall.UpdateProductSaleCount(orderInfo);

                        context.Response.StatusCode = 200;
                        context.Response.Write(successStr);
                        Tolog("支付成功" + orderInfo.OrderID);
                        return;
                    }
                    else
                    {
                        Tolog("更改状态false");
                        context.Response.StatusCode = 500;
                        context.Response.Write(failStr);
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                //error = "fail";
                Tolog("京东支付异常:" + ex.ToString());
            }

            context.Response.ContentType = "text/plain";
            context.Response.StatusCode  = 500;
            context.Response.Write(failStr);
        }
示例#11
0
        public void ProcessRequest(HttpContext context)
        {
            string weekNameNumber = context.Request["week_name_date"];
            string type           = context.Request["type"];
            string id             = context.Request["id"];
            string address        = context.Request["address"];

            UserInfo curUser = bllUser.GetCurrentUserInfo();// 当前用户
            string   msg     = string.Empty;

            SignInAddress signInAddress = bllSignIn.Get <SignInAddress>(string.Format(" WebsiteOwner='{0}' AND Type='Sign' ", bllSignIn.WebsiteOwner));

            //补签积分数组
            int[] retroactives = new int[] { signInAddress.RetroactiveToOne, signInAddress.RetroactiveToTwo, signInAddress.RetroactiveToThree, signInAddress.RetroactiveToFour, signInAddress.RetroactiveToFive, signInAddress.RetroactiveToSix, signInAddress.RetroactiveToSeven };

            DateTime dt           = DateTime.Now;                     //当前时间
            DateTime startWeek    = GetMondayDate(dt);
            string   starkWeekStr = startWeek.ToString("yyyy/MM/dd"); //本周周一

            int count = 0;

            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
            try
            {
                SignInLog log = bllSignIn.Get <SignInLog>(string.Format(" WebsiteOwner='{0}' AND Type='Sign' AND UserId='{1}' AND SignInDate='{2}'", bllSignIn.WebsiteOwner, curUser.UserID, weekNameNumber), tran);
                if (log != null)
                {
                    apiResp.msg  = "已存在记录";
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.IsNotFound;
                    bllSignIn.ContextResponse(context, apiResp);
                    return;
                }
                count = bllSignIn.GetCount <SignInLog>(string.Format(" WebsiteOwner='{0}' AND Status=1 AND SignInDate>='{1}' AND UserId='{2}' and Type='Sign' ", bllSignIn.WebsiteOwner, starkWeekStr, curUser.UserID));

                if (count > 6)
                {
                    count = 6;
                }

                int score = retroactives[count];

                if (curUser.TotalScore < score)
                {
                    apiResp.msg  = "积分不足";
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    bllSignIn.ContextResponse(context, apiResp);
                    return;
                }

                UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                scoreRecord.UserID       = curUser.UserID;
                scoreRecord.AddTime      = dt;
                scoreRecord.TotalScore   = curUser.TotalScore;
                scoreRecord.Score        = -score;
                scoreRecord.ScoreType    = "SignIn";
                scoreRecord.AddNote      = "补签";
                scoreRecord.RelationID   = bllSignIn.GetCurrUserID();
                scoreRecord.WebSiteOwner = bllSignIn.WebsiteOwner;
                scoreRecord.Ex6          = "补签扣除" + score + "积分,日期:" + (string.IsNullOrEmpty(weekNameNumber) ? dt.ToString("yyyy/MM/dd") : weekNameNumber);

                //签到积分数据
                int[] scores = new int[] { signInAddress.SundayScore, signInAddress.MondayScore, signInAddress.TuesdayScore, signInAddress.WednesdayScore, signInAddress.ThursdayScore, signInAddress.FridayScore, signInAddress.SaturdayScore };

                log              = new SignInLog();
                log.AddressId    = Convert.ToInt32(id);
                log.Address      = address;
                log.WebsiteOwner = bllSignIn.WebsiteOwner;
                log.UserID       = curUser.UserID;
                log.CreateDate   = dt;
                log.Remark       = "补签";
                log.Type         = type;
                log.SignInDate   = weekNameNumber;
                log.Status       = 1;
                int addScore = scores[Convert.ToInt32(dt.DayOfWeek)];
                if (!string.IsNullOrEmpty(weekNameNumber))
                {
                    short d = Convert.ToInt16((DateTime.Parse(weekNameNumber)).DayOfWeek.ToString("D"));
                    addScore = scores[d];
                }
                log.Ex1 = "补签获得" + addScore + "积分,扣除" + score + "积分,日期:" + (string.IsNullOrEmpty(weekNameNumber) ? dt.ToString("yyyy/MM/dd") : weekNameNumber);


                UserScoreDetailsInfo scoreRecord1 = new UserScoreDetailsInfo();
                scoreRecord1.UserID       = curUser.UserID;
                scoreRecord1.AddTime      = dt;
                scoreRecord1.TotalScore   = curUser.TotalScore;
                scoreRecord1.Score        = addScore;
                scoreRecord1.ScoreType    = "SignIn";
                scoreRecord1.AddNote      = "补签";
                scoreRecord1.RelationID   = bllSignIn.GetCurrUserID();
                scoreRecord1.WebSiteOwner = bllSignIn.WebsiteOwner;
                scoreRecord1.Ex6          = "补签获得" + addScore + "积分,日期:" + (string.IsNullOrEmpty(weekNameNumber) ? dt.ToString("yyyy/MM/dd") : weekNameNumber);


                if (bllUser.Update(curUser, string.Format(" TotalScore=TotalScore+({0})", (addScore - score)), string.Format(" WebsiteOwner='{0}' AND  AutoID={1}", bllUser.WebsiteOwner, curUser.AutoID), tran) <= 0)
                {
                    tran.Rollback();
                    apiResp.msg  = "补签失败";
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                if (!bllSignIn.Add(scoreRecord, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "积分详情添加失败";
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }

                if (!bllSignIn.Add(log, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "添加签到数据失败";
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }
                //if (bllSignIn.Update(curUser, string.Format(" TotalScore=TotalScore+{0}", addScore), string.Format(" WebsiteOwner='{0}' AND AutoId={1}", bllSignIn.WebsiteOwner, curUser.AutoID), tran) <= 0)
                //{
                //    tran.Rollback();
                //    apiResp.msg = "增加积分失败";
                //    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                //}
                if (!bllSignIn.Add(scoreRecord1, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "积分详情添加失败";
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    bllUser.ContextResponse(context, apiResp);
                    return;
                }


                tran.Commit();
                msg = retroactives[6].ToString();
                if (count + 1 < 6)
                {
                    msg = retroactives[count + 1].ToString();
                }
            }
            catch (Exception ex)
            {
                tran.Rollback();
                apiResp.msg  = "异常" + ex.Message;
                apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                bllUser.ContextResponse(context, apiResp);
                return;
            }

            apiResp.status = true;
            apiResp.msg    = msg;
            bllUser.ContextResponse(context, apiResp);
        }
示例#12
0
        public void ProcessRequest(HttpContext context)
        {
            string id           = context.Request["id"];
            string websiteOwner = bllUser.WebsiteOwner;
            UserScoreDetailsInfo scoreDetail = bllUser.GetByKey <UserScoreDetailsInfo>("AutoID", id, websiteOwner: websiteOwner);
            UserInfo             member      = bllUser.GetUserInfo(scoreDetail.UserID, websiteOwner);
            UserInfo             upUser      = new UserInfo();

            if (!string.IsNullOrWhiteSpace(member.DistributionOwner))
            {
                upUser = bllUser.GetUserInfo(member.DistributionOwner, websiteOwner);
            }
            FlowAction act = new FlowAction();
            List <FlowActionDetail> actDetails = new List <FlowActionDetail>();
            List <FlowActionFile>   actFiles   = new List <FlowActionFile>();
            dynamic flow_action = null;

            if (!string.IsNullOrWhiteSpace(scoreDetail.RelationID) &&
                (scoreDetail.ScoreEvent == "线下注册充值" || scoreDetail.ScoreEvent == "线下充值" || scoreDetail.ScoreEvent == "申请提现"))
            {
                bool isReg = scoreDetail.ScoreEvent.Contains("注册");
                act        = bllFlow.GetByKey <FlowAction>("AutoID", scoreDetail.RelationID, websiteOwner: websiteOwner);
                actDetails = bllFlow.GetListByKey <FlowActionDetail>("ActionID", scoreDetail.RelationID, websiteOwner: websiteOwner);
                actFiles   = bllFlow.GetListByKey <FlowActionFile>("ActionID", scoreDetail.RelationID, websiteOwner: websiteOwner);
                UserInfo       createUser = bllUser.GetUserInfo(act.CreateUserID, websiteOwner);
                List <dynamic> details    = new List <dynamic>();
                foreach (var item in actDetails)
                {
                    UserInfo ru = bllUser.GetUserInfo(item.HandleUserID, websiteOwner);
                    details.Add(new
                    {
                        id            = item.AutoID,
                        aid           = item.ActionID,
                        fid           = item.FlowID,
                        sid           = item.StepID,
                        ex1           = item.Ex1,
                        ex2           = isReg ? "":item.Ex2,
                        ex3           = item.Ex3,
                        content       = item.HandleContent,
                        handle_time   = item.HandleDate.ToString("yyyy/MM/dd HH:mm:ss"),
                        select_date   = item.HandleSelectDate.ToString("yyyy/MM/dd HH:mm:ss"),
                        stepname      = item.StepName,
                        handler_phone = ru == null ? "" : ru.Phone,
                        handler_name  = ru == null ? "" : ru.TrueName,
                        files         = (from fp in actFiles
                                         where fp.StepID.Equals(item.StepID)
                                         select new
                        {
                            id = fp.AutoID,
                            url = fp.FilePath
                        })
                    });
                }
                flow_action = new
                {
                    id            = act.AutoID,
                    flow_name     = act.FlowName,
                    creater_phone = createUser.Phone,
                    creater_name  = createUser.TrueName,
                    create_time   = act.CreateDate.ToString("yyyy/MM/dd HH:mm:ss"),
                    end_time      = act.EndDate.ToString("yyyy/MM/dd HH:mm:ss"),
                    member_phone  = act.MemberPhone,
                    member_name   = act.MemberName,
                    member_lv     = act.MemberLevelName,
                    ex1           = act.StartEx1,
                    ex2           = isReg ? "" : act.StartEx2,
                    ex3           = act.StartEx3,
                    content       = act.StartContent,
                    amount        = act.Amount,
                    true_amount   = act.TrueAmount,
                    deduct_amount = act.DeductAmount,
                    files         = (from fp in actFiles
                                     where fp.StepID.Equals(act.StartStepID)
                                     select new {
                        id = fp.AutoID,
                        url = fp.FilePath
                    }),
                    details = details
                };
            }
            apiResp.status = true;
            apiResp.code   = (int)APIErrCode.IsSuccess;
            apiResp.result = new
            {
                id            = scoreDetail.AutoID,
                member_phone  = member.Phone,
                member_name   = member.TrueName,
                time          = scoreDetail.AddTime.ToString("yyyy/MM/dd HH:mm:ss"),
                score_event   = scoreDetail.ScoreEvent,
                rel_id        = scoreDetail.RelationID,
                serial_number = scoreDetail.SerialNumber,
                amount        = scoreDetail.Score,
                event_amount  = scoreDetail.EventScore,
                deduct_amount = scoreDetail.DeductScore,
                ex1           = scoreDetail.Ex1,
                ex2           = scoreDetail.Ex2,
                ex3           = scoreDetail.Ex3,
                ex4           = scoreDetail.Ex4,
                ex5           = scoreDetail.Ex5,
                flow_action   = flow_action
            };
            bllUser.ContextResponse(context, apiResp);
        }
示例#13
0
文件: Get.ashx.cs 项目: uvbs/mmp
        public void ProcessRequest(HttpContext context)
        {
            string     id                      = context.Request["id"];
            string     websiteOwner            = bllFlow.WebsiteOwner;
            FlowAction act                     = bllFlow.GetByKey <FlowAction>("AutoID", id, websiteOwner: websiteOwner);
            List <FlowActionDetail> actDetails = bllFlow.GetActionDetails(websiteOwner, act.AutoID, act.FlowID);

            string handleUserId            = currentUserInfo.UserID;
            string handleGroupId           = currentUserInfo.PermissionGroupID.HasValue ? currentUserInfo.PermissionGroupID.Value.ToString() : "";
            bool   isCanAction             = bllFlow.IsCanAction(websiteOwner, act.AutoID, handleUserId, handleGroupId);
            List <FlowActionFile> actFiles = bllFlow.GetActionFiles(websiteOwner, act.AutoID, act.FlowID);
            List <UserInfo>       uList    = new List <UserInfo>();
            UserInfo member = bllUser.GetUserInfo(act.MemberID, websiteOwner);

            if (member != null)
            {
                uList.Add(member);
            }
            UserInfo cu = uList.FirstOrDefault(p => p.UserID == act.CreateUserID);

            if (cu == null)
            {
                cu = bllUser.GetUserInfo(act.CreateUserID, websiteOwner);
                if (cu != null)
                {
                    uList.Add(cu);
                }
            }
            UserInfo regUser            = null;
            string   regUserLevelString = "";
            double   regUseAmount       = 0;

            if (act.FlowKey == "CancelRegister" && !string.IsNullOrWhiteSpace(member.RegUserID))
            {
                regUser = bllUser.GetUserInfo(member.RegUserID, websiteOwner);
                UserLevelConfig levelConfig = bll.QueryUserLevel(websiteOwner, "DistributionOnLine", regUser.MemberLevel.ToString());
                if (levelConfig != null)
                {
                    regUserLevelString = levelConfig.LevelString;
                }
                UserScoreDetailsInfo regScore = bllScore.GetNewScore(websiteOwner, "TotalAmount", userIDs: member.UserID, colName: "AutoID,Score", scoreEvents: "他人注册转入", startTime: member.Regtime.Value.ToString("yyyy-MM-dd"));
                if (regScore != null)
                {
                    regUseAmount = regScore.Score;
                }
            }

            UserInfo upUser            = null;
            string   upUserLevelString = "";

            if (act.FlowKey == "RegisterOffLine" || act.FlowKey == "CancelRegister" || act.FlowKey == "EmptyBilFill")
            {
                upUser = bllUser.GetUserInfo(member.DistributionOwner, websiteOwner);
                UserLevelConfig upLevelConfig = bll.QueryUserLevel(websiteOwner, "DistributionOnLine", upUser.MemberLevel.ToString());
                if (upLevelConfig != null)
                {
                    upUserLevelString = upLevelConfig.LevelString;
                }
            }

            List <dynamic> handles = new List <dynamic>();

            foreach (var item in actDetails)
            {
                UserInfo ru = uList.FirstOrDefault(p => p.UserID == item.HandleUserID);
                if (ru == null)
                {
                    ru = bllUser.GetUserInfo(item.HandleUserID, websiteOwner);
                    if (ru != null)
                    {
                        uList.Add(ru);
                    }
                }
                var files = (from fp in actFiles
                             where fp.StepID.Equals(item.StepID)
                             select new
                {
                    id = fp.AutoID,
                    url = fp.FilePath
                });

                handles.Add(new
                {
                    id               = item.AutoID,
                    ex1              = item.Ex1,
                    ex2              = item.Ex2,
                    ex3              = item.Ex3,
                    content          = item.HandleContent,
                    handle_time      = item.HandleDate.ToString("yyyy/MM/dd HH:mm:ss"),
                    stepname         = item.StepName,
                    handle_user_id   = ru == null ? 0 : ru.AutoID,
                    handle_user_name = ru == null ? "" : bllUser.GetUserDispalyName(ru),
                    select_date      = item.HandleSelectDate.ToString("yyyy/MM/dd HH:mm:ss"),
                    files            = files
                });
            }
            apiResp.result = new
            {
                id               = act.AutoID,
                flowname         = act.FlowName,
                stepname         = act.StepName,
                amount           = act.Amount,
                true_amount      = act.TrueAmount,
                deduct_amount    = act.DeductAmount,
                status           = act.Status,
                ex1              = act.StartEx1,
                ex2              = act.StartEx2,
                ex3              = act.StartEx3,
                content          = act.StartContent,
                select_date      = act.StartSelectDate.ToString("yyyy/MM/dd HH:mm:ss"),
                member_id        = member == null ? act.MemberAutoID : member.AutoID,
                member_name      = member == null ? act.MemberName : bllUser.GetUserDispalyName(member),
                member_phone     = member == null ? act.MemberPhone : member.Phone,
                member_regtime   = member == null ? "" : member.Regtime.Value.ToString("yyyy/MM/dd HH:mm:ss"),
                lvname           = act.MemberLevelName,
                create_user_id   = cu == null ? 0 : cu.AutoID,
                create_user_name = cu == null ? "" : bllUser.GetUserDispalyName(cu),
                start            = act.CreateDate.ToString("yyyy/MM/dd HH:mm:ss"),
                end              = act.EndDate.ToString("yyyy/MM/dd HH:mm:ss"),
                handles          = handles,
                can_act          = isCanAction,
                way              = member == null ? "":member.RegisterWay,
                reg              = regUser == null ? null:new
                {
                    uid    = regUser.AutoID,
                    name   = bllUser.GetUserDispalyName(regUser),
                    level  = regUserLevelString,
                    phone  = regUser.Phone,
                    amount = regUseAmount
                },
                up = upUser == null ? null : new
                {
                    uid   = upUser.AutoID,
                    name  = bllUser.GetUserDispalyName(upUser),
                    level = upUserLevelString,
                    phone = upUser.Phone
                },
            };
            apiResp.code   = (int)APIErrCode.IsSuccess;
            apiResp.status = true;
            apiResp.msg    = "查询完成";
            bllFlow.ContextResponse(context, apiResp);
        }
示例#14
0
        public void ProcessRequest(HttpContext context)
        {
            string     data = context.Request["data"];
            OrderModel orderRequestModel;//订单模型

            try
            {
                orderRequestModel = JSONHelper.JsonToModel <OrderModel>(data);
            }
            catch (Exception ex)
            {
                apiResp.msg  = "提交格式错误";
                apiResp.code = (int)APIErrCode.OperateFail;
                bllMall.ContextResponse(context, apiResp);
                return;
            }

            WXMallProductInfo productInfo = bllMall.GetProduct(orderRequestModel.product_id.ToString());

            if (productInfo == null)
            {
                apiResp.msg  = "记录没有找到";
                apiResp.code = (int)APIErrCode.IsNotFound;
                bllMall.ContextResponse(context, apiResp);
                return;
            }
            WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表

            orderInfo.ArticleCategoryType = productInfo.ArticleCategoryType;
            orderInfo.InsertDate          = DateTime.Now;
            orderInfo.OrderUserID         = CurrentUserInfo.UserID;
            orderInfo.WebsiteOwner        = bllMall.WebsiteOwner;
            orderInfo.OrderMemo           = orderRequestModel.buyer_memo;
            orderInfo.UseAmount           = orderRequestModel.use_amount;
            if (orderRequestModel.receiver_id == 0)
            {
                orderInfo.Consignee = CurrentUserInfo.TrueName;
                orderInfo.Phone     = CurrentUserInfo.Phone;
            }
            else
            {
                WXConsigneeAddress nUserAddress = bllMall.GetByKey <WXConsigneeAddress>("AutoID", orderRequestModel.receiver_id.ToString());
                orderInfo.Consignee            = nUserAddress.ConsigneeName;
                orderInfo.Phone                = nUserAddress.Phone;
                orderInfo.Address              = nUserAddress.Address;
                orderInfo.ZipCode              = nUserAddress.ZipCode;
                orderInfo.ReceiverProvince     = nUserAddress.Province;
                orderInfo.ReceiverProvinceCode = nUserAddress.ProvinceCode;
                orderInfo.ReceiverCity         = nUserAddress.City;
                orderInfo.ReceiverCityCode     = nUserAddress.CityCode;
                orderInfo.ReceiverDist         = nUserAddress.Dist;
                orderInfo.ReceiverDistCode     = nUserAddress.DistCode;
            }

            orderInfo.Transport_Fee = 0;
            orderInfo.Status        = "待付款";
            if (orderRequestModel.pay_type == "WEIXIN")//微信支付
            {
                orderInfo.PaymentType = 2;
            }
            else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付
            {
                orderInfo.PaymentType = 1;
            }
            if (orderRequestModel.skus == null || orderRequestModel.skus.Count == 0)
            {
                apiResp.msg  = "Skus不能为空";
                apiResp.code = (int)APIErrCode.OperateFail;
                bllMall.ContextResponse(context, apiResp);
                return;
            }

            #region 商品检查 订单详情生成
            //订单详情
            List <WXMallOrderDetailsInfo> detailList      = new List <WXMallOrderDetailsInfo>(); //主商品订单明细
            List <WXMallOrderDetailsInfo> detailAddedList = new List <WXMallOrderDetailsInfo>(); //增值服务订单明细
            orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList();
            #region 购买的商品
            foreach (var sku in orderRequestModel.skus)
            {
                ProductSku             productSku  = bllMall.GetProductSku(sku.sku_id);
                WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo();
                detailModel.TotalCount          = sku.count;
                detailModel.OrderPrice          = bllMall.GetSkuPrice(productSku);
                detailModel.SkuId               = productSku.SkuId;
                detailModel.ArticleCategoryType = productSku.ArticleCategoryType;
                if (productSku.ArticleCategoryType.Contains("Added"))
                {
                    WXMallProductInfo rproductInfo = bllMall.GetProduct(productSku.ProductId.ToString());
                    detailModel.PID         = rproductInfo.PID;
                    detailModel.ProductName = rproductInfo.PName;
                    detailModel.Unit        = rproductInfo.Unit;
                    detailAddedList.Add(detailModel);
                }
                else
                {
                    detailModel.PID         = productInfo.PID;
                    detailModel.ProductName = productInfo.PName;
                    detailModel.StartDate   = sku.start_date;
                    detailModel.EndDate     = sku.end_date;
                    detailModel.Unit        = productInfo.Unit;
                    detailList.Add(detailModel);
                }
            }
            #endregion
            if (detailList.Count == 0)
            {
                apiResp.msg  = "请选择预约时间";
                apiResp.code = (int)APIErrCode.OperateFail;
                bllMall.ContextResponse(context, apiResp);
                return;
            }
            //已有订单详情
            List <WXMallOrderDetailsInfo> oDetailList = bllMall.GetOrderDetailsList(null, productInfo.PID, productInfo.ArticleCategoryType, detailList.Min(p => p.StartDate), detailList.Max(p => p.EndDate));
            List <string> hasOrderID_List             = new List <string>();
            string        hasOrderIDs = "";
            int           maxCount    = productInfo.Stock;
            foreach (var item in detailList)
            {
                List <WXMallOrderDetailsInfo> hasOrderDetailList = oDetailList.Where(p => !((item.StartDate >= p.EndDate && item.EndDate > p.EndDate) || (item.StartDate < p.StartDate && item.EndDate <= p.StartDate))).ToList();
                if (hasOrderDetailList.Count >= maxCount)
                {
                    hasOrderID_List.AddRange(hasOrderDetailList.Select(p => p.OrderID).Distinct());
                }
            }
            if (hasOrderID_List.Count > 0)
            {
                hasOrderID_List = hasOrderID_List.Distinct().ToList();
                hasOrderIDs     = MyStringHelper.ListToStr(hasOrderID_List, "'", ",");
                int tempCount = 0;
                List <WXMallOrderInfo> tempList = bllMall.GetOrderList(0, 1, "", out tempCount, "预约成功", null, null, null,
                                                                       null, null, null, null, null, null, null, orderInfo.ArticleCategoryType, hasOrderIDs);
                if (tempCount >= maxCount)
                {
                    apiResp.msg  = "所选时间已有成功的预约";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
            }
            //增值服务合并到主订单明细列表
            detailList.AddRange(detailAddedList);
            //合计计算
            orderInfo.Product_Fee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;

            #region 积分计算

            decimal scoreExchangeAmount = 0;//积分抵扣的金额
            //积分计算
            if (orderRequestModel.use_score > 0 && orderInfo.Product_Fee > 0)
            {
                orderInfo.UseScore = orderRequestModel.use_score;
                if (CurrentUserInfo.TotalScore < orderRequestModel.use_score)
                {
                    apiResp.msg  = "积分不足";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
                ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2);
            }
            //积分计算
            #endregion

            #region 使用账户余额
            if (orderRequestModel.use_amount > 0)
            {
                if (!bllMall.IsEnableAccountAmountPay())
                {
                    apiResp.msg  = "未开启余额支付";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
                if (CurrentUserInfo.AccountAmount < orderRequestModel.use_amount)
                {
                    apiResp.msg  = "您的账户余额不足";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
            }
            #endregion

            orderInfo.TotalAmount   = orderInfo.Product_Fee + orderInfo.Transport_Fee;
            orderInfo.TotalAmount  -= scoreExchangeAmount;                             //积分优惠金额
            orderInfo.TotalAmount  -= orderRequestModel.use_amount;                    //余额抵扣金额
            orderInfo.PayableAmount = orderInfo.TotalAmount - orderInfo.Transport_Fee; //应付金额
            if ((orderInfo.Product_Fee + orderInfo.Transport_Fee - scoreExchangeAmount) < orderInfo.TotalAmount)
            {
                apiResp.msg  = "积分兑换金额不能大于订单总金额,请减少积分兑换";
                apiResp.code = (int)APIErrCode.OperateFail;
                bllMall.ContextResponse(context, apiResp);
                return;
            }

            if (orderInfo.TotalAmount < 0)
            {
                orderInfo.TotalAmount = 0;
            }
            if (orderInfo.TotalAmount == 0 && orderInfo.UseScore == 0)
            {
                orderInfo.Status = "待审核";
            }
            else if (orderInfo.TotalAmount == 0 && (orderInfo.UseAmount > 0 || orderInfo.UseScore > 0))
            {
                orderInfo.PaymentStatus = 1;
                orderInfo.PayTime       = DateTime.Now;
                orderInfo.Status        = "预约成功";
            }

            #endregion

            //生成订单ID
            orderInfo.OrderID = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder);
            BLLTransaction tran = new BLLTransaction();
            if (!this.bllMall.Add(orderInfo, tran))
            {
                tran.Rollback();
                apiResp.msg  = "提交失败";
                apiResp.code = (int)APIErrCode.OperateFail;
                bllMall.ContextResponse(context, apiResp);
                return;
            }
            foreach (var item in detailList)
            {
                item.OrderID = orderInfo.OrderID;
                if (!this.bllMall.Add(item, tran))
                {
                    tran.Rollback();
                    apiResp.msg  = "提交失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
            }

            #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.msg  = "更新用户积分失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, 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.RelationID   = orderInfo.OrderID;
                scoreRecord.WebSiteOwner = CurrentUserInfo.WebsiteOwner;
                if (!bllMall.Add(scoreRecord))
                {
                    tran.Rollback();
                    apiResp.msg  = "插入积分记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
            }
            //积分扣除
            #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.msg  = "更新用户余额失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, 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 = bllMall.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 = bllMall.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.msg  = "插入余额记录失败";
                    apiResp.code = (int)APIErrCode.OperateFail;
                    bllMall.ContextResponse(context, apiResp);
                    return;
                }
            }


            #endregion
            tran.Commit();//提交订单事务

            if (orderInfo.Status == "预约成功")
            {
                int tempCount = 0;
                if (string.IsNullOrWhiteSpace(hasOrderIDs))
                {
                    hasOrderIDs = "'0'";
                }
                List <WXMallOrderInfo> tempList = bllMall.GetOrderList(0, 1, "", out tempCount, "预约成功", null, null, null,
                                                                       null, null, null, null, null, null, null, orderInfo.ArticleCategoryType, hasOrderIDs);
                tempCount = tempCount + 1; //加上当前订单的数量
                if (tempCount >= maxCount)
                {
                    tempList = bllMall.GetColOrderListInStatus("'待付款','待审核'", hasOrderIDs, "OrderID,OrderUserID,UseScore", bllMall.WebsiteOwner);
                    if (tempList.Count > 0)
                    {
                        string stopOrderIds = MyStringHelper.ListToStr(tempList.Select(p => p.OrderID).ToList(), "'", ",");
                        tempList = tempList.Where(p => p.UseScore > 0).ToList();
                        foreach (var item in tempList)
                        {
                            UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID, bllMall.WebsiteOwner);//下单用户信息
                            if (orderUserInfo == null)
                            {
                                continue;
                            }
                            orderUserInfo.TotalScore += item.UseScore;
                            if (bllMall.Update(orderUserInfo, string.Format(" TotalScore+={0}", item.UseScore),
                                               string.Format(" UserID='{0}'", item.OrderUserID)) > 0)
                            {
                                UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                                scoreRecord.AddTime      = DateTime.Now;
                                scoreRecord.Score        = item.UseScore;
                                scoreRecord.TotalScore   = orderUserInfo.TotalScore;
                                scoreRecord.ScoreType    = "OrderCancel";
                                scoreRecord.UserID       = item.OrderUserID;
                                scoreRecord.RelationID   = item.OrderID;
                                scoreRecord.AddNote      = "预约-订单失败返还积分";
                                scoreRecord.WebSiteOwner = item.WebsiteOwner;
                                bllMall.Add(scoreRecord);
                            }
                        }
                        bllMall.Update(new WXMallOrderInfo(),
                                       string.Format("Status='{0}'", "预约失败"),
                                       string.Format("OrderID In ({0}) and WebsiteOwner='{1}'", stopOrderIds, bllMall.WebsiteOwner));
                    }
                }
            }


            //预约通知
            bllWeiXin.SendTemplateMessageNotifyComm(CurrentUserInfo, orderInfo.Status, string.Format("预约:{2}\\n订单号:{0}\\n订单金额:{1}元", orderInfo.OrderID, orderInfo.TotalAmount, productInfo.PName));

            apiResp.result = new
            {
                order_id = orderInfo.OrderID
            };
            apiResp.msg    = "提交完成";
            apiResp.code   = (int)APIErrCode.IsSuccess;
            apiResp.status = true;
            bllMall.ContextResponse(context, apiResp);
        }
示例#15
0
        public void ProcessRequest(HttpContext context)
        {
            string type = context.Request["type"];

            string id = context.Request["id"];

            string address = context.Request["address"];

            if (string.IsNullOrEmpty(type))
            {
                apiResp.msg = "未找到签到";
                bllSignIn.ContextResponse(context, apiResp);
                return;
            }

            UserInfo currUser = bllSignIn.GetCurrentUserInfo();

            DateTime dt = DateTime.Now;

            string dtStr = dt.ToString("yyyy/MM/dd");

            string startTime = GetMondayDate(dt).ToString("yyyy/MM/dd");

            SignInAddress signInAddress = bllSignIn.Get <SignInAddress>(string.Format(" WebsiteOwner='{0}' AND Type='{1}'", bllSignIn.WebsiteOwner, type));

            int[] scores = new int[] { signInAddress.SundayScore, signInAddress.MondayScore, signInAddress.TuesdayScore, signInAddress.WednesdayScore, signInAddress.ThursdayScore, signInAddress.FridayScore, signInAddress.SaturdayScore };


            ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();

            SignInLog model = bllSignIn.Get <SignInLog>(string.Format(" WebsiteOwner='{0}' AND UserId='{1}' AND Type='{2}' AND SignInDate='{3}'", bllSignIn.WebsiteOwner, bllSignIn.GetCurrUserID(), type, dtStr), tran);

            if (model == null)
            {
                model              = new SignInLog();
                model.AddressId    = Convert.ToInt32(id);
                model.Address      = address;
                model.WebsiteOwner = bllSignIn.WebsiteOwner;
                model.UserID       = bllSignIn.GetCurrUserID();
                model.CreateDate   = dt;
                model.Remark       = "周签到";
                model.Type         = type;
                model.SignInDate   = dt.ToString("yyyy/MM/dd");
                model.Status       = 0;
                int addScore = scores[Convert.ToInt32(dt.DayOfWeek)];

                if (model.Type == "Sign")
                {
                    model.Ex1 = "签到获得" + addScore.ToString() + "积分,日期:" + dt.ToString("yyyy/MM/dd");
                }

                DateTime startWeek = GetMondayDate(dt);

                string starkWeekStr = startWeek.ToString("yyyy/MM/dd");//本周周一

                UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                scoreRecord.UserID       = currUser.UserID;
                scoreRecord.AddTime      = dt;
                scoreRecord.TotalScore   = currUser.TotalScore;
                scoreRecord.Score        = addScore;
                scoreRecord.ScoreType    = "SignIn";
                scoreRecord.AddNote      = "签到";
                scoreRecord.RelationID   = bllSignIn.GetCurrUserID();
                scoreRecord.WebSiteOwner = bllSignIn.WebsiteOwner;
                scoreRecord.Ex6          = "签到获得" + addScore + "积分,日期:" + dt.ToString("yyyy/MM/dd");

                try
                {
                    if (!bllSignIn.Add(model, tran))
                    {
                        tran.Rollback();
                        apiResp.msg  = "签到失败";
                        apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                        bllSignIn.ContextResponse(context, apiResp);
                        return;
                    }
                    if (bllSignIn.Update(currUser, string.Format(" TotalScore=IsNull(TotalScore,0)+{0}", addScore), string.Format(" AutoId={0}", currUser.AutoID), tran) <= 0)
                    {
                        tran.Rollback();
                        apiResp.msg  = "添加积分失败";
                        apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                        bllSignIn.ContextResponse(context, apiResp);
                        return;
                    }
                    if (!bllSignIn.Add(scoreRecord, tran))
                    {
                        tran.Rollback();
                        apiResp.msg  = "添加积分详情失败";
                        apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                        bllSignIn.ContextResponse(context, apiResp);
                        return;
                    }
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    apiResp.msg  = "异常:" + ex.Message;
                    apiResp.code = (int)BLLJIMP.Enums.APIErrCode.OperateFail;
                    bllSignIn.ContextResponse(context, apiResp);
                    return;
                }



                tran.Commit();
                apiResp.status = true;
                apiResp.msg    = "签到成功";
            }
            else
            {
                apiResp.msg = "已签到";
            }
            bllSignIn.ContextResponse(context, apiResp);
        }
示例#16
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));
        }
示例#17
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;
            }
        }
示例#18
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                //Tolog("进入支付回调");
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(Request.InputStream);
                xmlDoc.Save(string.Format("C:\\WXPay\\Notify{0}.xml", DateTime.Now.ToString("yyyyMMddHHmmssfff")));//写入日志
                //全部参数
                Dictionary <string, string> parametersAll = new Dictionary <string, string>();
                foreach (XmlElement item in xmlDoc.DocumentElement.ChildNodes)
                {
                    string key   = item.Name;
                    string value = item.InnerText;
                    if ((!string.IsNullOrEmpty(key)) && (!string.IsNullOrEmpty(value)))
                    {
                        parametersAll.Add(key, value);
                    }
                }
                parametersAll = (from entry in parametersAll
                                 orderby entry.Key ascending
                                 select entry).ToDictionary(pair => pair.Key, pair => pair.Value);//全部参数排序
                orderInfo = bllMall.GetOrderInfo(parametersAll["out_trade_no"]);
                PayConfig payConfig = bllPay.GetPayConfig();
                if (!bllPay.VerifySignatureWx(parametersAll, payConfig.WXPartnerKey))//验证签名
                {
                    Tolog("验证签名出错");
                    Response.Write(failXml);
                    return;
                }
                if (orderInfo == null)
                {
                    Tolog("订单未找到");
                    Response.Write(failXml);
                    return;
                }
                if (orderInfo.PaymentStatus.Equals(1))
                {
                    //Tolog("已支付");
                    Response.Write(successXml);
                    return;
                }
                orderInfo.PaymentType = 2;

                //更新订单状态
                WXMallProductInfo tProductInfo = new WXMallProductInfo();
                if (parametersAll["return_code"].Equals("SUCCESS") && parametersAll["result_code"].Equals("SUCCESS")) //交易成功
                {
                    UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID, bllUser.WebsiteOwner);        //下单用户信息
                    string   hasOrderIDs   = "";
                    int      maxCount      = 1;
                    //Tolog("准备检查更新订单状态");
                    if (BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType))
                    {
                        //Tolog("预订类型");
                        #region 预约订单修改状态
                        orderInfo.PaymentStatus = 1;
                        orderInfo.PayTime       = DateTime.Now;
                        orderInfo.Status        = "预约成功";

                        #region 检查是否有预约成功的订单
                        List <WXMallOrderDetailsInfo> tDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID, null, orderInfo.ArticleCategoryType, null, null);
                        List <WXMallOrderDetailsInfo> oDetailList = bllMall.GetOrderDetailsList(null, tDetailList[0].PID, orderInfo.ArticleCategoryType, tDetailList.Min(p => p.StartDate), tDetailList.Max(p => p.EndDate));
                        tProductInfo = bllMall.GetByKey <WXMallProductInfo>("PID", tDetailList[0].PID);
                        maxCount     = tProductInfo.Stock;
                        List <string> hasOrderIDList = new List <string>();
                        foreach (var item in tDetailList)
                        {
                            List <WXMallOrderDetailsInfo> hasOrderDetailList = oDetailList.Where(p => !((item.StartDate >= p.EndDate && item.EndDate > p.EndDate) || (item.StartDate < p.StartDate && item.EndDate <= p.StartDate))).ToList();
                            if (hasOrderDetailList.Count >= maxCount)
                            {
                                hasOrderIDList.AddRange(hasOrderDetailList.Select(p => p.OrderID).Distinct());
                            }
                        }
                        hasOrderIDList = hasOrderIDList.Where(p => !p.Contains(orderInfo.OrderID)).ToList();
                        if (hasOrderIDList.Count > 0)
                        {
                            hasOrderIDList = hasOrderIDList.Distinct().ToList();
                            hasOrderIDs    = MyStringHelper.ListToStr(hasOrderIDList, "'", ",");
                        }
                        #endregion 检查是否有预约成功的订单

                        #endregion 预约订单修改状态
                    }
                    else
                    {
                        //Tolog("普通类型");
                        #region 原订单修改状态
                        orderInfo.PaymentStatus = 1;
                        orderInfo.Status        = "待发货";
                        orderInfo.PayTime       = DateTime.Now;
                        if (orderInfo.DeliveryType == 1)
                        {
                            orderInfo.Status = "待自提";
                        }
                        Tolog("更改状态start");
                        //if (bllMall.GetWebsiteInfoModelFromDataBase().IsDistributionMall.Equals(1))
                        //{
                        orderInfo.GroupBuyStatus     = "0";
                        orderInfo.DistributionStatus = 1;

                        //if (orderInfo.IsMain==1)
                        //{
                        //    bllMall.Update(orderInfo,string.Format(" DistributionStatus=1"),string.Format("ParentOrderId='{0}'",orderInfo.OrderID));
                        //}



                        #region 活动订单
                        if (orderInfo.OrderType == 4)
                        {
                            ActivityDataInfo data = bllMall.Get <ActivityDataInfo>(string.Format(" OrderId='{0}'", orderInfo.OrderID));
                            if (data != null)
                            {
                                bllMall.Update(data, string.Format(" PaymentStatus=1"), string.Format("  OrderId='{0}'", orderInfo.OrderID));
                            }
                        }
                        #endregion


                        bllMall.Update(orderInfo, string.Format("PaymentStatus=1,Status='待发货',PayTime=GETDATE(),DistributionStatus=1"), string.Format("ParentOrderId='{0}'", orderInfo.OrderID));


                        //}
                        #endregion 原订单修改状态

                        try
                        {
                            //设置交易流水号
                            orderInfo.PayTranNo = parametersAll["transaction_id"];
                        }
                        catch (Exception ex)
                        {
                            Tolog("设置交易流水号失败:" + ex.Message);
                        }
                    }
                    bool result = false;

                    if (BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType))
                    {
                        if (string.IsNullOrWhiteSpace(hasOrderIDs))
                        {
                            hasOrderIDs = "'0'";
                        }
                        result = bllMall.Update(new WXMallOrderInfo(),
                                                string.Format("PaymentStatus={0},PayTime=GetDate(),Status='{1}'", 1, "预约成功"),
                                                string.Format("OrderID='{0}' and WebsiteOwner='{4}' AND (select count(1) from [ZCJ_WXMallOrderInfo] where Status='{3}' and WebsiteOwner='{4}' and  OrderID IN({1}))<{2}",
                                                              orderInfo.OrderID, hasOrderIDs, maxCount, "预约成功", bllMall.WebsiteOwner)
                                                ) > 0;
                        if (result)
                        {
                            // #region 交易成功加积分
                            //增加积分 (慧聚不需要)
                            //if (orderInfo.TotalAmount > 0)
                            //{
                            //    ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                            //    int addScore = 0;
                            //    if (scoreConfig != null && scoreConfig.OrderAmount > 0 && scoreConfig.OrderScore > 0)
                            //    {
                            //        addScore = (int)(orderInfo.PayableAmount / (scoreConfig.OrderAmount / scoreConfig.OrderScore));
                            //    }
                            //    if (addScore > 0)
                            //    {
                            //        if (bllUser.Update(new UserInfo(),
                            //            string.Format(" TotalScore+={0},HistoryTotalScore+={0}", addScore),
                            //            string.Format(" UserID='{0}'", orderInfo.OrderUserID)) > 0)
                            //        {
                            //            UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                            //            scoreRecord.AddTime = DateTime.Now;
                            //            scoreRecord.Score = addScore;
                            //            scoreRecord.ScoreType = "OrderSuccess";
                            //            scoreRecord.UserID = orderInfo.OrderUserID;
                            //            scoreRecord.AddNote = "预约-交易成功获得积分";
                            //            bllMall.Add(scoreRecord);
                            //        }
                            //    }
                            //}
                            // #endregion

                            #region 修改其他预约订单为预约失败 返还积分

                            if (BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType) && !string.IsNullOrWhiteSpace(hasOrderIDs))
                            {
                                int tempCount = 0;
                                List <WXMallOrderInfo> tempList = bllMall.GetOrderList(0, 1, "", out tempCount, "预约成功", null, null, null,
                                                                                       null, null, null, null, null, null, null, orderInfo.ArticleCategoryType, hasOrderIDs);
                                tempCount = tempCount + 1; //加上当前订单的数量
                                if (tempCount >= maxCount)
                                {
                                    tempList = bllMall.GetColOrderListInStatus("'待付款','待审核'", hasOrderIDs, "OrderID,OrderUserID,UseScore", bllMall.WebsiteOwner);
                                    if (tempList.Count > 0)
                                    {
                                        string stopOrderIds = MyStringHelper.ListToStr(tempList.Select(p => p.OrderID).ToList(), "'", ",");
                                        tempList = tempList.Where(p => p.UseScore > 0).ToList();
                                        foreach (var item in tempList)
                                        {
                                            orderUserInfo.TotalScore += item.UseScore;
                                            if (bllUser.Update(new UserInfo(), string.Format(" TotalScore+={0}", item.UseScore),
                                                               string.Format(" UserID='{0}'", item.OrderUserID)) > 0)
                                            {
                                                UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                                                scoreRecord.AddTime      = DateTime.Now;
                                                scoreRecord.Score        = item.UseScore;
                                                scoreRecord.TotalScore   = orderUserInfo.TotalScore;
                                                scoreRecord.ScoreType    = "OrderCancel";
                                                scoreRecord.UserID       = item.OrderUserID;
                                                scoreRecord.RelationID   = item.OrderID;
                                                scoreRecord.AddNote      = "预约-订单失败返还积分";
                                                scoreRecord.WebSiteOwner = item.WebsiteOwner;
                                                bllMall.Add(scoreRecord);
                                            }
                                        }
                                        bllMall.Update(new WXMallOrderInfo(),
                                                       string.Format("Status='{0}'", "预约失败"),
                                                       string.Format("OrderID In ({0}) and WebsiteOwner='{1}'", stopOrderIds, bllMall.WebsiteOwner));
                                    }
                                }
                                //Tolog("更改修改其他预约为预约失败");
                            }
                            #endregion
                        }
                    }
                    else
                    {
                        result = bllMall.Update(orderInfo);
                    }
                    if (result)
                    {
                        #region 拼团订单
                        if (orderInfo.OrderType == 2)
                        {
                            try
                            {
                                if (!string.IsNullOrEmpty(orderInfo.GroupBuyParentOrderId))
                                {
                                    var parentOrderInfo = bllMall.GetOrderInfo(orderInfo.GroupBuyParentOrderId);

                                    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);
                                        }
                                    }
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                        #endregion
                        Open.HongWareSDK.Client hongWareClient = new Open.HongWareSDK.Client(orderInfo.WebsiteOwner);

                        //Tolog("更改状态true");

                        #region Efast同步
                        //判读当前站点是否需要同步到驿氪和efast
                        if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncEfast, bllCommRelation.WebsiteOwner, ""))
                        {
                            try
                            {
                                Tolog("开始同步efast");

                                string outOrderId = string.Empty, msg = string.Empty;
                                var    syncResult = bllEfast.CreateOrder(orderInfo.OrderID, out outOrderId, out msg);
                                if (syncResult)
                                {
                                    orderInfo.OutOrderId = outOrderId;
                                    bllMall.Update(orderInfo);
                                }
                                Tolog(string.Format("efast订单同步结果:{0},订单号:{1},提示信息:{2}", syncResult, outOrderId, msg));
                            }
                            catch (Exception ex)
                            {
                                Tolog("efast订单同步异常:" + ex.Message);
                            }
                        }
                        #endregion

                        #region 驿氪同步
                        if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, ""))
                        {
                            try
                            {
                                Tolog("开始同步驿氪");
                                //同步成功订单到驿氪

                                //UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID);
                                //if ((!string.IsNullOrEmpty(orderUserInfo.Ex1)) && (!string.IsNullOrEmpty(orderUserInfo.Ex2)) && (!string.IsNullOrEmpty(orderUserInfo.Phone)))
                                //{
                                //    client.BonusUpdate(orderUserInfo.Ex2, -(orderInfo.UseScore), "商城下单使用积分" + orderInfo.UseScore);

                                //}
                                var uploadOrderResult = yikeClient.OrderUpload(orderInfo);

                                Tolog(string.Format("驿氪订单同步结果:{0}", Common.JSONHelper.ObjectToJson(uploadOrderResult)));
                            }
                            catch (Exception ex)
                            {
                                Tolog("驿氪订单同步异常:" + ex.Message);
                            }
                        }
                        #endregion

                        #region 付款加积分
                        try
                        {
                            bllUser.AddUserScoreDetail(orderInfo.OrderUserID, CommonPlatform.Helper.EnumStringHelper.ToString(ZentCloud.BLLJIMP.Enums.ScoreDefineType.OrderPay), bllMall.WebsiteOwner, null, null);
                        }
                        catch (Exception)
                        { }

                        #endregion


                        #region 消息通知
                        if (!BLLJIMP.BLLMall.bookingList.Contains(orderInfo.ArticleCategoryType))
                        {
                            try
                            {
                                var    productName = bllMall.GetOrderDetailsList(orderInfo.OrderID)[0].ProductName;
                                string remark      = "";
                                if (!string.IsNullOrEmpty(orderInfo.OrderMemo))
                                {
                                    remark = string.Format("客户留言:{0}", orderInfo.OrderMemo);
                                }
                                bllWeiXin.SendTemplateMessageToKefu("有新的订单", string.Format("订单号:{0}\\n订单金额:{1}元\\n收货人:{2}\\n电话:{3}\\n商品:{4}\\n{5}", orderInfo.OrderID, Math.Round(orderInfo.TotalAmount, 2), orderInfo.Consignee, orderInfo.Phone, productName, remark));
                                if (orderInfo.OrderType != 4)//付费的活动不发消息
                                {
                                    if (orderInfo.WebsiteOwner != "jikuwifi")
                                    {
                                        string url = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/orderDetail/{1}#/orderDetail/{1}", Request.Url.Host, orderInfo.OrderID);
                                        if (orderInfo.IsMain == 1)
                                        {
                                            url = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/orderList#/orderList", Request.Url.Host);
                                        }
                                        bllWeiXin.SendTemplateMessageNotifyComm(orderUserInfo, "订单已成功支付,我们将尽快发货,请保持手机畅通等待物流送达!", string.Format("订单号:{0}\\n订单金额:{1}元\\n收货人:{2}\\n电话:{3}\\n商品:{4}...\\n查看详情", orderInfo.OrderID, Math.Round(orderInfo.TotalAmount, 2), orderInfo.Consignee, orderInfo.Phone, productName), url);
                                    }
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                        else
                        {
                            try
                            {
                                bllWeiXin.SendTemplateMessageToKefu(orderInfo.Status, string.Format("预约:{2}\\n订单号:{0}\\n订单金额:{1}元\\n预约人:{3}\\n预约人手机:{4}", orderInfo.OrderID, orderInfo.TotalAmount, tProductInfo.PName, orderUserInfo.TrueName, orderUserInfo.Phone));
                                bllWeiXin.SendTemplateMessageNotifyComm(orderUserInfo, orderInfo.Status, string.Format("预约:{2}\\n订单号:{0}\\n订单金额:{1}元", orderInfo.OrderID, orderInfo.TotalAmount, tProductInfo.PName));
                            }
                            catch (Exception)
                            {
                            }
                        }
                        #endregion
                        WebsiteInfo websiteInfo = bllMall.Get <WebsiteInfo>(string.Format(" WebsiteOwner='{0}'", orderInfo.WebsiteOwner));
                        #region 分销相关
                        try
                        {
                            if (bllMenuPermission.CheckUserAndPmsKey(websiteInfo.WebsiteOwner, BLLPermission.Enums.PermissionSysKey.OnlineDistribution, websiteInfo.WebsiteOwner))
                            {
                                if (string.IsNullOrWhiteSpace(orderUserInfo.DistributionOwner))
                                {
                                    if (websiteInfo.DistributionRelationBuildMallOrder == 1)
                                    {
                                        orderUserInfo.DistributionOwner = orderInfo.WebsiteOwner;
                                        bllMall.Update(orderUserInfo);
                                    }
                                }
                                bllDis.AutoUpdateLevel(orderInfo);
                                bllDis.TransfersEstimate(orderInfo);
                                bllDis.SendMessageToUser(orderInfo);
                                bllDis.UpdateDistributionSaleAmountUp(orderInfo);
                            }
                        }
                        catch (Exception ex)
                        {
                            Tolog("设置分销员异常:" + ex.Message + " 用户id:" + orderUserInfo.UserID);
                        }
                        #endregion


                        #region 宏巍通知
                        try
                        {
                            if (websiteInfo.IsUnionHongware == 1)
                            {
                                hongWareClient.OrderNotice(orderUserInfo.WXOpenId, orderInfo.OrderID);
                            }
                        }
                        catch (Exception)
                        {
                        }

                        #endregion

                        bllCard.Give(orderInfo.TotalAmount, orderUserInfo);


                        string v1ProductId = Common.ConfigHelper.GetConfigString("YGBV1ProductId");
                        string v2ProductId = Common.ConfigHelper.GetConfigString("YGBV2ProductId");
                        string v1CouponId  = Common.ConfigHelper.GetConfigString("YGBV1CouponId");
                        string v2CouponId  = Common.ConfigHelper.GetConfigString("YGBV2CouponId");

                        List <WXMallOrderDetailsInfo> orderDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID);
                        foreach (var item in orderDetailList)
                        {
                            item.IsComplete = 1;
                            bllMall.Update(item);

                            #region 购买指定商品发送指定的优惠券
                            if (!string.IsNullOrEmpty(v1ProductId) && !string.IsNullOrEmpty(v1CouponId) && item.PID == v1ProductId)
                            {
                                bllCard.SendCardCouponsByCurrUserInfo(orderUserInfo, v1CouponId);
                            }

                            if (!string.IsNullOrEmpty(v2ProductId) && !string.IsNullOrEmpty(v2CouponId) && item.PID == v2ProductId)
                            {
                                bllCard.SendCardCouponsByCurrUserInfo(orderUserInfo, v2CouponId);
                            }
                            #endregion
                        }

                        //更新销量
                        bllMall.UpdateProductSaleCount(orderInfo);
                        Response.Write(successXml);
                        return;
                    }
                    else
                    {
                        Tolog("更改状态false");
                        Response.Write(failXml);
                        return;
                    }
                }
                Tolog("返回信息有误");
                Response.Write(failXml);
            }
            catch (Exception ex)
            {
                Tolog("出错了:" + ex.Message);
                Response.Write(failXml);
            }
        }
示例#19
0
        /// <summary>
        /// 冻结积分结算
        /// </summary>
        /// <param name="orderInfo"></param>
        /// <returns></returns>
        public bool SettlementOrderLockScore(WXMallOrderInfo orderInfo, out string msg)
        {
            BLLMall bllMall = new BLLMall();
            BLLWebsiteDomainInfo bllWebsiteDomain = new BLLWebsiteDomainInfo();
            BLLWeixin            bllWeixin        = new BLLWeixin();

            msg = "";
            var lockModel = GetLockScoreByOrder(orderInfo.OrderID);

            int addScore = (int)lockModel.Score;

            if (addScore > 0)
            {
                UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID, orderInfo.WebsiteOwner);
                if (orderUserInfo == null)
                {
                    return(false);
                }
                WebsiteInfo websiteInfo = bllMall.Get <WebsiteInfo>(string.Format(" WebsiteOwner='{0}'", orderInfo.WebsiteOwner));

                ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZentCloud.ZCBLLEngine.BLLTransaction();
                try
                {
                    UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                    scoreRecord.AddTime      = DateTime.Now;
                    scoreRecord.Score        = addScore;
                    scoreRecord.TotalScore   = orderUserInfo.TotalScore;
                    scoreRecord.ScoreType    = "OrderSuccess";
                    scoreRecord.UserID       = orderInfo.OrderUserID;
                    scoreRecord.AddNote      = "微商城-交易成功获得积分";
                    scoreRecord.WebSiteOwner = orderInfo.WebsiteOwner;
                    scoreRecord.RelationID   = orderInfo.OrderID;

                    if (!bllMall.Add(scoreRecord, tran))
                    {
                        tran.Rollback();
                        return(false);
                    }
                    if (bllUser.Update(orderUserInfo, string.Format(" TotalScore+={0},HistoryTotalScore+={0}", addScore), string.Format(" AutoID={0}", orderUserInfo.AutoID), tran) <= 0)
                    {
                        tran.Rollback();
                        return(false);
                    }

                    #region 宏巍加积分
                    if (websiteInfo.IsUnionHongware == 1)
                    {
                        Open.HongWareSDK.Client hongWareClient = new Open.HongWareSDK.Client(orderInfo.WebsiteOwner);
                        var hongWareMemberInfo = hongWareClient.GetMemberInfo(orderUserInfo.WXOpenId);
                        if (hongWareMemberInfo.member != null)
                        {
                            if (!hongWareClient.UpdateMemberScore(hongWareMemberInfo.member.mobile, orderUserInfo.WXOpenId, addScore))
                            {
                                tran.Rollback();
                                return(false);
                            }
                        }
                    }
                    #endregion

                    //积分解冻
                    if (!string.IsNullOrWhiteSpace(lockModel.Memo))
                    {
                        lockModel.Memo += ";交易成功获得积分解冻";
                    }
                    else
                    {
                        lockModel.Memo = "交易成功获得积分解冻";
                    }

                    if (Update(
                            new ScoreLockInfo(),
                            string.Format(" Memo+='{0}',LockStatus=1,UnLockTime=GETDATE() ", lockModel.Memo),
                            string.Format(" ForeignkeyId='{0}' AND LockType = 1 ", orderInfo.OrderID),
                            tran
                            ) > 0)
                    {
                        #region 微信通知
                        try
                        {
                            string url = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/myscores#/myscores", bllWebsiteDomain.GetWebsiteDoMain(orderInfo.WebsiteOwner));
                            bllWeixin.SendTemplateMessageNotifyCommTask(orderUserInfo.WXOpenId, "您有一笔积分已经到账", string.Format("积分:{0}分", (int)lockModel.Score), url, "", "", "", orderInfo.WebsiteOwner);
                        }
                        catch
                        {
                        }
                        #endregion
                    }
                    else
                    {
                        msg = string.Format("处理即将到账积分失败!订单号:{0}", orderInfo.OrderID);
                        tran.Rollback();
                        return(false);
                    }
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    tran.Rollback();
                    return(false);
                }

                tran.Commit();
            }

            return(true);
        }
示例#20
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(Request.InputStream);
                try
                {
                    xmlDoc.Save(string.Format("C:\\WXPay\\Notify{0}.xml", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
                }
                catch (Exception)
                {
                }
                //全部参数
                Dictionary <string, string> parametersAll = new Dictionary <string, string>();
                foreach (XmlElement item in xmlDoc.DocumentElement.ChildNodes)
                {
                    string key   = item.Name;
                    string value = item.InnerText;
                    if ((!string.IsNullOrEmpty(key)) && (!string.IsNullOrEmpty(value)))
                    {
                        parametersAll.Add(key, value);
                    }
                }

                parametersAll = (from entry in parametersAll
                                 orderby entry.Key ascending
                                 select entry).ToDictionary(pair => pair.Key, pair => pair.Value);//全部参数排序

                BllOrder bllOrder = new BllOrder();
                BLLJIMP.Model.OrderPay orderPay = bllOrder.GetOrderPay(parametersAll["out_trade_no"], "", bllOrder.WebsiteOwner);

                BllPay    bllPay    = new BllPay();
                PayConfig payConfig = bllPay.GetPayConfig();
                if (bllPay.VerifySignatureWx(parametersAll, payConfig.WXPartnerKey))//验证签名
                {
                    if (orderPay == null)
                    {
                        Response.Write("<xml><return_code><![CDATA[FAIL]]></return_code></xml>");
                        return;
                    }

                    if (orderPay.Status == 1)
                    {
                        Response.Write("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>");
                        return;
                    }
                    orderPay.Status = 1;
                    if (bllOrder.Update(orderPay))
                    {
                        BLLUser bllUser = new BLLUser();
                        if (orderPay.Type == "1")
                        {
                            int score = 0;
                            int.TryParse(orderPay.Ex1, out score);
                            BLLKeyValueData bllKeyValueData  = new BLLKeyValueData();
                            string          ScoreDispalyName = bllKeyValueData.GetDataVaule("ScoreDispalyName", "1", bllKeyValueData.WebsiteOwner);

                            string msg = "消费" + orderPay.Total_Fee + "元,充值" + score + ScoreDispalyName;
                            if (bllUser.AddUserScoreDetail(orderPay.UserId, EnumStringHelper.ToString(ScoreDefineType.Recharge), bllUser.WebsiteOwner, score, msg))
                            {
                                Response.Write("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>");
                            }
                            else
                            {
                                Response.Write("<xml><return_code><![CDATA[FAIL]]></return_code></xml>");
                            }
                            //BLLSystemNotice bllSystemNotice = new BLLSystemNotice();
                            //bllSystemNotice.SendNotice(BLLSystemNotice.NoticeType.SystemMessage, null, null, orderPay.UserId, msg);
                        }
                        else if (orderPay.Type == "2")
                        {
                            string invoiceMsg;
                            if (orderPay.Ex1 == "1")
                            {
                                invoiceMsg = "带发票,";
                            }
                            else
                            {
                                invoiceMsg = "无发票,";
                            }

                            string msg = "充值VIP," + invoiceMsg + "消费" + orderPay.Total_Fee.ToString() + "元";


                            BLLKeyValueData bllKeyValueData = new BLLKeyValueData();
                            string          VIPDatelong     = bllKeyValueData.GetDataVaule("VIPDatelong", "1", bllKeyValueData.WebsiteOwner);
                            if (string.IsNullOrWhiteSpace(VIPDatelong))
                            {
                                VIPDatelong = "12";
                            }
                            int datelong = Convert.ToInt32(VIPDatelong);

                            BLLUserExpand bllUserExpand = new BLLUserExpand();
                            UserExpand    userVip       = bllUserExpand.GetUserExpand(BLLJIMP.Enums.UserExpandType.UserIsVip, orderPay.UserId);
                            string        userVipEndDate;
                            if (userVip == null || DateTime.Parse(userVip.DataValue) < DateTime.Now)
                            {
                                userVipEndDate = DateTime.Now.AddMonths(datelong).ToString("yyyy-MM-dd");
                            }
                            else
                            {
                                userVipEndDate = DateTime.Parse(userVip.DataValue).AddMonths(datelong).ToString("yyyy-MM-dd");
                            }
                            bllUserExpand.UpdateUserExpand(BLLJIMP.Enums.UserExpandType.UserIsVip, orderPay.UserId, userVipEndDate);

                            //更新用户字段
                            UserScoreDetailsInfo scoreModel = new UserScoreDetailsInfo();
                            scoreModel.AddNote   = msg;
                            scoreModel.AddTime   = DateTime.Now;
                            scoreModel.Score     = 0;
                            scoreModel.UserID    = orderPay.UserId;
                            scoreModel.ScoreType = "RechargeVIP";
                            UserInfo currUser = bllUser.GetUserInfo(orderPay.UserId);
                            scoreModel.TotalScore   = currUser.TotalScore;
                            scoreModel.WebSiteOwner = currUser.WebsiteOwner;
                            if (bllUser.Add(scoreModel))
                            {
                                BLLSystemNotice bllSystemNotice = new BLLSystemNotice();
                                bllSystemNotice.SendNotice(BLLSystemNotice.NoticeType.SystemMessage, null, null, orderPay.UserId, msg);

                                Response.Write("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>");
                            }
                            else
                            {
                                Response.Write("<xml><return_code><![CDATA[FAIL]]></return_code></xml>");
                            }
                        }

                        return;
                    }
                    else
                    {
                        Response.Write("<xml><return_code><![CDATA[FAIL]]></return_code></xml>");
                        return;
                    }
                }
                Response.Write("<xml><return_code><![CDATA[FAIL]]></return_code></xml>");
            }
            catch (Exception)
            {
                Response.Write("<xml><return_code><![CDATA[FAIL]]></return_code></xml>");
            }
        }
示例#21
0
        public void ProcessRequest(HttpContext context)
        {
            string orderSn = context.Request["order_sn"]; //订单号
            string status  = context.Request["status"];   //订单状态 1001 确认收货 1002取消订单

            if (string.IsNullOrEmpty(orderSn))
            {
                resp.code = (int)APIErrCode.PrimaryKeyIncomplete;
                resp.msg  = "order_sn 参数必传";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            if (string.IsNullOrEmpty(status))
            {
                resp.code = (int)APIErrCode.PrimaryKeyIncomplete;
                resp.msg  = "status 参数必传";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            var orderInfo = bllMall.GetOrderInfoByOutOrderId(orderSn);

            if (orderInfo == null)
            {
                resp.code = (int)APIErrCode.PrimaryKeyIncomplete;
                resp.msg  = "order_sn 不存在,请检查";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
            UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID, bllUser.WebsiteOwner);

            switch (status)
            {
                #region 确认收货

            case "1001":    //确认收货
                if (orderInfo.Status == "交易成功")
                {
                    resp.code = (int)APIErrCode.OperateFail;
                    resp.msg  = "重复操作";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (orderInfo.PaymentStatus == 0)
                {
                    resp.code = (int)APIErrCode.OperateFail;
                    resp.msg  = "订单未付款";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                if (orderInfo.Status == "已取消")
                {
                    resp.code = (int)APIErrCode.OperateFail;
                    resp.msg  = "订单已取消";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction();
                //交易成功处理
                try
                {
                    orderInfo.Status        = "交易成功";
                    orderInfo.ReceivingTime = DateTime.Now;
                    if (!bllMall.Update(orderInfo, tran))
                    {
                        tran.Rollback();
                        resp.code = (int)APIErrCode.OperateFail;
                        resp.msg  = "更新订单状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    #region 交易成功加积分
                    //增加积分
                    ScoreConfig scoreConfig = bllScore.GetScoreConfig();
                    int         addScore    = 0;
                    if (scoreConfig != null && scoreConfig.OrderAmount > 0 && scoreConfig.OrderScore > 0)
                    {
                        addScore = (int)(orderInfo.PayableAmount / (scoreConfig.OrderAmount / scoreConfig.OrderScore));
                    }
                    if (addScore > 0)
                    {
                        orderUserInfo.TotalScore += addScore;

                        UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                        scoreRecord.AddTime      = DateTime.Now;
                        scoreRecord.Score        = addScore;
                        scoreRecord.TotalScore   = orderUserInfo.TotalScore;
                        scoreRecord.ScoreType    = "OrderSuccess";
                        scoreRecord.UserID       = orderUserInfo.UserID;
                        scoreRecord.AddNote      = "微商城-交易成功获得积分";
                        scoreRecord.WebSiteOwner = bllMall.WebsiteOwner;
                        if (!bllMall.Add(scoreRecord, tran))
                        {
                            tran.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;
                            resp.msg  = "插入积分记录表失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                        if (bllUser.Update(orderUserInfo, string.Format(" TotalScore+={0},HistoryTotalScore+={0}", addScore), string.Format(" AutoID={0}", orderUserInfo.AutoID), tran) < 1)
                        {
                            tran.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;
                            resp.msg  = "更新用户积分失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion

                    //

                    #region 更新订单明细表状态
                    List <WXMallOrderDetailsInfo> orderDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID);
                    foreach (var orderDetail in orderDetailList)
                    {
                        orderDetail.IsComplete = 1;
                        if (!bllMall.Update(orderDetail))
                        {
                            tran.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;
                            resp.msg  = "更新订单明细表失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    resp.code = (int)APIErrCode.OperateFail;
                    resp.msg  = ex.Message;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                tran.Commit();
                resp.code   = 0;
                resp.msg    = "ok";
                resp.status = true;
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;

                //交易成功处理
                #endregion

                #region 取消订单
            case "1002":    //取消订单
                if (orderInfo.Status == "已取消")
                {
                    resp.code = (int)APIErrCode.OperateFail;
                    resp.msg  = "重复操作";
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                ZentCloud.ZCBLLEngine.BLLTransaction tranCancel = new ZCBLLEngine.BLLTransaction();
                try
                {
                    orderInfo.Status = "已取消";
                    if (!bllMall.Update(orderInfo, tranCancel))
                    {
                        tranCancel.Rollback();
                        resp.code = (int)APIErrCode.OperateFail;;
                        resp.msg  = "更新订单状态失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }

                    List <WXMallOrderDetailsInfo> orderDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID);
                    foreach (var orderDetail in orderDetailList)
                    {
                        if (orderDetail.SkuId != null)
                        {
                            ProductSku sku = bllMall.GetProductSku((int)orderDetail.SkuId);
                            if (sku != null)
                            {
                                if (bllMall.Update(sku, string.Format(" Stock+={0}", orderDetail.TotalCount), string.Format(" SkuId={0}", sku.SkuId), tranCancel) == 0)
                                {
                                    tranCancel.Rollback();
                                    resp.code = (int)APIErrCode.OperateFail;;
                                    resp.msg  = "修改sku库存失败";
                                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                                    return;
                                }
                            }
                        }
                    }
                    if (bllMall.Update(new WXMallOrderDetailsInfo(), "IsComplete=0", string.Format(" OrderId='{0}'", orderInfo.OrderID), tranCancel) <= 0)
                    {
                        tranCancel.Rollback();
                        resp.code = (int)APIErrCode.OperateFail;;
                        resp.msg  = "更新订单详情失败";
                        context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                        return;
                    }



                    #region 积分返还
                    if (orderInfo.UseScore > 0)    //使用积分 积分返还
                    {
                        orderUserInfo.TotalScore += orderInfo.UseScore;
                        if (bllUser.Update(orderUserInfo,
                                           string.Format(" TotalScore+={0}", orderInfo.UseScore),
                                           string.Format(" AutoID={0}", orderUserInfo.AutoID)) < 0)

                        {
                            tranCancel.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;;
                            resp.msg  = "积分返还失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                        UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                        scoreRecord.AddTime      = DateTime.Now;
                        scoreRecord.Score        = orderInfo.UseScore;
                        scoreRecord.TotalScore   = orderUserInfo.TotalScore;
                        scoreRecord.ScoreType    = "OrderCancel";
                        scoreRecord.UserID       = orderUserInfo.UserID;
                        scoreRecord.RelationID   = orderInfo.OrderID;
                        scoreRecord.WebSiteOwner = bllMall.WebsiteOwner;
                        scoreRecord.AddNote      = "微商城-订单取消返还积分";
                        if (!bllMall.Add(scoreRecord))
                        {
                            tranCancel.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;;
                            resp.msg  = "插入积分记录失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }
                    #endregion

                    #region 优惠券返还
                    if (!string.IsNullOrEmpty(orderInfo.MyCouponCardId))
                    {
                        var myCardCoupon = bllCardCoupon.GetMyCardCoupon(int.Parse(orderInfo.MyCouponCardId), orderUserInfo.UserID);
                        if (myCardCoupon != null && myCardCoupon.Status == 1)
                        {
                            myCardCoupon.Status = 0;
                            if (!bllCardCoupon.Update(myCardCoupon))
                            {
                                tranCancel.Rollback();
                                resp.code = (int)APIErrCode.OperateFail;;
                                resp.msg  = "优惠券更新失败";
                                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            }
                        }
                    }
                    #endregion

                    #region 账户余额返还

                    if (orderInfo.UseAmount > 0)
                    {
                        orderUserInfo.AccountAmount += orderInfo.UseAmount;
                        if (bllMall.Update(orderUserInfo, string.Format(" AccountAmount={0}", orderUserInfo.AccountAmount), string.Format(" AutoID={0}", orderUserInfo.AutoID)) < 0)
                        {
                            tranCancel.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;;
                            resp.msg  = "更新用户余额失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }

                        UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo();
                        scoreRecord.AddTime      = DateTime.Now;
                        scoreRecord.Score        = (double)orderInfo.UseAmount;
                        scoreRecord.TotalScore   = (double)orderUserInfo.AccountAmount;
                        scoreRecord.ScoreType    = "AccountAmount";
                        scoreRecord.UserID       = orderUserInfo.UserID;
                        scoreRecord.RelationID   = orderInfo.OrderID;
                        scoreRecord.WebSiteOwner = bllMall.WebsiteOwner;
                        scoreRecord.AddNote      = "微商城-订单取消返还余额";
                        if (!bllMall.Add(scoreRecord))
                        {
                            tranCancel.Rollback();
                            resp.code = (int)APIErrCode.OperateFail;;
                            resp.msg  = "插入余额记录失败";
                            context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                            return;
                        }
                    }


                    #endregion

                    tranCancel.Commit();
                    resp.code   = 0;
                    resp.msg    = "ok";
                    resp.status = true;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }
                catch (Exception ex)
                {
                    tranCancel.Rollback();
                    resp.code = (int)APIErrCode.OperateFail;;
                    resp.msg  = ex.Message;
                    context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                    return;
                }

                #endregion

            default:
                resp.code = (int)APIErrCode.OperateFail;
                resp.msg  = "不合法的 status 值";
                context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp));
                return;
            }
        }