/// <summary> /// 快递配置(配送) /// </summary> /// <param name="db"></param> /// <param name="conglomerationOrder"></param> /// <returns></returns> private ConglomerationOrder TakeOutSetting(ShopDbContext db, ConglomerationOrder conglomerationOrder, ShopConglomerationOrderDto shopConglomerationOrderDto, ConglomerationActivity conglomerationActivity) { if (conglomerationOrder.Type.Equals(ConsignmentType.快递)) { ConglomerationExpress conglomerationExpress = new ConglomerationExpress(); conglomerationExpress.CreateTime = DateTime.Now; conglomerationExpress.Delivery = conglomerationOrder.Delivery.Value; conglomerationExpress.ExpressSingle = "未发货"; conglomerationExpress.MemberAddressId = shopConglomerationOrderDto.MemberAddressId; conglomerationExpress.ShopConglomerationOrderId = conglomerationOrder.Id; var memberAddress = db.Query <MemberAddress>() .FirstOrDefault(m => !m.IsDel && m.Id.Equals(conglomerationExpress.MemberAddressId)); if (memberAddress == null) { throw new Exception("请先设置配送地址"); } conglomerationExpress.Address = $"{ memberAddress.Province}{ memberAddress.City}{ memberAddress.Area}{ memberAddress.Detail}"; conglomerationExpress.Phone = memberAddress.Phone; conglomerationExpress.Name = memberAddress.Name; conglomerationExpress.Sex = memberAddress.Sex; conglomerationExpress.ActivityDeliveryFee = conglomerationActivity.ActivityDeliveryFee; conglomerationExpress = db.ConglomerationExpress.Add(conglomerationExpress).Entity; db.SaveChanges(); conglomerationOrder.ConglomerationExpressId = conglomerationExpress.Id; } return(conglomerationOrder); }
/// <summary> /// 快递配置(自提) /// </summary> /// <param name="db"></param> /// <param name="conglomerationOrder"></param> /// <returns></returns> private ConglomerationOrder SelfSetting(ShopDbContext db, ConglomerationOrder conglomerationOrder) { conglomerationOrder.PickupCode = ""; if (conglomerationOrder.Type.Equals(ConsignmentType.自提)) { //提货码 conglomerationOrder.PickupCode = GetPickupCode(db); } db.SaveChanges(); return(conglomerationOrder); }
/// <summary> /// 初始化订单 /// </summary> /// <param name="shopConglomerationOrderDto"></param> /// <param name="conglomerationOrder"></param> private ConglomerationOrder InitOrderData(ShopDbContext db, ShopConglomerationOrderDto shopConglomerationOrderDto) { ConglomerationOrder conglomerationOrder = new ConglomerationOrder(); conglomerationOrder.CreateTime = DateTime.Now; conglomerationOrder.FormId = shopConglomerationOrderDto.FormId; conglomerationOrder.OrderNumber = OrderCodeGenerator.Generate(OrderCategory.Conglomeration, shopConglomerationOrderDto.ShopId); conglomerationOrder.ShopId = shopConglomerationOrderDto.ShopId; conglomerationOrder.Type = shopConglomerationOrderDto.Type; conglomerationOrder.ConglomerationSetUpId = shopConglomerationOrderDto.ConglomerationSetUpId; conglomerationOrder.ShopId = shopConglomerationOrderDto.ShopId; conglomerationOrder.MemberId = shopConglomerationOrderDto.MemberId; conglomerationOrder.AddUser = $"member{shopConglomerationOrderDto.MemberId}"; conglomerationOrder.AddIp = shopConglomerationOrderDto.AddIp; //conglomerationOrder.Amount = shopConglomerationOrderDto.ConglomerationSetUp.ConglomerationActivityType.ConglomerationPrice; conglomerationOrder.ConglomerationActivityId = shopConglomerationOrderDto.ConglomerationSetUp.ConglomerationActivityId; conglomerationOrder.Status = ShopOrderStatus.未处理; conglomerationOrder.Delivery = shopConglomerationOrderDto.Delivery; conglomerationOrder = db.ConglomerationOrder.Add(conglomerationOrder).Entity; db.SaveChanges(); return(conglomerationOrder); }
/// <summary> /// 设置计算订单金额 /// </summary> /// <param name="db"></param> /// <param name="conglomerationOrder"></param> /// <returns></returns> private ConglomerationOrder SetAmount(ShopDbContext db, ConglomerationOrder conglomerationOrder) { //拼团金额 var conglomerationSetUp = db.ConglomerationSetUp .Where(m => m.Id.Equals(conglomerationOrder.ConglomerationSetUpId)) .Include(m => m.ConglomerationActivityType) .AsNoTracking() .FirstOrDefault(); ; //拼团金额 conglomerationOrder.Amount += conglomerationSetUp.ConglomerationActivityType.ConglomerationPrice; //配送费 if (conglomerationOrder.Type.Equals(ConsignmentType.快递)) { var conglomerationExpress = db.ConglomerationExpress.Where(m => m.ShopConglomerationOrderId.Equals(conglomerationOrder.Id)).AsNoTracking() .FirstOrDefault();; conglomerationOrder.Amount += conglomerationExpress.ActivityDeliveryFee; } conglomerationOrder.Payment = conglomerationOrder.Amount; db.SaveChanges(); return(conglomerationOrder); }
/// <summary> /// 获取发送推送内容 /// </summary> /// <returns></returns> static object GetSendTemplateMessageData(ConglomerationSetUp conglomerationSetUp, ConglomerationOrder conglomerationOrder) { var data = new { //活动名称 keyword1 = new { value = conglomerationSetUp.ConglomerationActivity.ActivityName, color = "#173177" }, //成团人数 keyword2 = new { value = conglomerationSetUp.CurrentMemberNumber, color = "#173177" }, //订单号 keyword3 = new { value = conglomerationOrder.OrderNumber, color = "#173177" }, //发货时间 keyword4 = conglomerationOrder.Type == ConsignmentType.快递 ? new { value = string.Format("{0:yyyy-MM-dd HH:mm:ss}", conglomerationOrder.Delivery), color = "#173177" } : new { value = "无", color = "#173177" } , //配送方式 keyword5 = new { value = conglomerationOrder.Type.ToString(), color = "#173177" }, //提货码 keyword6 = conglomerationOrder.Type == ConsignmentType.自提 ? new { value = conglomerationOrder.PickupCode, color = "#173177" } : new { value = "无", color = "#173177" }, }; return(data); }
public APIResult BeginRechange([FromBody] BeginRechangeArgsModel args) { //if (args.TotalFee <= 0) throw new Exception("充值金额需要大于0"); if (args.ShopFlag == null) { throw new ArgumentNullException("ShopFlag"); } if (!args.ConglomerationOrderId.HasValue) { throw new ArgumentNullException("ConglomerationOrderId"); } var memberId = GetMemberId(); ConglomerationOrder conglomerationOrder = shopDb.GetSingle <ConglomerationOrder>(args.ConglomerationOrderId.Value); if (conglomerationOrder == null) { throw new Exception("订单不存在"); } ShopPayInfo shopPayInfo = shopDb.Query <ShopPayInfo>() .Where(m => !m.IsDel) .Where(m => m.ShopFlag == args.ShopFlag) .Where(m => m.ShopFlag == args.ShopFlag && m.IsEnable) .FirstOrDefault(); if (shopPayInfo == null) { throw new Exception("当前商铺没有设置好支付信息。"); } if (shopPayInfo.PayWay == PayWay.Wechat) { throw new Exception("拼团功能暂不支持,请联系商户修改支付模式"); } PayProxyBase payProxy = proxyFactory.GetProxy(shopPayInfo); var tradeNo = "SP" + DateTime.Now.Ticks + CommonUtil.CreateNoncestr(5); var tradeDate = DateTime.Now.ToString("yyyyMMddHHmmss"); var model = new MemberTradeForRechange() { AddIP = GetIp(), AddTime = DateTime.Now, AddUser = GetUsername(), MemberId = memberId, Detail = "拼团订单支付" + conglomerationOrder.Payment.Value + "分", OutBank = "", PayChannel = payProxy.PayChannel, Status = MemberTradeForRechangeStatus.未完成, TimeExpire = DateTime.Now, TimeStart = DateTime.Now, Title = "拼团订单支付", TotalFee = conglomerationOrder.Payment.Value, ConglomerationOrderId = args.ConglomerationOrderId.Value, MoneyOffRuleId = 0, TradeNo = tradeNo, OrderType = OrderType.拼团订单, OrderId = args.ConglomerationOrderId.Value, ShopOrderId = 0, PayWay = (int)shopPayInfo.PayWay, ShopId = shopPayInfo.ShopId }; db.AddToMemberTradeForRechange(model); var openId = GetOpenId(); var payInfo = payProxy.GetPayInfo(model, openId); db.SaveChanges(); if (shopPayInfo.PayWay == PayWay.Wechat) { new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay" , BLL.Log.PayOrRefundType.支付, args.ConglomerationOrderId.Value, OrderType.拼团订单, model, payInfo); return(Success(new { payInfo, TradeNo = tradeNo })); } else { PayInfoModel infoModel = new PayInfoModel(); var payinfo = JsonConvert.DeserializeObject <PayInfo>(payInfo.ToString()); infoModel.payInfo = payinfo; new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay" , BLL.Log.PayOrRefundType.支付, args.ConglomerationOrderId.Value, OrderType.拼团订单, model, payInfo); return(Success( infoModel )); } }
/// <summary> /// 拼团订单推送 /// </summary> /// <param name="shopOrder"></param> /// <param name="wechatOptions"></param> /// <param name="receiverOpenId"></param> /// <param name="logger"></param> /// <returns></returns> static bool SendTemplateMessage(this ConglomerationOrder conglomerationOrder, WechatTemplateSendOptions wechatOptions, string receiverOpenId, ILogger logger) { logger.LogInformation($"推送拼团订单conglomerationOrderId:{conglomerationOrder.Id}"); try { if (string.IsNullOrEmpty(receiverOpenId)) { return(false); } string accessToken = AccessTokenContainer.GetAccessTokenResult(wechatOptions.AppId).access_token; //logger.LogInformation("推送的accesstoken:{0}", accessToken); string url = wechatOptions.SendUrl + accessToken; TemplateData data = new TemplateData(); #region 订单参数 string remark = ""; data.Add("first", new TemplateDataItem() { value = "您好,您有新的支付订单请及时处理!", color = TemplateSendColor }); data.Add("keyword1", new TemplateDataItem() { value = conglomerationOrder.OrderNumber.ToString(), color = TemplateSendColor }); data.Add("keyword2", new TemplateDataItem() { value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), color = TemplateSendColor }); data.Add("remark", new TemplateDataItem() { value = remark, color = TemplateSendColor }); #endregion string detailUrl = $"http://manager.91huichihuihe.com//api/ShopOrderSetAPI/Manager/GetConglomerationOrderView?orderid={conglomerationOrder.Id}&openid={receiverOpenId}"; ShopOrderTemplateModel templateModel = new ShopOrderTemplateModel() { touser = receiverOpenId, template_id = wechatOptions.ServiceTemplateId, url = detailUrl, data = data }; JsonSerializer jsonSerializer = new JsonSerializer(); var responseWait = httpClient.PostAsync(url, new StringContent(JsonConvert.SerializeObject(templateModel))); responseWait.Wait(); var response = responseWait.Result; if (response.IsSuccessStatusCode) { var reContentWait = response.Content.ReadAsStringAsync(); reContentWait.Wait(); var reContent = reContentWait.Result; if (JObject.Parse(reContent).TryGetValue("errcode", out JToken errcode)) { if (errcode.Value <int>() == 0) { conglomerationOrder.IsSend = true; } else { conglomerationOrder.IsSend = false; } } else { conglomerationOrder.IsSend = false; } return(true); } else { var reContentWait = response.Content.ReadAsStringAsync(); reContentWait.Wait(); var reContent = reContentWait.Result; logger.LogInformation("模板消息出错:{0}", reContent); return(false); } } catch (Exception e) { logger.LogInformation("模板消息出错:{0}", e.Message); return(false); } }
/// <summary> /// 拼团支付成功之后操作 /// </summary> static void AfterConglomerationOrderPlacing(PrintDbContext printDbContext, ShopDbContext db, ConglomerationOrder conglomerationOrder, string shopName, WechatTemplateSendOptions options, ILogger _logger) { _logger.LogInformation("=================拼团订单回调开始==============="); var isExist = db.ConglomerationParticipation.FirstOrDefault(m => !m.IsDel && m.ConglomerationSetUpId.Equals(conglomerationOrder.ConglomerationSetUpId) && m.ConglomerationOrderId.Equals(conglomerationOrder.Id)); if (isExist != null) { return; } var conglomerationSetUp = db.ConglomerationSetUp.Find(conglomerationOrder.ConglomerationSetUpId); var member = db.Member.Find(conglomerationOrder.MemberId); //添加参团信息 ConglomerationParticipation conglomerationParticipation = new ConglomerationParticipation(); conglomerationParticipation.CreateTime = DateTime.Now; conglomerationParticipation.AvatarUrl = member.Avatar ?? ""; conglomerationParticipation.NickName = member.NickName ?? ""; conglomerationParticipation.ConglomerationSetUpId = conglomerationOrder.ConglomerationSetUpId; conglomerationParticipation.Role = conglomerationSetUp.MemberId.Equals(conglomerationOrder.MemberId) ? ParticipationRole.团长 : ParticipationRole.团员; conglomerationParticipation.MemberId = conglomerationOrder.MemberId; conglomerationParticipation.ConglomerationOrderId = conglomerationOrder.Id; conglomerationParticipation.ConglomerationActivityId = conglomerationOrder.ConglomerationActivityId; db.ConglomerationParticipation.Add(conglomerationParticipation); //更新已发起拼团的队伍状态 conglomerationSetUp.CurrentMemberNumber = conglomerationSetUp.CurrentMemberNumber + 1; conglomerationSetUp.Status = conglomerationSetUp.CurrentMemberNumber.Equals(conglomerationSetUp.MemberNumber) ? ConglomerationSetUpStatus.已经成团 : ConglomerationSetUpStatus.未成团; _logger.LogInformation($"当前拼团状态 conglomerationSetUp.Status:{conglomerationSetUp.Status}"); conglomerationOrder.Status = ShopOrderStatus.待成团; if (conglomerationSetUp.Status.Equals(ConglomerationSetUpStatus.已经成团)) { conglomerationSetUp.SuccessfulTime = DateTime.Now; _logger.LogInformation("=============================已经成团修改订单状态开始========================"); _logger.LogInformation($"团IDconglomerationOrder.ConglomerationSetUpId {conglomerationOrder.ConglomerationSetUpId}"); conglomerationOrder.Status = conglomerationOrder.Type == ConsignmentType.自提 ? ShopOrderStatus.待自提 : ShopOrderStatus.待配送; var order = db.ConglomerationOrder.Where(m => !m.IsDel && m.ConglomerationSetUpId.Equals(conglomerationOrder.ConglomerationSetUpId)).ToList(); _logger.LogInformation($"需更改订单状态数量{order.Count()}"); foreach (var item in order) { if (item.Type == ConsignmentType.自提) { _logger.LogInformation($"订单Id:{item.Id} 更改为执行待自提"); if (item.Status == ShopOrderStatus.待成团) { item.Status = ShopOrderStatus.待自提; } } else { if (item.Status == ShopOrderStatus.待成团) { _logger.LogInformation($"订单Id:{item.Id} 更改为执行待配送"); item.Status = ShopOrderStatus.待配送; } } } _logger.LogInformation("=============================已经成团修改订单状态结束========================"); } //发送推送 if (!conglomerationOrder.IsSend) { var receiver = db.Query <ShopOrderReceiver>() .Where(m => !m.IsDel) .Where(m => m.IsUsed) .Where(m => m.ShopId == conglomerationOrder.ShopId) .Select(m => m.ReceiverOpenId) .Distinct() .ToList(); receiver.ForEach(o => conglomerationOrder.SendTemplateMessage(options, o, _logger)); } conglomerationOrder.IsSend = true; db.SaveChanges(); _logger.LogInformation("=================拼团订单回调结束==============="); }