public static void SetFinish(this MemberTradeForRechange rechange, PrintDbContext printDbContext, ShopDbContext shopDb, DbContext db, WechatTemplateSendOptions options, ThirdConfig toptions, ILogger _logger) { if (rechange.ShopOrderId != 0) { if (rechange.OrderType == OrderType.充值订单) { SetShopMemberRechangeFinish(rechange, shopDb); } else { SetShopOrderFinish(printDbContext, shopDb, rechange, options, toptions, _logger); } } if (rechange.ConglomerationOrderId != 0) { _logger.LogInformation("进入回调,拼团订单"); try { SetConglomerationOrderFinish(printDbContext, shopDb, rechange, options, _logger); } catch (Exception e) { _logger.LogInformation($"回调错误,错误信息:{ e}"); throw; } } }
public SwiftpassPayController(ICommunityService communityService //, IOptions<SwiftpassPayOptions> options , FinanceDbContext db , IOptions <ShopConglomerationOrderOptions> shopConglomerationOrderServer , PayProxyFactory proxyFactory , WechatCoreDbContext wechatCoreDb , PrintDbContext printDbContext , ShopDbContext shopdb , MemberDbContext memberDbContext , ILoggerFactory loggerFactory , IOptions <WechatTemplateSendOptions> woptions , IOptions <ThirdConfig> toptions , IHostingEnvironment hostingEnvironment) { this.hostingEnvironment = hostingEnvironment; this.woptions = woptions.Value; //this.options = options.Value; // this.db = ZRui.Web.BLL.DbContextFactory.FinanceDbContext; this.db = db; this.shopdb = shopdb; this.printDbContext = printDbContext; this.wechatCoreDb = wechatCoreDb; this.proxyFactory = proxyFactory; this._memberDbContext = memberDbContext; _shopConglomerationOrderServer = shopConglomerationOrderServer.Value; _logger = loggerFactory.CreateLogger <SwiftpassPayController>(); this.thirdConfig = toptions.Value; }
/// <summary> /// 完成订单 /// </summary> /// <param name="printDbContext"></param> /// <param name="db"></param> /// <param name="options"></param> /// <param name="shopOrderid"></param> /// <param name="_logger"></param> static void OrderFinish(PrintDbContext printDbContext, ShopDbContext db, WechatTemplateSendOptions options, ThirdConfig toptions, ShopOrder shopOrder, ILogger _logger) { shopOrder.PayTime = DateTime.Now; shopOrder.Status = ShopOrderStatus.已支付; db.SaveChanges(); //获取订单中商品的数量 var commodityIdAndCounts = db.Query <ShopOrderItem>() .Where(m => m.ShopOrderId == shopOrder.Id) .Where(m => !m.IsDel) .Select(m => new { m.CommodityStock.Sku.CommodityId, m.Count }) .ToList() .GroupBy(m => m.CommodityId) .ToDictionary(m => m.Key, m => m.Select(x => x.Count).Sum()); //更新商品的销售量 //注意,这里如果有一个品牌,多个店铺的情况,会出现销售额共享的情况 var commodityIds = commodityIdAndCounts.Select(m => m.Key).ToList(); var commoditys = db.Query <ShopBrandCommodity>() .Where(m => commodityIds.Contains(m.Id)) .ToList(); foreach (var item in commoditys) { item.SalesForMonth += commodityIdAndCounts[item.Id]; } }
/// <summary> /// 订单下单后进行的操作 /// </summary> static async void AfterOrderPlacing(PrintDbContext printDbContext, ShopDbContext db, ThirdConfig thirdConfig, ShopOrder shopOrder, string shopName, WechatTemplateSendOptions options, ILogger _logger) { //是否外卖单 if (shopOrder.IsTakeOut) { //var takeOutInfo = db.Query<ShopTakeOutInfo>() //.Where(m => !m.IsDel) //.Where(m => m.ShopId == shopOrder.ShopId) //.FirstOrDefault(); ////自动接单 //if (takeOutInfo!=null && takeOutInfo.AutoTakeOrdre) //{ // shopOrder.Status = ShopOrderStatus.已确认; // PrintOrder(printDbContext, db, shopOrder, shopName, _logger); //} PrintOrder(printDbContext, db, shopOrder, shopName, _logger); } else { PrintOrder(printDbContext, db, shopOrder, shopName, _logger); } if (!shopOrder.IsSend) { var receiver = db.Query <ShopOrderReceiver>() .Where(m => !m.IsDel) .Where(m => m.IsUsed) .Where(m => m.ShopId == shopOrder.ShopId) .Select(m => m.ReceiverOpenId) .Distinct() .ToList(); receiver.ForEach(o => shopOrder.SendTemplateMessage(db, options, o, _logger)); } shopOrder.IsSend = true; if (!shopOrder.ShopPartId.HasValue && !shopOrder.ShopOrderSelfHelpId.HasValue) { var shoptakeoutinfo = db.ShopTakeOutInfo.FirstOrDefault(r => r.ShopId == shopOrder.ShopId && !r.IsDel); var shopordertakeoutinfo = db.ShopOrderTakeouts.FirstOrDefault(r => r.ShopOrderId == shopOrder.Id && !r.IsDel); if (shoptakeoutinfo != null && shoptakeoutinfo.TakeDistributionType == TakeDistributionType.达达配送 && shopordertakeoutinfo.TakeWay == TakeWay.送货上门) { // await ThirdOrderFinish(db, thirdConfig, shopOrder, _logger, ExSource.支付成功); ThirdAfterOrder(db, thirdConfig, shopOrder, _logger); } } db.SaveChanges(); _logger.LogInformation("=================其他订单回调完成==============="); }
/// <summary> /// 直接设置订单完成 /// </summary> /// <param name="shopOrder"></param> /// <param name="printDbContext"></param> /// <param name="db"></param> /// <param name="options"></param> /// <param name="_logger"></param> public static void SetShopOrderFinish(this ShopOrder shopOrder, PrintDbContext printDbContext, ShopDbContext db, WechatTemplateSendOptions options, ThirdConfig toptions, ILogger _logger) { OrderFinish(printDbContext, db, options, toptions, shopOrder, _logger); var shopName = db.Query <Shop>() .Where(m => m.Id == shopOrder.ShopId) .Select(m => m.Name) .FirstOrDefault(); AfterOrderPlacing(printDbContext, db, toptions, shopOrder, shopName, options, _logger); }
public ShopOrderSetAPIController(ICommunityService communityService , IOptions <MemberAPIOptions> options , ShopDbContext db , PrintDbContext printDbContext , ILoggerFactory loggerFactory , IOptions <WechatTemplateSendOptions> wechatTemplateSendOptions , MemberDbContext memberDb , IMapper mapper , IHostingEnvironment hostingEnvironment) : base(options, db, memberDb) { this.db = db; this.printDbContext = printDbContext; this.wechatTemplateSendOptions = wechatTemplateSendOptions.Value; this.hostingEnvironment = hostingEnvironment; this._mapper = mapper; _logger = loggerFactory.CreateLogger <ShopOrderSetAPIController>(); }
static void SetShopOrderFinish(PrintDbContext printDbContext, ShopDbContext db, MemberTradeForRechange memberTradeForRechange, WechatTemplateSendOptions options, ThirdConfig toptions, ILogger _logger) { if (!memberTradeForRechange.ShopOrderId.HasValue) { throw new Exception("memberTradeForRechange.ShopOrderId is null"); } var shopOrder = db.ShopOrders.FirstOrDefault(p => p.Id == memberTradeForRechange.ShopOrderId.Value); shopOrder.PayWay = "微信支付"; memberTradeForRechange.Status = MemberTradeForRechangeStatus.成功; db.SaveChanges(); OrderFinish(printDbContext, db, options, toptions, shopOrder, _logger); var shopName = db.Query <Shop>() .Where(m => m.Id == shopOrder.ShopId) .Select(m => m.Name) .FirstOrDefault(); AfterOrderPlacing(printDbContext, db, toptions, shopOrder, shopName, options, _logger); }
public WechatPayController(ICommunityService communityService , IOptions <WechatTemplateSendOptions> options , IOptions <ThirdConfig> poptions , PayProxyFactory proxyFactory , FinanceDbContext db , WechatCoreDbContext wechatCoreDb , PrintDbContext printDbContext , ShopDbContext shopDb , ILoggerFactory loggerFactory , IHostingEnvironment hostingEnvironment) { this.hostingEnvironment = hostingEnvironment; this.options = options.Value; this.db = db; this.shopDb = shopDb; this.printDbContext = printDbContext; this.wechatCoreDb = wechatCoreDb; this.proxyFactory = proxyFactory; this.thirdConfig = poptions.Value; _logger = loggerFactory.CreateLogger <WechatPayController>(); }
public static void SetFinish(this MemberTradeForRechange rechange, PrintDbContext printDbContext, ThirdConfig toptions, ShopDbContext shopDb, DbContext db, WechatTemplateSendOptions options, PayResponseBaseHandler result, ILogger _logger) { if (result.TradeState != "NOTPAY") { if (rechange.Status == MemberTradeForRechangeStatus.未完成) { if (rechange.TotalFee != result.TotalFee) { throw new Exception("指定的金额不对应"); } rechange.OutBank = result.Xml; rechange.MechanismTradeNo = result.TransactionId; switch (result.TradeState) { case "SUCCESS": db.SetMemberTradeForRechangeSuccess(rechange); if (rechange.OrderType == OrderType.充值订单) { SetShopMemberRechangeFinish(rechange, shopDb); } else { SetShopOrderFinish(printDbContext, shopDb, rechange, options, toptions, _logger); } break; case "CLOSED": rechange.Status = MemberTradeForRechangeStatus.取消; break; default: db.SetMemberTradeForRechangeFail(rechange, result.TradeState); break; } } } }
/// <summary> /// 设置拼团订单支付完成 /// </summary> /// <param name="printDbContext"></param> /// <param name="shopDb"></param> /// <param name="rechange"></param> /// <param name="options"></param> /// <param name="logger"></param> static void SetConglomerationOrderFinish(PrintDbContext printDbContext, ShopDbContext db, MemberTradeForRechange memberTradeForRechange, WechatTemplateSendOptions options, ILogger _logger) { var model = db.ConglomerationOrder.Find(memberTradeForRechange.ConglomerationOrderId); if (model.PayTime.HasValue) { return; } model.PayTime = DateTime.Now; model.Status = ShopOrderStatus.已支付; model.PayWay = "微信支付"; db.SaveChanges(); model.Payment = (int)memberTradeForRechange.TotalFee; var shopName = db.Query <Shop>() .Where(m => m.Id == model.ShopId) .Select(m => m.Name) .FirstOrDefault(); AfterConglomerationOrderPlacing(printDbContext, db, model, shopName, options, _logger); memberTradeForRechange.Status = MemberTradeForRechangeStatus.成功; db.SaveChanges(); }
public static void PrintOrder(this PrintDbContext printDbContext, ShopDbContext db, ShopOrder shopOrder, string shopname) { try { if (shopOrder == null) { throw new Exception("订单错误"); } List <ShopOrderItem> items = db.Query <ShopOrderItem>() .Where(m => !m.IsDel) .Where(m => m.ShopOrderId == shopOrder.Id) .ToList(); if (items.Count == 0) { return; } List <OrderInfo> orderInfo = items.Select(s => new OrderInfo() { Name = $"{s.CommodityName}({s.SkuSummary})", Price = Math.Round(s.SalePrice / 100d, 2), Count = s.Count }).ToList(); string stringorderlist = JsonConvert.SerializeObject(orderInfo); List <Printer> printers = printDbContext.Query <Printer>() .Where(s => !s.IsDel) .Where(s => s.ShopID == shopOrder.ShopId && s.IsEnable).ToList(); if (printers.Count == 0) { return; } PrintParameter parameter = GetPrintParameter(db, shopOrder); parameter.ShopName = shopname; parameter.List = orderInfo; foreach (var item in printers) { //StringBuilder postData = new StringBuilder("sn=" + item.SN); parameter.SN = item.SN; parameter.Times = item.Times + ""; PrintModel model = printDbContext.Query <PrintModel>().FirstOrDefault(s => s.ID == item.ModelID); if (model == null) { model = printDbContext.Set <PrintModel>().Find(2); } parameter.ModelContent = model.ModelContent; PrinterBase @base = PrinterFactory.Create(item.PrinterType);//) string temp = @base.PrinterRequest(parameter, item); #region 数据库操作 PrintRecord record = new PrintRecord(); //处理接口返回数据 Dictionary <string, object> dic = JsonConvert.DeserializeObject <Dictionary <string, object> >(temp); //实体赋值 record.SN = item.SN; record.OrderID = @base.GetOrderID(temp);// dic.ContainsKey("data") && dic["msg"].Equals("ok") ? dic["data"].ToString() : "未能成功打印"; record.Title = parameter.Title; record.OrderList = stringorderlist; record.TotalMoney = (float)parameter.TotalMoney; record.Address = parameter.Address; record.OrderName = parameter.OrderName; record.Mobile = parameter.Mobile; record.OrderTime = Convert.ToDateTime(parameter.OrderTime); record.QRAddress = parameter.QRAddress; record.Remark = shopOrder.Remark; printDbContext.AddTo(record); #endregion } shopOrder.IsPrint = true; } catch (Exception e) { //_logger.LogError("打印机错误:{0}", e.Message); } }
public static void PrintOrder(PrintDbContext printDbContext, ShopDbContext db, ShopOrder shopOrder, string shopname, ILogger _logger) { _logger.LogInformation($"Remark{shopOrder.Remark}"); if (shopOrder.IsPrint) { return; } try { List <ShopOrderItem> items = db.Query <ShopOrderItem>() .Where(m => !m.IsDel) .Where(m => m.ShopOrderId == shopOrder.Id) .ToList(); if (items.Count == 0) { return; } List <OrderInfo> orderInfo = items.Select(s => new OrderInfo() { Name = $"{s.CommodityName}({s.SkuSummary})", Price = Math.Round(s.SalePrice / 100d, 2), Count = s.Count, ComboConten = GetPrintComboContenParameter(db, s, _logger) }).ToList(); string stringorderlist = JsonConvert.SerializeObject(orderInfo); List <Printer.Data.Printer> printers = printDbContext.Query <Printer.Data.Printer>() .Where(s => !s.IsDel) .Where(s => s.ShopID == shopOrder.ShopId && s.IsEnable).ToList(); if (printers.Count == 0) { return; } PrintParameter parameter = GetPrintParameter(db, shopOrder); parameter.ShopName = shopname; parameter.List = orderInfo; parameter.IsTakeOut = shopOrder.IsTakeOut; //获取优惠 if (shopOrder.MoneyOffRuleId != null && shopOrder.MoneyOffRuleId != 0) { var shopOrderMoneyOffRules = db.ShopOrderMoneyOffRules.Find(shopOrder.MoneyOffRuleId); parameter.ShopOrderMoneyOffRule = new ShopOrderMoneyOffRuleModel() { Discount = Math.Round(shopOrderMoneyOffRules.Discount / 100d, 2), FullAmount = Math.Round(shopOrderMoneyOffRules.FullAmount / 100d, 2), MoneyOffId = shopOrderMoneyOffRules.MoneyOffId, MoneyOffName = db.ShopOrderMoneyOffs.Find(shopOrderMoneyOffRules.MoneyOffId).Name }; } //获取其他费用 if (shopOrder.OtherFeeId != null && shopOrder.OtherFeeId != 0) { var shopOrderMoneyOffs = db.ShopOrderOtherFees.Find(shopOrder.OtherFeeId); parameter.ShopOrderOtherFee = new Dictionary <string, double>() { { "餐盒费", Math.Round(shopOrderMoneyOffs.BoxFee / 100d, 2) }, { "配送费", Math.Round(shopOrderMoneyOffs.DeliveryFee / 100d, 2) } }; if (TakeWay.自提.ToString().Equals(parameter.TakeWay)) { parameter.ShopOrderOtherFee.Remove("配送费"); } } if (shopOrder.ShopOrderSelfHelpId.HasValue) //自助点餐 { var selfHelp = db.GetSingle <ShopOrderSelfHelp>(shopOrder.ShopOrderSelfHelpId.Value); if (selfHelp != null) { parameter.SelfHelpPrintParameter = new SelfHelpPrintParameter() { SelfHelpNumber = selfHelp.Number, DingingWay = selfHelp.IsTakeOut ? "外带" : "堂食" }; } } foreach (var item in printers) { //StringBuilder postData = new StringBuilder("sn=" + item.SN); parameter.SN = item.SN; parameter.Times = item.Times + ""; PrintModel model = printDbContext.Query <PrintModel>().FirstOrDefault(s => s.ID == item.ModelID); if (model == null) { model = printDbContext.Set <PrintModel>().Find(2); } parameter.ModelContent = model.ModelContent; PrinterBase @base = PrinterFactory.Create(item.PrinterType);//) string temp = @base.PrinterRequest(parameter, item); #region 数据库操作 PrintRecord record = new PrintRecord(); //处理接口返回数据 Dictionary <string, object> dic = JsonConvert.DeserializeObject <Dictionary <string, object> >(temp); //实体赋值 record.SN = item.SN; record.OrderID = @base.GetOrderID(temp);// dic.ContainsKey("data") && dic["msg"].Equals("ok") ? dic["data"].ToString() : "未能成功打印"; record.Title = parameter.Title; record.OrderList = stringorderlist; record.TotalMoney = (float)parameter.TotalMoney; record.Address = parameter.Address; record.OrderName = parameter.OrderName; record.Mobile = parameter.Mobile; record.OrderTime = Convert.ToDateTime(parameter.OrderTime); record.QRAddress = parameter.QRAddress; record.Remark = shopOrder.Remark; printDbContext.AddTo(record); #endregion } shopOrder.IsPrint = true; } catch (Exception e) { _logger.LogError("打印机错误:{0}", e.Message); } }
/// <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("=================拼团订单回调结束==============="); }
public void TestMethod1() { using (PrintDbContext printDb = TPrintDbFactory.MarkShopDb()) { var parameter = new ZRui.Web.Core.Printer.PrintAPIArgsModel.AddPrinter() { shopId = 4, sn = "817513721", skey = "ew64m5j4", printerType = PrinterType.FEIE }; using (ShopDbContext shopDb = TShopDbContxtFactory.MarkShopDb()) { if (string.IsNullOrEmpty(parameter.sn)) { Error("SnList(打印机#KEY)参数不能为空"); } if (!parameter.shopId.HasValue) { Error("商铺ID不能为空"); } if (!parameter.printerType.HasValue) { Error("打印机类型不能为空"); } Shop shop = shopDb.GetSingle <Shop>(parameter.shopId.Value); if (shop == null) { Error("商铺不存在"); } //表示是否已经添加过 Data.Printer printer = printDb.Printer.FirstOrDefault(s => !s.IsDel && s.ShopID == parameter.shopId && s.SN == parameter.sn && s.SKey == parameter.skey && s.IsSuccess); bool IsExists = printer != null; if (IsExists) { Error("设备已经添加过"); } PrinterBase @base = PrinterFactory.Create(parameter.printerType.Value);//) string result = @base.AddPrinter(new PrintParameter() { SnList = $"{parameter.sn}#{parameter.skey}#" }); //添加之后保存到数据库中 Dictionary <string, object> tempdic = JsonConvert.DeserializeObject <Dictionary <string, object> >(result); if (!tempdic.ContainsKey("data")) { Error("添加失败"); } Data.Printer _printermodel = new Data.Printer(); #region 实体赋值 _printermodel.ShopID = parameter.shopId.Value; _printermodel.SN = parameter.sn; _printermodel.SKey = parameter.skey; _printermodel.AddTime = DateTime.Now; _printermodel.PrinterType = parameter.printerType.Value; _printermodel.IsEnable = true; //_printermodel.Times = string.IsNullOrEmpty(parameter.Times) || int.TryParse(parameter.Times, out int t) ? 1 : t == 0 ? 1 : t; Dictionary <string, object> datadic = JsonConvert.DeserializeObject <Dictionary <string, object> >(tempdic["data"].ToString()); JArray ok = datadic["ok"] as JArray; JArray no = datadic["no"] as JArray; //验证打印机是否在接口添加成功 //如果之前添加失败了, 将修改原来的数据,否则重新添加 #endregion if (ok.Count > 0) { } else { Error(no[0].Value <string>()); } } } void Error(string s) { }; }
public PrintAPIController(PrintDbContext printDb, ShopDbContext shopDb, MemberDbContext memberDb) { this.printDb = printDb; this.shopDb = shopDb; this.memberDb = memberDb; }
public Printer(PrintDbContext printDb, ShopDbContext shopDb) { this.printDb = printDb; this.shopDb = shopDb; }