Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 /// <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);
 }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        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
                           ));
            }
        }
Beispiel #7
0
        /// <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);
            }
        }
Beispiel #8
0
        /// <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("=================拼团订单回调结束===============");
        }