using Elasticsearch.Net; using JiaZhiQuan.Common.ElasticSearch; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Senparc.Weixin.MP.Containers; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Dynamic; using System.Linq; using System.Net.Http; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using JiaZhiQuan.Common.Messaging; using JiaZhiQuan.Common.Messaging.Models; using Wicture.DbRESTFul; using Wicture.DbRESTFul.Cache; using Wicture.DbRESTFul.Infrastructure.Repository; namespace JiaZhiQuan.Common { public static partial class RepositoryExtension { #region 寄售订单相关通知 /// /// 寄售订单发货通知 /// public static async Task MakePostOrderDeliverySuccessMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = "发货成功,请等待平台签收并鉴定。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单平台收货通知 /// public static async Task MakePostOrderPlatformReceivedMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = "平台已收到您的寄售商品,正在火速安排鉴定。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); // TODO 公众号通知 } /// /// 寄售订单平台鉴定通过,等待卖家上架通知,每24小时推送一次(TODO) /// public static async Task MakePostOrderWaitOnSaleMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = "您的寄售商品已通过鉴定,请尽快上架!超时未处理将退回商品。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单平台鉴定未通过,等待平台退货通知 /// public static async Task MakePostOrderWaitReturnMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId, string reason) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"您的寄售商品未通过鉴定,原因:{reason}。平台会尽快退回货物。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); // TODO 公众号通知 } /// /// 寄售订单卖家取回商品(无偿),等待平台退货通知 /// 寄售订单卖家取回商品 (有偿) ,等待平台退货通知 /// 寄售订单卖家拒绝上架,等待平台退货通知 /// 寄售订单卖家超时未上架,等待平台退货通知 /// public static async Task MakePostOrderWaitReturnMessage2(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"您主动取回了寄售商品,平台会尽快退回货物。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); // TODO 公众号通知 } /// /// 寄售订单平台鉴定未通过,不退货,系统关闭订单通知 /// public static async Task MakePostOrderRejectAndCloseMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId, string reason) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"您的寄售商品未通过鉴定,且商品无法退回,原因:{reason}。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单商品上架通知 /// public static async Task MakePostOrderOnSaleMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"您的寄售商品已上架,正在火热出售中;适当降低售价会吸引更多买家。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单平台已退货,等待卖家签收 /// public static async Task MakePostOrderReturnReceiveMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"平台退回了您的寄售商品,请留意物流进度并及时签收。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单卖家已签收退货,系统关闭订单通知 /// public static async Task MakePostOrderAutoReceivedMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"退回的寄售商品已自动签收。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单销售订单关闭,重新上架中通知 /// public static async Task MakePostOrderReOnSaleMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"您的寄售商品因特殊原因交易失败,平台已重新上架该商品,并补偿额外的流量曝光,商品加速出售中。", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 寄售订单关闭通知 /// public static async Task MakePostOrderClosedMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId, string reason) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostOrder, Content = JsonConvert.SerializeObject(new UEPostOrderModel { UserId = userId, Title = "订单通知", Message = $"寄售已关闭;原因:{reason}", ActionLink = $"app://ue/order/post/detail?id={orderId}", OrderId = orderId, }) }); } #endregion 寄售订单相关通知 #region 寄售销售订单相关通知 /// /// 寄售销售订单 买家已付款,等待平台发货 /// public static async Task MakePostSaleOrderNeedDeliveryMessage(this DbRESTFulRepository repository, Producer producer, long saleOrderId, long orderId) { // TODO 公众号通知 await Task.CompletedTask; } /// /// 寄售销售订单 买家超时未支付,系统关闭订单通知 /// public static async Task MakePostSaleOrderPayExpireClosedMessage(this DbRESTFulRepository repository, Producer producer, long userId, long saleOrderId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostSaleOrder, Content = JsonConvert.SerializeObject(new UEPostSaleOrderModel { UserId = userId, Title = "订单通知", Message = $"因您超时未支付,订单已关闭。", ActionLink = $"app://ue/order/postsale/detail?id={saleOrderId}&oid={orderId}", OrderId = orderId, SaleOrderId = saleOrderId, }) }); } /// /// 寄售销售订单 平台已发货,等待买家签收 /// public static async Task MakePostSaleOrderWaitBuyerReceiveMessage(this DbRESTFulRepository repository, Producer producer, long userId, long saleOrderId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostSaleOrder, Content = JsonConvert.SerializeObject(new UEPostSaleOrderModel { UserId = userId, Title = "订单通知", Message = $"平台已发货,请留意物流进度并及时签收。", ActionLink = $"app://ue/order/postsale/detail?id={saleOrderId}&oid={orderId}", OrderId = orderId, SaleOrderId = saleOrderId, }) }); } /// /// 寄售销售订单 后台关闭订单 /// public static async Task MakePostSaleOrderClosedMessage(this DbRESTFulRepository repository, Producer producer, long userId, long saleOrderId, long orderId, string reason, bool pointsUsed) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEPostSaleOrder, Content = JsonConvert.SerializeObject(new UEPostSaleOrderModel { UserId = userId, Title = "订单通知", Message = $"订单已关闭;原因:{reason}。货款稍后将全额退回至“原支付账户”。" + (pointsUsed ? "欧拉币已全额退回。" : ""), ActionLink = $"app://ue/order/postsale/detail?id={saleOrderId}&oid={orderId}", OrderId = orderId, SaleOrderId = saleOrderId, }) }); } #endregion 寄售销售订单相关通知 #region 挂售订单相关通知 /// /// 挂售销售订单 买家已付款,选择快递收货,等待卖家发货 /// public static async Task MakeHangSaleOrderWaitDeliveryMessage(this DbRESTFulRepository repository, Producer producer, long buyerId, long sellerId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerId, Title = "订单通知", Message = $"付款成功,卖家正在火速安排发货。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerId, Title = "订单通知", Message = $"您的挂售商品已有买家付款,买家选择快递收货,请尽快发货给买家!若因特殊原因无法发货,请联系平台客服。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 买家已付款,选择线下收货,等待买家取货 /// public static async Task MakeHangSaleOrderWaitPickUpMessage(this DbRESTFulRepository repository, Producer producer, long buyerId, long sellerId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerId, Title = "订单通知", Message = $"付款成功,请在10天内前往门店取货,具体时间可与卖家商定。超时未取货将扣除您的取货保证金。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerId, Title = "订单通知", Message = $"您的挂售商品已有买家付款,买家将在10天内线下取货,请提前准备好商品,可与买家商定具体时间。请确保买家当面点击\"确认取货\"后,再取走商品!若因特殊原因无法提供商品,请联系平台客服。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 买家超时未支付,系统关闭订单 /// public static async Task MakeHangSaleOrderPayExpireCloseMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = userId, Title = "订单通知", Message = $"因您超时未支付,订单已关闭。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 卖家已发货,等待买家签收 /// public static async Task MakeHangSaleOrderWaitReceiveMessage(this DbRESTFulRepository repository, Producer producer, long userId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = userId, Title = "订单通知", Message = $"您购买的商品已发货,请留意物流进度并及时签收。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 后台关闭订单 /// public static async Task MakeHangSaleOrderPlatformClosedMessage(this DbRESTFulRepository repository, Producer producer, long buyerUserId, long sellerUserId, long orderId, string reason) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerUserId, Title = "订单通知", Message = $"交易关闭,原因:{reason}。货款已全额退回至“原支付账户”。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerUserId, Title = "订单通知", Message = $"交易关闭,原因:{reason}。", ActionLink = $"app://ue/order/seller/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 买家已取货,交易成功 /// public static async Task MakeHangSaleOrderPickUpMessage(this DbRESTFulRepository repository, Producer producer, long buyerUserId, long sellerUserId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerUserId, Title = "订单通知", Message = $"您已取货,交易成功。取货保证金已全额退回至“原支付账户”。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerUserId, Title = "订单通知", Message = $"您的挂售商品交易成功,货款已打至“平台账户“。", ActionLink = $"app://ue/order/seller/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 买家拒绝取货,扣除保证金,交易关闭 /// public static async Task MakeHangSaleOrderRefusePickUpClosedMessage(this DbRESTFulRepository repository, Producer producer, long buyerUserId, long sellerUserId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerUserId, Title = "订单通知", Message = $"您拒绝了取货,交易关闭。取货保证金已扣除,货款已全额退回至“原支付账户”。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerUserId, Title = "订单通知", Message = $"买家拒绝取货,交易关闭。", ActionLink = $"app://ue/order/seller/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 买家超时未取货,扣除保证金,交易关闭 /// public static async Task MakeHangSaleOrderExpirePickUpClosedMessage(this DbRESTFulRepository repository, Producer producer, long buyerUserId, long sellerUserId, long orderId) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerUserId, Title = "订单通知", Message = $"您超时未取货,交易关闭。取货保证金已扣除,货款已全额退回至“原支付账户”。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerUserId, Title = "订单通知", Message = $"买家超时未取货,交易关闭。", ActionLink = $"app://ue/order/seller/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 后台关闭订单 /// public static async Task MakeHangSaleOrderPlatformClosedMessage(this DbRESTFulRepository repository, Producer producer, long buyerUserId, long sellerUserId, long orderId, bool returnBond, string reason) { await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerUserId, Title = "订单通知", Message = returnBond ? $"交易关闭,原因:{reason}。货款与取货保证金稍后将全额退回至“原支付账户”。" : $"交易关闭,原因:{reason}。取货保证金已扣除,货款已全额退回至“原支付账户”。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerUserId, Title = "订单通知", Message = $"交易关闭,原因:{reason}。", ActionLink = $"app://ue/order/seller/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } /// /// 挂售销售订单 买家已签收,交易成功 /// public static async Task MakeHangSaleOrderBuyerSignForMessage(this DbRESTFulRepository repository, Producer producer, long buyerUserId, long sellerUserId, long orderId, bool isAutoSignFor) { if (isAutoSignFor) await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = buyerUserId, Title = "订单通知", Message = $"您购买的商品已自动签收。", ActionLink = $"app://ue/order/hangsale/detail?id={orderId}", OrderId = orderId, }) }); await producer.ProduceAsync(NotificationModel.GetMsgKey(), new NotificationModel { Type = NotificationType.UEHangSaleOrder, Content = JsonConvert.SerializeObject(new UEHangSaleOrderModel { UserId = sellerUserId, Title = "订单通知", Message = $"您的挂售商品交易成功,货款已打至“平台账户“。", ActionLink = $"app://ue/order/seller/hangsale/detail?id={orderId}", OrderId = orderId, }) }); } #endregion 挂售订单相关通知 } }