/// <summary> /// 拒绝退款申请 /// </summary> /// <param name="context"></param> /// <returns></returns> private string RefuseApply(HttpContext context) { string orderDetailId = context.Request["order_detail_id"]; string refuseReason = context.Request["refuse_reason"]; if (string.IsNullOrEmpty(orderDetailId)) { resp.errcode = 1; resp.errmsg = "order_detail_id 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(refuseReason)) { resp.errcode = 1; resp.errmsg = "拒绝理由 不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallRefund model = bllMall.GetRefundInfoByOrderDetailId(int.Parse(orderDetailId)); model.Status = 2; model.RefuseReason = refuseReason; model.UpdateTime = DateTime.Now; WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(model.OrderDetailId); orderDetail.RefundStatus = "2"; if (!bllMall.Update(orderDetail)) { resp.errcode = 1; resp.errmsg = "操作失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.Update(model)) { resp.errmsg = "ok"; //插入维权记录 WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "商家"; log.Title = "拒绝退款申请"; log.LogContent = string.Format("拒绝原因:{0}", model.RefuseReason); log.InsertDate = DateTime.Now; log.WebSiteOwner = bllMall.WebsiteOwner; bllMall.Add(log); //插入维权记录 try { var result = yikeClient.UpdateRefundStatus(model); } catch (Exception) { } } else { resp.errcode = 1; resp.errmsg = "操作失败"; } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
public void ProcessRequest(HttpContext context) { int rows = Convert.ToInt32(context.Request["rows"]), page = Convert.ToInt32(context.Request["page"]); string for_id = context.Request["for_id"], ex_id = context.Request["ex_id"], keyword = context.Request["keyword"], type = context.Request["type"], status = context.Request["status"]; string websiteOwner = bllReview.WebsiteOwner; var total = 0; //评论 List <BLLJIMP.Model.ReviewInfo> sourceData = bllReview.GetActReviewList(out total, page, rows, for_id, keyword, "", type, ex_id, status , "AutoId,ReviewMainId,UserId,ReviewContent,InsertDate,ReviewScore,CommentImg,ForeignkeyId,Expand1,Ex2"); List <dynamic> returnList = new List <dynamic>(); List <BLLJIMP.Model.UserInfo> users = new List <BLLJIMP.Model.UserInfo>(); foreach (var item in sourceData) { BLLJIMP.Model.UserInfo pubUser = users.FirstOrDefault(p => p.UserID == item.UserId); if (pubUser == null) { pubUser = bllUser.GetUserInfo(item.UserId, websiteOwner); if (pubUser != null) { users.Add(pubUser); } } WXMallOrderDetailsInfo orderDetails = bllReview.Get <WXMallOrderDetailsInfo>(string.Format(" AutoID={0} ", !string.IsNullOrEmpty(item.Ex2)?item.Ex2:"0")); returnList.Add(new { id = item.ReviewMainId, content = item.ReviewContent, time = ZentCloud.Common.DateTimeHelper.DateTimeToUnixTimestamp(item.InsertDate), review_score = item.ReviewScore, comment_img = item.CommentImg, showprops = orderDetails == null?"":orderDetails.SkuShowProp, pub_user = pubUser == null? null: new { id = pubUser.AutoID, avatar = bllUser.GetUserDispalyAvatar(pubUser), name = bllUser.GetUserDispalyName(pubUser) } }); } apiResp.status = true; apiResp.code = (int)BLLJIMP.Enums.APIErrCode.IsSuccess; apiResp.result = new { totalcount = total, list = returnList }; bllReview.ContextResponse(context, apiResp); }
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; string orderId = context.Request["order_id"]; WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(orderId); if (orderInfo == null) { resp.errcode = 1; resp.errmsg = "订单号不存在"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (orderInfo.OrderType != 1) { resp.errcode = 1; resp.errmsg = "不是礼品订单"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (orderInfo.PaymentStatus == 0) { resp.errcode = 1; resp.errmsg = "礼品订单未付款"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (!string.IsNullOrEmpty(orderInfo.ParentOrderId)) { //resp.errcode =1; //resp.errmsg = "不是父订单"; //context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); //return; orderInfo = bllMall.GetOrderInfo(orderInfo.ParentOrderId); } WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(orderInfo.OrderID).First(); WXMallProductInfo productInfo = bllMall.GetProduct(orderDetail.PID); ProductSku skuInfo = bllMall.GetProductSku((int)orderDetail.SkuId); context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, errmsg = "ok", order_id = orderInfo.OrderID, product_name = productInfo.PName, product_img_url = bllMall.GetImgUrl(productInfo.RecommendImg), product_count = orderDetail.TotalCount, //product_properties = bllMall.GetProductProperties(skuInfo.SkuId), product_properties = "", is_get_gift = IsGetGift(orderInfo.OrderID), receiver_list = GetReceiverList(orderInfo.OrderID), send_user_info = GiftOrderUserInfo(orderInfo.OrderUserID) })); }
/// <summary> ///修改退款状态为重新打开 /// </summary> /// <param name="context"></param> /// <returns></returns> private string ReOpen(HttpContext context) { string orderDetailId = context.Request["order_detail_id"]; if (string.IsNullOrEmpty(orderDetailId)) { resp.errcode = 1; resp.errmsg = "order_detail_id 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallRefund model = bllMall.GetRefundInfoByOrderDetailId(int.Parse(orderDetailId)); model.Status = 0; if (bllMall.Update(model)) { resp.errmsg = "ok"; WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "商家"; log.Title = "修改退款状态为重新打开"; log.LogContent = string.Format("修改退款状态为重新打开"); log.InsertDate = DateTime.Now; log.WebSiteOwner = model.WebSiteOwner; bllMall.Add(log); WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(model.OrderDetailId); orderDetail.RefundStatus = "0"; bllMall.Update(orderDetail); WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(orderDetail.OrderID); if (orderInfo.IsRefund == 0) { bllMall.Update(orderInfo, string.Format(" IsRefund=1"), string.Format(" OrderID='{0}'", orderInfo.OrderID)); } } else { resp.errcode = 1; resp.errmsg = "操作失败"; } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
/// <summary> /// 申请退款 /// </summary> /// <param name="context"></param> /// <returns></returns> private string Add(HttpContext context) { string data = context.Request["data"]; RefundRequestModel refundRequest;//订单模型 try { refundRequest = ZentCloud.Common.JSONHelper.JsonToModel <RefundRequestModel>(data); //检查 if (refundRequest.order_detail_id == 0) { resp.errcode = 1; resp.errmsg = "order_detail_id 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(refundRequest.refund_reason)) { resp.errcode = 1; resp.errmsg = "请填写理由"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //if (refundRequest.refund_amount <= 0) //{ // resp.errcode = 1; // resp.errmsg = "refund_amount 参数不能小于等于0"; // return ZentCloud.Common.JSONHelper.ObjectToJson(resp); //} if (string.IsNullOrEmpty(refundRequest.phone)) { resp.errcode = 1; resp.errmsg = "请填写手机号"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.GetRefundInfoByOrderDetailId(refundRequest.order_detail_id) != null) { resp.errcode = 1; resp.errmsg = "重复提交"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //检查 WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(refundRequest.order_detail_id); if (orderDetail == null) { resp.errcode = 1; resp.errmsg = "订单详情不存在"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } var maxRefundInfo = GetMaxRefundInfoModel(refundRequest.order_detail_id.ToString()); if (refundRequest.refund_amount > maxRefundInfo.max_refund_amount) { resp.errcode = 1; resp.errmsg = "最大退款金额不能大于" + maxRefundInfo.max_refund_amount + "元"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(orderDetail.OrderID); if (orderInfo.Status == "已取消" || orderInfo.Status == "待付款") { resp.errcode = 1; resp.errmsg = "无权访问"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (orderInfo.OrderUserID != currentUserInfo.UserID) { resp.errcode = 1; resp.errmsg = "无权访问"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.GetCount <WXMallOrderInfo>(string.Format("OrderType=0 And ParentOrderId='{0}'", orderInfo.OrderID)) > 0) { resp.errcode = 1; resp.errmsg = "主订单不能申请退款"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //判断是否已参与分佣金,已分佣的订单不能申请退款 if (bllMall.HasOrderCommission(orderInfo.OrderID)) { resp.errcode = 1; resp.errmsg = "订单已参与分佣,不能退款"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //判断是否已经分积分,已经分积分的不能申请退款 var lockScoreModel = bllScore.GetLockScoreByOrder(orderInfo.OrderID); if (lockScoreModel != null) { if (lockScoreModel.LockStatus == 1) { resp.errcode = 1; resp.errmsg = "订单已返积分到账,不能退款"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } //拆单的判断父订单是否已经分积分,已经分积分的不能申请退款 if (!string.IsNullOrWhiteSpace(orderInfo.ParentOrderId)) { var lockScoreParentModel = bllScore.GetLockScoreByOrder(orderInfo.ParentOrderId); if (lockScoreParentModel != null) { if (lockScoreParentModel.LockStatus == 1) { resp.errcode = 1; resp.errmsg = "订单已返积分到账,不能退款"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } } #region 礼品订单 if (orderInfo.OrderType == 1) { if (string.IsNullOrEmpty(orderInfo.ParentOrderId)) { //子订单已经发货,不能退款 if (bllMall.GetCount <WXMallOrderInfo>(string.Format(" ParentOrderId='{0}' And ExpressNumber!=''", orderInfo.OrderID)) > 0) { resp.errcode = 1; resp.errmsg = "礼品已经发货,不能退款"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } else//子订单不能退款 { resp.errcode = 1; resp.errmsg = "礼品订单不能退款"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } #endregion WXMallRefund model = new BLLJIMP.Model.WXMallRefund(); model.RefundId = string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMddHHmm"), bllMall.GetGUID(BLLJIMP.TransacType.CommAdd)); model.OrderDetailId = refundRequest.order_detail_id; model.UserId = currentUserInfo.UserID; model.RefundReason = refundRequest.refund_reason; model.RefundAmount = refundRequest.refund_amount; model.Phone = refundRequest.phone; model.Remark = refundRequest.remark; model.IsReturnProduct = refundRequest.is_return_product; model.ProductStatus = refundRequest.product_status; model.ProductName = orderDetail.ProductName; model.UpdateTime = DateTime.Now; //ProductSku productSku = bllMall.GetProductSku((int)orderDetail.SkuId); //if (productSku == null) //{ // resp.errcode = 1; // resp.errmsg = "sku已被删除"; // return ZentCloud.Common.JSONHelper.ObjectToJson(resp); //} //model.SkuSn = productSku.SkuSN; if (refundRequest.imagelist != null && refundRequest.imagelist.Length > 0) { model.ImageList = string.Join(",", refundRequest.imagelist); } model.Status = 0; model.InsertDate = DateTime.Now; model.WebSiteOwner = bllMall.WebsiteOwner; model.OrderId = orderDetail.OrderID; model.OpenId = currentUserInfo.WXOpenId; model.RefundScore = refundRequest.refund_score; model.RefundAccountAmount = refundRequest.refund_account_amount; orderDetail.RefundStatus = model.Status.ToString(); if (refundRequest.refund_score > 0 || refundRequest.refund_account_amount > 0) { if (refundRequest.refund_score > maxRefundInfo.max_refund_score) { resp.errcode = 1; resp.errmsg = "最多退还积分不能大于" + maxRefundInfo.max_refund_score; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (refundRequest.refund_account_amount > maxRefundInfo.max_refund_account_amount) { resp.errcode = 1; resp.errmsg = "最多退还余额不能大于" + maxRefundInfo.max_refund_account_amount; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } model.IsContainTransportFee = maxRefundInfo.is_contain_transport_fee; if (!bllMall.Update(orderDetail)) { resp.errcode = 1; resp.errmsg = "申请失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.Add(model)) { string isReturnProduct = "并退货"; if (model.IsReturnProduct == 0) { isReturnProduct = "不退货"; } resp.errmsg = "ok"; //插入维权记录 WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "买家"; log.Title = "发起了退款申请,等待商家处理"; log.LogContent = string.Format("退款原因:{0}<br/>期望结果:我要退款,{1}<br/>退款金额:{2}元<br/>退还积分:{3}<br/>退还余额:{4}<br/>退款说明:{5}<br/>联系电话:{6},货物状态:{7}", model.RefundReason, isReturnProduct, model.RefundAmount, model.RefundScore, model.RefundAccountAmount, model.Remark, model.Phone, model.ProductStatus); log.InsertDate = DateTime.Now; log.WebSiteOwner = bllMall.WebsiteOwner; bllMall.Add(log); //插入维权记录 if (orderInfo.IsRefund == 0) { bllMall.Update(orderInfo, string.Format(" IsRefund=1"), string.Format(" OrderID='{0}'", orderInfo.OrderID)); } var websiteInfo = bllMall.GetWebsiteInfoModelFromDataBase(); if (websiteInfo.IsHaveUnReadRefundOrder == 0) { websiteInfo.IsHaveUnReadRefundOrder = 1; bllMall.Update(websiteInfo); } try { if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, "")) { var result = yikeClient.Refund(model); } } catch (Exception) { } //暂时取消积分 if (lockScoreModel != null) { if (lockScoreModel.LockStatus == 0) { bllScore.CancelLockScoreByOrder(orderInfo.OrderID, DateTime.Now.ToString() + " 申请退款暂时取消积分"); } } if (model.IsReturnProduct == 0)//不退货 { if (bllPer.CheckPermissionKey(orderInfo.WebsiteOwner, ZentCloud.BLLPermission.Enums.PermissionSysKey.PMS_TRANSFERSAUDIT)) { string tranInfo = string.Format("订单号:{0}<br/>退款金额:{1}<br/>{2}", model.OrderId, model.RefundAmount, log.LogContent); if (bllTran.Add("MallRefund", model.RefundId, tranInfo, model.RefundAmount)) { string title = string.Format("收到退款申请"); string content = string.Format("订单号:{0}退款金额:{1}", model.OrderId, model.RefundAmount); string url = string.Format("http://{0}/app/transfersaudit/list.aspx", System.Web.HttpContext.Current.Request.Url.Host); //发送微信模板消息 bllWeixin.SendTemplateMessageToKefuTranAuditPer(title, content, url); } else { resp.errcode = 1; resp.errmsg = "申请失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } } } else { resp.errcode = 1; resp.errmsg = "申请失败"; } } catch (Exception ex) { resp.errcode = 1; resp.errmsg = "JSON格式错误,请检查。错误信息:" + ex.Message; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
/// <summary> /// 修改退款信息(重新提交退款申请) /// </summary> /// <param name="context"></param> /// <returns></returns> private string Update(HttpContext context) { string data = context.Request["data"]; RefundRequestModel refundRequest;//订单模型 try { refundRequest = ZentCloud.Common.JSONHelper.JsonToModel <RefundRequestModel>(data); //检查 if (refundRequest.order_detail_id == 0) { resp.errcode = 1; resp.errmsg = "order_detail_id 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(refundRequest.refund_reason)) { resp.errcode = 1; resp.errmsg = "请填写理由"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //if (refundRequest.refund_amount <= 0) //{ // resp.errcode = 1; // resp.errmsg = "refund_amount 参数不能小于等于0"; // return ZentCloud.Common.JSONHelper.ObjectToJson(resp); //} if (string.IsNullOrEmpty(refundRequest.phone)) { resp.errcode = 1; resp.errmsg = "请填写手机号"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } var maxRefundInfo = GetMaxRefundInfoModel(refundRequest.order_detail_id.ToString()); if (refundRequest.refund_amount > maxRefundInfo.max_refund_amount) { resp.errcode = 1; resp.errmsg = "最大退款金额不能大于" + maxRefundInfo.max_refund_amount + "元"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (refundRequest.refund_score > 0 || refundRequest.refund_account_amount > 0) { if (refundRequest.refund_score > maxRefundInfo.max_refund_score) { resp.errcode = 1; resp.errmsg = "最多退还积分不能大于" + maxRefundInfo.max_refund_score; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (refundRequest.refund_account_amount > maxRefundInfo.max_refund_account_amount) { resp.errcode = 1; resp.errmsg = "最多退还余额不能大于" + maxRefundInfo.max_refund_account_amount; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } //检查 WXMallRefund model = bllMall.GetRefundInfoByOrderDetailId(refundRequest.order_detail_id); model.OrderDetailId = refundRequest.order_detail_id; model.UserId = currentUserInfo.UserID; model.RefundReason = refundRequest.refund_reason; model.RefundAmount = refundRequest.refund_amount; model.RefundScore = refundRequest.refund_score; model.RefundAccountAmount = refundRequest.refund_account_amount; model.Phone = refundRequest.phone; model.Remark = refundRequest.remark; model.IsReturnProduct = refundRequest.is_return_product; if (refundRequest.imagelist != null && refundRequest.imagelist.Length > 0) { model.ImageList = string.Join(",", refundRequest.imagelist); } model.Status = 0; model.InsertDate = DateTime.Now; model.RefundAddress = ""; model.RefuseReason = ""; model.ExpressCompanyCode = ""; model.ExpressCompanyName = ""; model.ExpressNumber = ""; model.ProductStatus = refundRequest.product_status; model.UpdateTime = DateTime.Now; WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(model.OrderDetailId); WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(orderDetail.OrderID); orderDetail.RefundStatus = model.Status.ToString(); if (!bllMall.Update(orderDetail)) { resp.errcode = 1; resp.errmsg = "操作失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.Update(model)) { string isReturnProduct = "并退货"; if (model.IsReturnProduct == 0) { isReturnProduct = "不退货"; } resp.errmsg = "ok"; //插入维权记录 WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "买家"; log.Title = "修改了退款申请,等待商家处理"; log.LogContent = string.Format("退款原因:{0}<br/>期望结果:我要退款,{1}<br/>退款金额:{2}元<br/>退还积分:{3}<br/>退还余额:{4}<br/>退款说明:{5}<br/>联系电话:{6},货物状态:{7}", model.RefundReason, isReturnProduct, model.RefundAmount, model.RefundScore, model.RefundAccountAmount, model.Remark, model.Phone, model.ProductStatus); log.InsertDate = DateTime.Now; log.WebSiteOwner = bllMall.WebsiteOwner; bllMall.Add(log); if (orderInfo.IsRefund == 0) { bllMall.Update(orderInfo, string.Format(" IsRefund=1"), string.Format(" OrderID='{0}'", orderInfo.OrderID)); } var websiteInfo = bllMall.GetWebsiteInfoModelFromDataBase(); if (websiteInfo.IsHaveUnReadRefundOrder == 0) { websiteInfo.IsHaveUnReadRefundOrder = 1; bllMall.Update(websiteInfo); } //插入维权记录 try { if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, "")) { var result = yikeClient.UpdateRefundStatus(model); } } catch (Exception) { } } else { resp.errcode = 1; resp.errmsg = "申请失败"; } } catch (Exception ex) { resp.errcode = 1; resp.errmsg = "JSON格式错误,请检查。错误信息:" + ex.Message; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
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)); }
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)); }
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); }
public void ProcessRequest(HttpContext context) { string orderId = context.Request["order_id"]; if (string.IsNullOrEmpty(orderId)) { apiResp.code = (int)APIErrCode.OperateFail; apiResp.msg = "order_id 必传"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return; } WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(orderId); if (orderInfo == null) { apiResp.code = (int)APIErrCode.OperateFail; apiResp.msg = "订单号不存在"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return; } if (orderInfo.OrderType != 2) { apiResp.code = (int)APIErrCode.OperateFail; apiResp.msg = "不是拼团订单"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return; } if (!string.IsNullOrEmpty(orderInfo.GroupBuyParentOrderId)) { orderInfo = bllMall.GetOrderInfo(orderInfo.GroupBuyParentOrderId); } if (orderInfo.PaymentStatus == 0) { apiResp.code = (int)APIErrCode.OperateFail; apiResp.msg = "团长订单未付款"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); return; } WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(orderInfo.OrderID).First(); WXMallProductInfo productInfo = bllMall.GetProduct(orderDetail.PID); ProductSku skuInfo = bllMall.GetProductSku((int)orderDetail.SkuId); decimal kk = Math.Round((decimal)productInfo.Price * (decimal)(orderInfo.MemberDiscount / 10), 2); apiResp.result = new { order_id = orderInfo.OrderID, product_id = productInfo.PID, product_name = productInfo.PName, summary = productInfo.Summary, priduct_price = productInfo.Price, product_price = productInfo.Price, product_img_url = bllMall.GetImgUrl(productInfo.RecommendImg), product_properties = bllMall.GetProductProperties(skuInfo.SkuId), product_desc = productInfo.PDescription, is_join = IsJoin(orderInfo), people_list = GetPeopleList(orderInfo), head_discount = orderInfo.HeadDiscount, head_price = Math.Round((decimal)productInfo.Price * (decimal)(orderInfo.HeadDiscount / 10), 2), member_discount = orderInfo.MemberDiscount, member_price = Math.Round((decimal)productInfo.Price * (decimal)(orderInfo.MemberDiscount / 10), 2), people_count = orderInfo.PeopleCount, pay_people_count = GetPayPeopleCount(orderInfo), expire_day = orderInfo.ExpireDay, is_head = IsHead(orderInfo), group_buy_status = GetGroupBuyStatus(orderInfo), end_time = bllMall.GetTimeStamp(((DateTime)orderInfo.PayTime).AddDays(orderInfo.ExpireDay)), pay_order_id = GetNeedPayOrderId(orderInfo), score = productInfo.Score, is_cashpay_only = productInfo.IsCashPayOnly, is_no_express = productInfo.IsNoExpress, sku_id = skuInfo.SkuId, ex10 = orderInfo.Ex10 }; apiResp.status = true; apiResp.msg = "ok"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(apiResp)); }
/// <summary> /// 同意退款申请,提交退货地址接口 /// </summary> /// <param name="context"></param> /// <returns></returns> private string AgreeAndSubmitRefundAddress(HttpContext context) { string orderDetailId = context.Request["order_detail_id"]; string refundAddress = context.Request["refund_address"]; if (string.IsNullOrEmpty(orderDetailId)) { resp.errcode = 1; resp.errmsg = "order_detail_id 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(refundAddress)) { resp.errcode = 1; resp.errmsg = "退货地址不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallRefund model = bllMall.GetRefundInfoByOrderDetailId(int.Parse(orderDetailId)); model.Status = 1; model.RefundAddress = refundAddress; WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(model.OrderDetailId); orderDetail.RefundStatus = model.Status.ToString(); if (!bllMall.Update(orderDetail)) { resp.errcode = 1; resp.errmsg = "操作失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.Update(model)) { resp.errmsg = "ok"; //插入维权记录 WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "商家"; log.Title = "同意退款申请"; log.LogContent = string.Format("退货地址:{0}", model.RefundAddress); log.InsertDate = DateTime.Now; log.WebSiteOwner = bllMall.WebsiteOwner; bllMall.Add(log); //插入维权记录 try { var result = yikeClient.UpdateRefundStatus(model); } catch (Exception) { } //if (bllPer.CheckPermissionKey(bllMall.WebsiteOwner, ZentCloud.BLLPermission.Enums.PermissionSysKey.PMS_TRANSFERSAUDIT)) //{ // string tranInfo = string.Format("订单号:{0}<br/>退款金额:{1}<br/>{2}", model.OrderId, model.RefundAmount, log.LogContent); // if (bllTran.Add("MallRefund", model.RefundId, tranInfo, model.RefundAmount)) // { // string title = string.Format("收到退款申请"); // string content = string.Format("订单号:{0}退款金额:{1}", model.OrderId, model.RefundAmount); // string url = string.Format("http://{0}/app/transfersaudit/list.aspx", System.Web.HttpContext.Current.Request.Url.Host); // //发送微信模板消息 // bllWeixin.SendTemplateMessageToKefuTranAuditPer(title, content, url); // } // else // { // resp.errcode = 1; // resp.errmsg = "操作失败"; // return ZentCloud.Common.JSONHelper.ObjectToJson(resp); // } //} } else { resp.errcode = 1; resp.errmsg = "操作失败"; } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
/// <summary> /// 获取最多的退款信息 /// </summary> /// <param name="context"></param> /// <returns></returns> private MaxRefundInfo GetMaxRefundInfoModel(string orderDetailId) { MaxRefundInfo model = new MaxRefundInfo(); WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(int.Parse(orderDetailId)); WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(orderDetail.OrderID); List <WXMallOrderDetailsInfo> orderDetailList = bllMall.GetOrderDetailsList(orderInfo.OrderID); List <WXMallRefund> refundList = bllMall.GetList <WXMallRefund>(string.Format(" OrderId='{0}'", orderInfo.OrderID)); var productTotalProce = ((decimal)orderDetailList.Sum(p => p.OrderPrice * p.TotalCount)); decimal rate = 0; if (productTotalProce > 0) { rate = ((decimal)orderDetail.OrderPrice * orderDetail.TotalCount) / ((decimal)orderDetailList.Sum(p => p.OrderPrice * p.TotalCount));//此商品所占的比例 } model.max_refund_amount = orderDetail.MaxRefundAmount; //商品单独需要的积分不在均摊计算范围内 int singelProductTotalScore = orderDetail.OrderScore * orderDetail.TotalCount, allProductTotalScore = orderDetailList.Sum(p => p.OrderScore * p.TotalCount); //foreach (var item in orderDetailList) //{ // allProductTotalScore += item.OrderScore * item.TotalCount; //} orderInfo.UseScore -= allProductTotalScore; if (orderInfo.UseScore > 0) { model.max_refund_score = (int)(orderInfo.UseScore * rate);//可退积分 } else { orderInfo.UseScore = 0; } if (orderInfo.UseAmount > 0) { model.max_refund_account_amount = Math.Round(orderInfo.UseAmount * rate, 2, MidpointRounding.AwayFromZero); //可退余额 } if (orderDetailList.Count == 1 && (string.IsNullOrEmpty(orderInfo.ExpressNumber))) //只买了一种商品且未发货 { //model.max_refund_amount += orderInfo.Transport_Fee; DealTransportFeeRefund(ref model, orderInfo, refundList); model.max_refund_score = orderInfo.UseScore; //if (orderInfo.UseScore > 0) //{ // if (refundList != null && refundList.Count > 0) // { // model.max_refund_score = orderInfo.UseScore - (refundList.Sum(p => p.RefundScore)); // if (model.max_refund_score < 0) // { // model.max_refund_score = 0; // } // } //} if ((bllMall.GetCount <WXMallRefund>(string.Format(" OrderId='{0}'", orderInfo.OrderID)) == orderDetailList.Count - 1) && (string.IsNullOrEmpty(orderInfo.ExpressNumber)))//只有一种商品且未发货 { model.is_contain_transport_fee = 1; } } else { #region 处理最后一种商品的情况 if ((refundList != null) && (refundList.Count == (orderDetailList.Count - 1))) //最后一种商品 { if (string.IsNullOrEmpty(orderInfo.ExpressNumber)) //最后一件商品未发货 { //model.max_refund_amount += orderInfo.Transport_Fee; DealTransportFeeRefund(ref model, orderInfo, refundList); model.is_contain_transport_fee = 1; } #region 最后一种商品的退还积分 if (orderInfo.UseScore > 0) { if (refundList != null && refundList.Count > 0) { model.max_refund_score = orderInfo.UseScore - (refundList.Sum(p => p.RefundScore)); if (model.max_refund_score < 0) { model.max_refund_score = 0; } } } #endregion #region 最后一种商品的余额退款 if (orderInfo.UseAmount > 0) { if (refundList != null && refundList.Count > 0) { model.max_refund_account_amount = orderInfo.UseAmount - (refundList.Sum(p => p.RefundAccountAmount)); if (model.max_refund_account_amount < 0) { model.max_refund_account_amount = 0; } } } #endregion } #endregion } if (singelProductTotalScore > 0) { model.max_refund_score += singelProductTotalScore; } //如果最大退款金额比实付金额还大,则说明有问题,最大退款金额重置为 0,在处理老的订单运费逻辑,重置为0是正确的,其他情况如有不对根据具体情况再分析 if (model.max_refund_amount > orderInfo.TotalAmount + orderInfo.Transport_Fee) { model.max_refund_amount = 0; } return(model); }
/// <summary> /// 买家发货 /// </summary> /// <param name="context"></param> /// <returns></returns> private string SubmitExpressInfo(HttpContext context) { string orderDetailId = context.Request["order_detail_id"]; string expressCompanyName = context.Request["express_company_name"]; string expressNumber = context.Request["express_number"]; if (string.IsNullOrEmpty(orderDetailId)) { resp.errcode = 1; resp.errmsg = "order_detail_id 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(expressCompanyName)) { resp.errcode = 1; resp.errmsg = "express_company_name 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (string.IsNullOrEmpty(expressNumber)) { resp.errcode = 1; resp.errmsg = "express_number 参数不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallRefund model = bllMall.GetRefundInfoByOrderDetailId(int.Parse(orderDetailId)); model.ExpressCompanyName = expressCompanyName; model.ExpressNumber = expressNumber; model.Status = 3; WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(model.OrderDetailId); orderDetail.RefundStatus = model.Status.ToString(); if (!bllMall.Update(orderDetail)) { resp.errcode = 1; resp.errmsg = "操作失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.Update(model)) { resp.errmsg = "ok"; //插入维权记录 WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "买家"; log.Title = "已经发货"; log.LogContent = string.Format("物流公司:{0}<br/>物流单号:{1}", model.ExpressCompanyName, model.ExpressNumber); log.InsertDate = DateTime.Now; log.WebSiteOwner = bllMall.WebsiteOwner; bllMall.Add(log); //插入维权记录 try { if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, "")) { var result = yikeClient.UpdateRefundStatus(model); } if (bllPer.CheckPermissionKey(bllMall.WebsiteOwner, ZentCloud.BLLPermission.Enums.PermissionSysKey.PMS_TRANSFERSAUDIT)) { string tranInfo = string.Format("订单号:{0}<br/>退款金额:{1}<br/>{2}", model.OrderId, model.RefundAmount, log.LogContent); if (bllTran.Add("MallRefund", model.RefundId, tranInfo, model.RefundAmount)) { string title = string.Format("收到退款申请"); string content = string.Format("订单号:{0}退款金额:{1}", model.OrderId, model.RefundAmount); string url = string.Format("http://{0}/app/transfersaudit/list.aspx", System.Web.HttpContext.Current.Request.Url.Host); //发送微信模板消息 bllWeixin.SendTemplateMessageToKefuTranAuditPer(title, content, url); } else { resp.errcode = 1; resp.errmsg = "发货失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } } catch (Exception) { } } else { resp.errcode = 1; resp.errmsg = "发货失败"; } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
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)); }
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 })); }
/// <summary> /// 添加订单 /// </summary> public void AddOrder(string oorderInfo, string websiteOwner) { OOrder oorder = ZentCloud.Common.JSONHelper.JsonToModel <OOrder>(oorderInfo); WXMallOrderInfo mallOrder = bllMall.Get <WXMallOrderInfo>(string.Format(" WebsiteOwner='{0}' AND OutOrderId='{1}'", websiteOwner, oorder.orderId)); if (mallOrder == null) { mallOrder = new WXMallOrderInfo(); ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZentCloud.ZCBLLEngine.BLLTransaction(); mallOrder.OrderID = bllMall.GetGUID(ZentCloud.BLLJIMP.TransacType.AddMallOrder); mallOrder.OutOrderId = oorder.orderId; mallOrder.Address = oorder.address; mallOrder.OrderType = 8; mallOrder.WebsiteOwner = websiteOwner; mallOrder.TakeOutType = "Eleme"; mallOrder.OrderMemo = oorder.description; if (!string.IsNullOrEmpty(oorder.createdAt)) { mallOrder.InsertDate = GetDate(oorder.createdAt); } if (!string.IsNullOrEmpty(oorder.activeAt)) { mallOrder.PayTime = GetDate(oorder.activeAt); } if (oorder.deliverFee.HasValue) { mallOrder.Transport_Fee = (decimal)oorder.deliverFee; } if (!string.IsNullOrEmpty(oorder.deliverTime)) { mallOrder.Ex2 = GetDate(oorder.deliverTime).ToString(); } mallOrder.Ex3 = oorder.invoice; mallOrder.Ex4 = oorder.book.ToString(); mallOrder.Ex5 = oorder.onlinePaid.ToString(); List <string> phoneList = oorder.phoneList; if (phoneList.Count > 0) { for (int i = 0; i < phoneList.Count; i++) { if (i == 0) { mallOrder.Phone = phoneList[i]; } mallOrder.Ex6 += phoneList[i] + ","; } mallOrder.Ex6 = mallOrder.Ex6.Remove(mallOrder.Ex6.Length - 1, 1); } mallOrder.Ex7 = oorder.shopId.ToString(); mallOrder.Ex9 = oorder.shopName; mallOrder.OrderUserID = oorder.userId.ToString(); if (oorder.totalPrice.HasValue) { mallOrder.TotalAmount = (decimal)oorder.totalPrice; } if (oorder.originalPrice.HasValue) { mallOrder.Ex10 = oorder.originalPrice.ToString(); } mallOrder.Consignee = oorder.consignee; mallOrder.Ex11 = oorder.deliveryGeo; mallOrder.Ex12 = oorder.deliveryPoiAddress; mallOrder.Ex13 = oorder.invoiced.ToString(); if (oorder.income.HasValue) { mallOrder.Ex14 = oorder.income.ToString(); } if (oorder.serviceRate.HasValue) { mallOrder.Ex15 = oorder.serviceRate.ToString(); } if (oorder.serviceFee.HasValue) { mallOrder.Ex16 = oorder.serviceFee.ToString(); } if (oorder.hongbao.HasValue) { mallOrder.Ex17 = oorder.hongbao.ToString(); } if (oorder.packageFee.HasValue) { mallOrder.Ex18 = oorder.packageFee.ToString(); } if (oorder.activityTotal.HasValue) { mallOrder.Ex19 = oorder.activityTotal.ToString(); } if (oorder.shopPart.HasValue) { mallOrder.Ex20 = oorder.shopPart.ToString(); } if (oorder.elemePart.HasValue) { mallOrder.Ex21 = oorder.elemePart.ToString(); } if (mallOrder.TotalAmount > 0) { mallOrder.PaymentStatus = 1; } mallOrder.Ex22 = oorder.downgraded.ToString(); mallOrder.OutOrderStatus = GetOrderStatus(oorder.status); mallOrder.Status = "待发货"; mallOrder.OutRefundStatus = GetRefStatus(oorder.refundStatus); mallOrder.Ex8 = oorder.openId; if (oorder.vipDeliveryFeeDiscount.HasValue) { mallOrder.Ex10 = oorder.vipDeliveryFeeDiscount.ToString(); } if (!bllWebsite.Add(mallOrder, tran)) { tran.Rollback(); resp.msg = "添加订单出错"; Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } List <OGoodsGroup> goodsGroupList = oorder.groups; foreach (var item in goodsGroupList) { WXMallOrderDetailsInfo oorderDetail = new WXMallOrderDetailsInfo(); oorderDetail.Ex1 = item.name; oorderDetail.Ex2 = item.type; oorderDetail.OrderID = mallOrder.OrderID; List <OGoodsItem> goodItems = item.items; foreach (var good in goodItems) { oorderDetail.PID = good.id.ToString(); oorderDetail.Ex3 = good.id.ToString(); oorderDetail.Ex9 = good.skuId.ToString(); oorderDetail.ProductName = good.name; oorderDetail.Ex4 = good.categoryId.ToString(); if (good.price.HasValue) { oorderDetail.OrderPrice = (decimal)good.price; } oorderDetail.TotalCount = good.quantity; if (good.total.HasValue) { oorderDetail.TotalPrice = (decimal)good.total; } oorderDetail.Ex7 = good.extendCode; oorderDetail.Ex8 = good.barCode; if (good.userPrice.HasValue) { oorderDetail.Ex10 = good.userPrice.ToString(); } if (good.shopPrice.HasValue) { oorderDetail.Ex11 = good.shopPrice.ToString(); } if (good.weight.HasValue) { oorderDetail.Wegith = (decimal)good.weight; } oorderDetail.Unit = "元"; if (good.newSpecs != null) { List <OGroupItemSpec> specList = good.newSpecs; oorderDetail.Ex5 = ZentCloud.Common.JSONHelper.ListToJson <OGroupItemSpec>(specList); } if (good.attributes != null) { List <OGroupItemAttribute> attrList = good.attributes; oorderDetail.Ex6 = ZentCloud.Common.JSONHelper.ListToJson <OGroupItemAttribute>(attrList); } if (!bllWebsite.Add(oorderDetail, tran)) { tran.Rollback(); resp.msg = "添加商品出错"; Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } } } tran.Commit(); } }
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; if (bllUser.IsLogin == false) { resp.errcode = -1; resp.errmsg = "你还没有登录,请先登录"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } string data = context.Request["data"]; RequestModel requestModel; try { requestModel = ZentCloud.Common.JSONHelper.JsonToModel <RequestModel>(context.Request["data"]); } catch (Exception) { resp.errcode = -1; resp.errmsg = "json格式错误,请检查"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //检查必填项 if (requestModel.order_id <= 0) { resp.errcode = 1; resp.errmsg = "订单号出错"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_name)) { resp.errcode = 1; resp.errmsg = "请输入收货人姓名"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_phone)) { resp.errcode = 1; resp.errmsg = "请输入收货人电话"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_province)) { resp.errcode = 1; resp.errmsg = "请输入收货人省份名称"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_province_code)) { resp.errcode = 1; resp.errmsg = "请输入收货人省份代码"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_city)) { resp.errcode = 1; resp.errmsg = "请输入收货人城市名称"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_city_code)) { resp.errcode = 1; resp.errmsg = "请输入收货人城市代码"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_dist)) { resp.errcode = 1; resp.errmsg = "请输入收货人区域名称"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_dist_code)) { resp.errcode = 1; resp.errmsg = "请输入收货人区域代码"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_address)) { resp.errcode = 1; resp.errmsg = "请输入收货人街道地址"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (string.IsNullOrEmpty(requestModel.receiver_zip)) { resp.errcode = 1; resp.errmsg = "请输入收货人邮政编码"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } WXMallGiftOrderInfo giftorder = bllUser.Get <WXMallGiftOrderInfo>(string.Format(" OrderId={0} AND UserId='{1}' AND WebsiteOwner='{2}'", requestModel.order_id, bllUser.GetCurrUserID(), bllUser.WebsiteOwner)); //检查是否已经领取 if (giftorder != null) { resp.errcode = -1; resp.errmsg = "你已经领取过了"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //查看订单详情 WXMallOrderDetailsInfo orderdetail = bllUser.Get <WXMallOrderDetailsInfo>(string.Format(" OrderID={0} ", requestModel.order_id)); int OrderCount = bllUser.GetCount <WXMallGiftOrderInfo>(string.Format(" OrderId={0} ", requestModel.order_id)); if (OrderCount >= orderdetail.TotalCount) { resp.errcode = -1; resp.errmsg = "已经领完"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } WXMallGiftOrderInfo mallGiftOrderInfo = new WXMallGiftOrderInfo(); mallGiftOrderInfo.GiftOrderId = int.Parse(bllUser.GetGUID(BLLJIMP.TransacType.CommAdd)); mallGiftOrderInfo.OrderId = requestModel.order_id; mallGiftOrderInfo.ReceiveName = requestModel.receiver_name; mallGiftOrderInfo.ReceivePhone = requestModel.receiver_phone; mallGiftOrderInfo.InsertDate = DateTime.Now; mallGiftOrderInfo.WebsiteOwner = bllUser.WebsiteOwner; mallGiftOrderInfo.UserId = bllUser.GetCurrUserID(); mallGiftOrderInfo.ReceiverProvince = requestModel.receiver_province; mallGiftOrderInfo.ReceiverProvinceCode = requestModel.receiver_province_code; mallGiftOrderInfo.ReceiverCity = requestModel.receiver_city; mallGiftOrderInfo.ReceiverCityCode = requestModel.receiver_city_code; mallGiftOrderInfo.ReceiverDist = requestModel.receiver_dist; mallGiftOrderInfo.ReceiverDistCode = requestModel.receiver_dist_code; mallGiftOrderInfo.Address = requestModel.receiver_address; mallGiftOrderInfo.ZipCode = requestModel.receiver_zip; if (bllUser.Add(mallGiftOrderInfo)) { resp.errcode = 0; resp.errmsg = "领取成功"; } else { resp.errcode = -1; resp.errmsg = "领取出错"; } context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; }
/// <summary> /// 获取订单金额可以获得的积分V2 /// </summary> /// <param name="context"></param> /// <returns></returns> private string ScoreGetRateV2(HttpContext context) { ScoreConfig scoreConfig = bllScore.GetScoreConfig(); if (scoreConfig != null) { string data = context.Request["data"]; decimal productFee = 0; //商品总价格 不包含邮费 OrderRequestModel orderRequestModel; //订单模型 try { orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderRequestModel>(data); } catch (Exception ex) { resp.errcode = 1; resp.errmsg = "JSON格式错误,请检查。错误信息:" + ex.Message; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } #region 格式检查 if (orderRequestModel.skus == null) { resp.errcode = 1; resp.errmsg = "参数skus 不能为空"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } //相关检查 #endregion #region 商品检查 订单详情生成 ///订单详情 List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情 orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList(); foreach (var sku in orderRequestModel.skus) { //先检查库存 ProductSku productSku = bllMall.GetProductSku(sku.sku_id); if (productSku == null) { resp.errcode = 1; resp.errmsg = "SKU不存在,请检查"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString()); if (productInfo.IsOnSale == "0") { resp.errcode = 1; resp.errmsg = string.Format("{0}已下架", productInfo.PName); return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo(); detailModel.PID = productInfo.PID; detailModel.TotalCount = sku.count; detailModel.OrderPrice = bllMall.GetSkuPrice(productSku); detailModel.ProductName = productInfo.PName; detailModel.SkuId = productSku.SkuId; detailModel.SkuShowProp = bllMall.GetProductShowProperties(productSku.SkuId); detailList.Add(detailModel); } #endregion productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;//商品费用 //物流费用旧的 // orderInfo.Transport_Fee = bllMall.CalcFreight(orderRequestModel.skus.Sum(p => p.count)); #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)) { resp.errcode = 1; resp.errmsg = freightMsg; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单信息 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, bllMall.GetCurrUserID(), out canUseCardCoupon, out msg); if (!canUseCardCoupon) { resp.errcode = 1; resp.errmsg = msg; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } } //优惠券计算 #endregion //积分计算 decimal scoreExchangeAmount = 0;///积分抵扣的金额 if (orderRequestModel.use_score > 0) { scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2); } //计算 orderInfo.Product_Fee = productFee; orderInfo.TotalAmount = orderInfo.Product_Fee + orderInfo.Transport_Fee; orderInfo.TotalAmount -= discountAmount; //折扣金额 orderInfo.PayableAmount = orderInfo.TotalAmount - freight; orderInfo.TotalAmount -= scoreExchangeAmount; //积分抵现金 return(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, errmsg = orderInfo.PayableAmount })); } else { return(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 1, errmsg = "尚未配置订单获取积分比例" })); } }
/// <summary> /// 关闭退款申请 /// </summary> /// <param name="context"></param> /// <returns></returns> private string Close(HttpContext context) { string orderDetailId = context.Request["order_detail_id"]; WXMallRefund model = bllMall.GetRefundInfoByOrderDetailId(int.Parse(orderDetailId)); model.Status = 7; WXMallOrderDetailsInfo orderDetail = bllMall.GetOrderDetail(model.OrderDetailId); orderDetail.RefundStatus = model.Status.ToString(); if (!bllMall.Update(orderDetail)) { resp.errcode = 1; resp.errmsg = "操作失败"; return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } if (bllMall.Update(model)) { resp.errmsg = "ok"; //插入维权记录 WXMallRefundLog log = new WXMallRefundLog(); log.OrderDetailId = model.OrderDetailId; log.Role = "买家"; log.Title = "关闭退款申请"; log.LogContent = string.Format("买家已经关闭退款申请"); log.InsertDate = DateTime.Now; log.WebSiteOwner = bllMall.WebsiteOwner; bllMall.Add(log); //插入维权记录 try { if (bllCommRelation.ExistRelation(BLLJIMP.Enums.CommRelationType.SyncYike, bllCommRelation.WebsiteOwner, "")) { var result = yikeClient.UpdateRefundStatus(model); } } catch (Exception) { } WXMallOrderInfo orderInfo = bllMall.GetOrderInfo(model.OrderId); orderInfo.IsRefund = 0; bllMall.Update(orderInfo); //查询订单是否还有退款,如果没有退款了,而且还有暂时取消的冻结积分记录,则反取消积分 var lockScoreModel = bllScore.GetLockScoreByOrder(orderInfo.OrderID); if (lockScoreModel != null) { if (lockScoreModel.LockStatus == 2 && bllOrder.GetOrderHasRefundCount(orderInfo.OrderID) == 0) { bllScore.UnCancelLockScoreByOrder(orderInfo.OrderID, DateTime.Now.ToString() + " 订单退款已全部关闭,恢复取消的即将到账积分 "); } } } else { resp.errcode = 1; resp.errmsg = ""; } return(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); }
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); } 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 parentOrderInfo = bllMall.GetOrderInfo(orderRequestModel.order_id); if (parentOrderInfo == null) { resp.errcode = 1; resp.errmsg = "父订单不存在"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //检查是否可以生成订单 if (parentOrderInfo.PaymentStatus == 0) { resp.errcode = 1; resp.errmsg = "父订单未付款"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (bllMall.GetCount <WXMallOrderInfo>(string.Format(" ParentOrderId='{0}' And OrderType=1 And OrderUserId='{1}'", parentOrderInfo.OrderID, CurrentUserInfo.UserID)) > 0) { resp.errcode = 1; resp.errmsg = "您已经领取过了"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } var parentOrderDetail = bllMall.Get <WXMallOrderDetailsInfo>(string.Format(" OrderID='{0}'", parentOrderInfo.OrderID)); if (bllMall.GetCount <WXMallOrderInfo>(string.Format(" ParentOrderId='{0}' And OrderID !='{0}' And OrderType=1", parentOrderInfo.OrderID)) >= parentOrderDetail.TotalCount) { resp.errcode = 1; resp.errmsg = "礼品已经领完"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } #region 格式检查 //相关检查 if (string.IsNullOrEmpty(orderRequestModel.receiver_name)) { 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; } 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; } #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.PaymentStatus = 1; orderInfo.PayTime = DateTime.Now; orderInfo.LastUpdateTime = DateTime.Now; orderInfo.ParentOrderId = parentOrderInfo.OrderID; orderInfo.OrderType = 1; orderInfo.PaymentType = parentOrderInfo.PaymentType; orderInfo.LastUpdateTime = DateTime.Now; orderInfo.DistributionStatus = 1; #region 订单详情生成 ///订单详情 WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo(); detailModel.OrderID = orderInfo.OrderID; detailModel.PID = parentOrderDetail.PID; detailModel.TotalCount = 1; detailModel.OrderPrice = parentOrderDetail.OrderPrice; detailModel.ProductName = parentOrderDetail.ProductName; detailModel.SkuId = parentOrderDetail.SkuId; detailModel.SkuShowProp = parentOrderDetail.SkuShowProp; #endregion productFee = (decimal)detailModel.OrderPrice; //物流费用 //合计计算 orderInfo.Product_Fee = productFee; orderInfo.TotalAmount = orderInfo.Product_Fee; detailModel.MaxRefundAmount = orderInfo.TotalAmount; 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 (!this.bllMall.Add(detailModel, tran)) { 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 #region 微信模板消息 try { UserInfo parentUserInfo = bllUser.GetUserInfo(parentOrderInfo.OrderUserID); string name = CurrentUserInfo.WXNickname; if (string.IsNullOrEmpty(name)) { name = orderInfo.Consignee; } bllWeixin.SendTemplateMessageNotifyComm(parentUserInfo, "礼品领取通知", string.Format("{0}已领取了您赠送的礼品{1}", name, parentOrderDetail.ProductName)); } catch { } #endregion } catch (Exception ex) { //回滚事物 tran.Rollback(); resp.errcode = 1; resp.errmsg = ex.Message; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, errmsg = "ok" })); }
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; } }
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; currentUserInfo = bllUser.GetCurrentUserInfo(); string data = context.Request["data"]; decimal productFee = 0; //商品总价格 不包含邮费 OrderRequestModel orderRequestModel = new OrderRequestModel(); //订单模型 try { orderRequestModel = ZentCloud.Common.JSONHelper.JsonToModel <OrderRequestModel>(data); } catch (Exception ex) { resp.errcode = 1; resp.errmsg = "JSON格式错误,请检查。错误信息:" + ex.Message; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); } WXMallOrderInfo orderInfo = new WXMallOrderInfo();//订单表 orderInfo.InsertDate = DateTime.Now; orderInfo.OrderUserID = currentUserInfo.UserID; orderInfo.WebsiteOwner = bllMall.WebsiteOwner; orderInfo.Transport_Fee = 0; orderInfo.OrderID = bllMall.GetGUID(BLLJIMP.TransacType.AddMallOrder); orderInfo.OrderMemo = orderRequestModel.buyer_memo; orderInfo.MyCouponCardId = orderRequestModel.cardcoupon_id.ToString(); orderInfo.UseScore = orderRequestModel.use_score; orderInfo.Status = "待付款"; orderInfo.OrderType = 1; if (orderRequestModel.pay_type == "WEIXIN")//微信支付 { orderInfo.PaymentType = 2; } else if (orderRequestModel.pay_type == "ALIPAY")//支付宝支付 { orderInfo.PaymentType = 1; } #region 格式检查 //相关检查 if (orderRequestModel.skus == null) { resp.errcode = 1; resp.errmsg = "参数skus 不能为空"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //相关检查 #endregion #region 商品检查 订单详情生成 ///订单详情 List <WXMallOrderDetailsInfo> detailList = new List <WXMallOrderDetailsInfo>();//订单详情 orderRequestModel.skus = orderRequestModel.skus.Distinct().ToList(); foreach (var sku in orderRequestModel.skus) { //先检查库存 ProductSku productSku = bllMall.GetProductSku(sku.sku_id); if (productSku == null) { resp.errcode = 1; resp.errmsg = "SKU不存在"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString()); if (productInfo.IsOnSale == "0") { resp.errcode = 1; resp.errmsg = string.Format("{0}已下架", productInfo.PName); context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (bllMall.GetSkuCount(productSku) < sku.count) { resp.errcode = 1; resp.errmsg = string.Format("{0}{1}库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.Stock); context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (bllMall.IsPromotionTime(productSku)) { if (sku.count > productSku.PromotionStock) { resp.errcode = 1; resp.errmsg = string.Format("{0}{1}特卖库存余量为{2},库存不足,请减少购买数量", productInfo.PName, bllMall.GetProductShowProperties(productSku.SkuId), productSku.PromotionStock); context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } } WXMallOrderDetailsInfo detailModel = new WXMallOrderDetailsInfo(); detailModel.OrderID = orderInfo.OrderID; detailModel.PID = productInfo.PID; detailModel.TotalCount = sku.count; detailModel.OrderPrice = bllMall.GetSkuPrice(productSku); detailModel.ProductName = productInfo.PName; detailModel.SkuId = productSku.SkuId; detailModel.SkuShowProp = bllMall.GetProductShowProperties(productSku.SkuId); detailList.Add(detailModel); } #endregion productFee = detailList.Sum(p => p.OrderPrice * p.TotalCount).Value;//商品费用 //物流费用 #region 运费计算 FreightModel freightModel = new FreightModel(); freightModel.skus = orderRequestModel.skus; decimal freight = 0;//运费 string freightMsg = ""; if (!bllMall.CalcFreight(freightModel, out freight, out freightMsg)) { resp.errcode = 1; resp.errmsg = freightMsg; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } orderInfo.Transport_Fee = freight; #endregion #region 优惠券计算 decimal discountAmount = 0;//优惠金额 bool canUseCardCoupon = false; string msg = ""; if (orderRequestModel.cardcoupon_id > 0)//有优惠券 { discountAmount = bllMall.CalcDiscountAmount(orderRequestModel.cardcoupon_id.ToString(), data, currentUserInfo.UserID, out canUseCardCoupon, out msg); if (!canUseCardCoupon) { resp.errcode = 1; resp.errmsg = msg; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } if (discountAmount > productFee + orderInfo.Transport_Fee) { resp.errcode = 1; resp.errmsg = "优惠券可优惠金额超过了订单总金额"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } } //优惠券计算 #endregion #region 积分计算 decimal scoreExchangeAmount = 0;///积分抵扣的金额 //积分计算 if (orderRequestModel.use_score > 0) { if (currentUserInfo.TotalScore < orderRequestModel.use_score) { resp.errcode = 1; resp.errmsg = "积分不足"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } ScoreConfig scoreConfig = bllScore.GetScoreConfig(); scoreExchangeAmount = Math.Round(orderRequestModel.use_score / (scoreConfig.ExchangeScore / scoreConfig.ExchangeAmount), 2); } #region 驿氪积分同步 #endregion //积分计算 #endregion //合计计算 orderInfo.Product_Fee = productFee; orderInfo.TotalAmount = orderInfo.Product_Fee + orderInfo.Transport_Fee; orderInfo.TotalAmount -= discountAmount; //优惠券优惠金额 orderInfo.TotalAmount -= scoreExchangeAmount; //积分优惠金额 orderInfo.PayableAmount = orderInfo.TotalAmount - freight; //应付金额 if ((productFee + orderInfo.Transport_Fee - discountAmount - scoreExchangeAmount) < orderInfo.TotalAmount) { resp.errcode = 1; resp.errmsg = "积分兑换金额不能大于订单总金额,请减少积分兑换"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZCBLLEngine.BLLTransaction(); try { if (!this.bllMall.Add(orderInfo, tran)) { tran.Rollback(); resp.errcode = 1; resp.errmsg = "提交失败"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } #region 更新优惠券使用状态 //优惠券 if (orderRequestModel.cardcoupon_id > 0 && (canUseCardCoupon == true))//有优惠券且已经成功使用 { MyCardCoupons myCardCoupon = bllCardCoupon.GetMyCardCoupon(orderRequestModel.cardcoupon_id, currentUserInfo.UserID); myCardCoupon.UseDate = DateTime.Now; myCardCoupon.Status = 1; if (!bllCardCoupon.Update(myCardCoupon, tran)) { tran.Rollback(); resp.errcode = 1; resp.errmsg = "更新优惠券状态失败"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } } //优惠券 #endregion #region 积分抵扣 //积分扣除 if (orderRequestModel.use_score > 0) { currentUserInfo.TotalScore -= orderRequestModel.use_score; if ( bllMall.Update(currentUserInfo, string.Format(" TotalScore-={0}", orderRequestModel.use_score), string.Format(" AutoID={0}", currentUserInfo.AutoID)) < 0) { tran.Rollback(); resp.errcode = 1; resp.errmsg = "更新用户积分失败"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //积分记录 WXMallScoreRecord scoreRecord = new WXMallScoreRecord(); scoreRecord.InsertDate = DateTime.Now; scoreRecord.OrderID = orderInfo.OrderID; scoreRecord.Score = orderRequestModel.use_score; scoreRecord.Type = 1; scoreRecord.UserId = currentUserInfo.UserID; scoreRecord.WebsiteOwner = bllMall.WebsiteOwner; scoreRecord.Remark = "积分抵扣"; if (!bllMall.Add(scoreRecord)) { tran.Rollback(); resp.errcode = 1; resp.errmsg = "插入积分记录失败"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //积分记录 } //积分扣除 #endregion #region 插入订单详情页及更新库存 foreach (var item in detailList) { ProductSku productSku = bllMall.GetProductSku((int)(item.SkuId)); WXMallProductInfo productInfo = bllMall.GetProduct(productSku.ProductId.ToString()); if (!this.bllMall.Add(item, tran)) { tran.Rollback(); resp.errcode = 1; resp.errmsg = "提交失败"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } //更新 SKU库存 productSku.Stock -= item.TotalCount; if (bllMall.IsPromotionTime(productSku)) { productSku.PromotionStock -= item.TotalCount; } if (!bllMall.Update(productSku, tran)) { tran.Rollback(); resp.errcode = 1; resp.errmsg = "更新SKU失败"; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } } #endregion tran.Commit();//提交订单事务 } catch (Exception ex) { //回滚事物 tran.Rollback(); resp.errcode = 1; resp.errmsg = ex.Message; context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(resp)); return; } context.Response.Write(ZentCloud.Common.JSONHelper.ObjectToJson(new { errcode = 0, errmsg = "ok", order_id = orderInfo.OrderID })); }