/// <summary> /// 保存打印发货单 /// </summary> /// <param name="orders"></param> public ResultDTO SavePrintInvoiceOrdersExt(UpdatePrintDTO orders) { try { if (orders == null || orders.Orders == null || orders.Orders.Count == 0) { return new ResultDTO() { ResultCode = 1, Message = "参数错误,参数不能为空!" } } ; var tempOrderIds = orders.Orders.Select(r => r.OrderId).ToList(); var newOrders = (from n in CommodityOrder.ObjectSet() join o in tempOrderIds on n.Id equals o select n).ToList(); if (newOrders == null || newOrders.Count == 0) { return new ResultDTO() { ResultCode = 1, Message = "数据错误" } } ; //记录打印日志,延迟提交库 RecordPrintLog(newOrders, orders); if (ContextFactory.CurrentThreadContext.SaveChanges() > 0) { return new ResultDTO() { ResultCode = 0, Message = "保存成功" } } ; } catch (Exception ex) { LogHelper.Error(string.Format("保存打印发货单。SavePrintInvoiceOrdersExt:{0}", JsonHelper.JsonSerializer(orders)), ex); } return(new ResultDTO() { ResultCode = 1, Message = "保存失败" }); }
/// <summary> /// 记录打印日志,延迟提交库 /// </summary> /// <param name="commodityOrders"></param> /// <param name="orders"></param> public void RecordPrintLog(List <CommodityOrder> commodityOrders, UpdatePrintDTO orders) { DateTime now = DateTime.Now; var orderPrintLog = OrderPrintLog.CreateOrderPrintLog(); orderPrintLog.AppId = orders.AppId; orderPrintLog.PrintType = orders.PrintType; orderPrintLog.PrintUserId = orders.UserId; ContextFactory.CurrentThreadContext.SaveObject(orderPrintLog); //记录打印次数 commodityOrders.ForEach(r => { if (orderPrintLog.PrintType == 1) { r.InvoicePrintCount = r.InvoicePrintCount.HasValue ? r.InvoicePrintCount.Value + 1 : 1; } if (orderPrintLog.PrintType == 0) { r.ExpressPrintCount = r.ExpressPrintCount.HasValue ? r.ExpressPrintCount.Value + 1 : 1; } r.EntityState = EntityState.Modified; r.ModifiedOn = now; ContextFactory.CurrentThreadContext.SaveObject(r); var log = OrderPrintDetailLog.CreateOrderPrintDetailLog(); if (orderPrintLog.PrintType == 0) { log.ExpressNo = orders.Orders.Find(o => o.OrderId == r.Id).ExpressOrder; } log.OrderId = r.Id; log.PrintId = orderPrintLog.Id; ContextFactory.CurrentThreadContext.SaveObject(log); }); }
/// <summary> /// 打印快递单更新保存数据 /// </summary> /// <param name="orders"></param> public ResultDTO SavePrintOrdersExt(UpdatePrintDTO orders) { #region 需求整理 //订单状态(必填):未支付=0,未发货=1, //已发货=2,确认收货=3, //商家取消订单=4,客户取消订单=5, //超时交易关闭=6,已退款=7, //待发货退款中=8,已发货退款中=9, //已发货退款中商家同意退款,商家未收到货=10,付款中=11, //金和处理退款中=12,出库中=13, //出库中退款中=14,待审核=16, //待付款待审核=17,餐饮订单待处理=18, //餐饮订单已处理=19 //判断是否更新订单状态。 //更新订单物流信息 //记录物流信息 //更新打印次数。 //记录打印日志 //CancelTheOrderExt //ShipUpdataOrderExt //GetOrderStateList //OrderSV.CanChangeState //OrderSV.LockOrder //待发货、出库中、待发货退款中 // 打印(自动发货) 更新物流信息,如果有退款拒绝退款 //其他状态都不更新订单洗物流信息 也不更新订单状态,无论选择不选择自动发货 #endregion try { if (orders == null || orders.Orders == null || orders.Orders.Count == 0) { return new ResultDTO() { ResultCode = 1, Message = "参数错误,参数不能为空!" } } ; var tempOrderIds = orders.Orders.Select(r => r.OrderId).ToList(); var newOrders = (from n in CommodityOrder.ObjectSet() join o in tempOrderIds on n.Id equals o select n).ToList(); //var newOrders = (from o in orders.Orders // join n in tnewOrders on o.OrderId equals n.Id // select new // { // OldOrder = o, // NewOrder = n // }).ToList(); if (newOrders == null || newOrders.Count == 0) { return new ResultDTO() { ResultCode = 1, Message = "数据错误" } } ; var canToState2 = new List <int>() { 1, 8, 13 }; var updateStates = newOrders.Where(r => orders.AutoSend && canToState2.Contains(r.State)).Select(r => r).ToList(); //记录打印日志,延迟提交库 RecordPrintLog(newOrders, orders); if (updateStates.Count > 0) { return(BatchUpdateOrderStateTo2(updateStates, orders, UpdateOrderStateTo2CallBack)); } if (ContextFactory.CurrentThreadContext.SaveChanges() > 0) { return new ResultDTO() { ResultCode = 0, Message = "保存成功" } } ; } catch (Exception ex) { LogHelper.Error(string.Format("打印快递单更新保存数据。UpdatePrintOrderInfoExt:{0}", JsonHelper.JsonSerializer(orders)), ex); } return(new ResultDTO() { ResultCode = 1, Message = "保存失败" }); }
/// <summary> /// 更新订单成功回调函数 /// </summary> /// <param name="commodityOrder"></param> public void UpdateOrderStateTo2CallBack(List <CommodityOrder> commodityOrders, UpdatePrintDTO orders) { try { #region 异步发送消息 System.Threading.ThreadPool.QueueUserWorkItem( a => { commodityOrders.ForEach(commodityOrder => { try { AddMessage addmassage = new AddMessage(); string type = "order"; Guid esAppId = commodityOrder.EsAppId.HasValue ? commodityOrder.EsAppId.Value : commodityOrder.AppId; addmassage.AddMessages(commodityOrder.Id.ToString(), commodityOrder.UserId.ToString(), esAppId, commodityOrder.Code, commodityOrder.State, "", type); } catch (Exception ex) { } }); }); #endregion #region 向第三方“快递鸟”发送物流订阅请求 List <OrderExpressRoute> oers = new List <OrderExpressRoute>(); orders.Orders.ForEach(r => { if (!string.IsNullOrEmpty(r.ExpressOrder) && !oers.Exists(o => o.ExpOrderNo == r.ExpressOrder)) { //TODO dzc 向第三方“快递鸟”发送物流订阅请求。 oers.Add(new OrderExpressRoute() { ShipExpCo = orders.ShipName, ExpOrderNo = r.ExpressOrder }); } }); OrderExpressRouteBP oerBP = new OrderExpressRouteBP(); oerBP.BatchSubscribeOneOrderExpressExt(oers); #endregion } catch (Exception ex) { LogHelper.Error(string.Format("更新打印订单成功回调函数。UpdateOrderStateTo2CallBack:{0}", JsonHelper.JsonSerializer(orders)), ex); } }
/// <summary> /// 打印订单状态变为2(已发货) /// </summary> /// <param name="ucopDto">参数</param> /// <param name="commodityOrder">订单信息</param> /// <returns></returns> private ResultDTO UpdateOrderStateTo2(UpdateCommodityOrderParamDTO ucopDto, CommodityOrder commodityOrder, UpdatePrintDTO orders) { try { ContextSession contextSession = ContextFactory.CurrentThreadContext; DateTime now = DateTime.Now; int oldState = commodityOrder.State; int newState = ucopDto.targetState; #region 退款 var orderRefund = new CommodityOrderBP().getOrderRefund(ucopDto.orderId); if (orderRefund != null) { orderRefund.State = 2; orderRefund.ModifiedOn = now; } #endregion if (!OrderSV.CanChangeState(newState, commodityOrder, orderRefund, null, null)) { return(new ResultDTO() { ResultCode = 1, Message = "订单状态修改错误" }); } #region 订单 string shipExpCo = orders.ShipName; string expOrderNo = orders.Orders.Find(r => r.OrderId == ucopDto.orderId).ExpressOrder; commodityOrder.ShipExpCo = string.IsNullOrWhiteSpace(shipExpCo) ? "" : shipExpCo.Trim(); commodityOrder.ExpOrderNo = string.IsNullOrWhiteSpace(expOrderNo) ? "" : expOrderNo.Trim(); commodityOrder.ExpOrderNo = commodityOrder.ExpOrderNo.Replace("+", ""); commodityOrder.State = ucopDto.targetState; //更新发货时间 commodityOrder.ShipmentsTime = now; if (commodityOrder.IsRefund == true) { commodityOrder.IsRefund = false; } commodityOrder.EntityState = EntityState.Modified; commodityOrder.ModifiedOn = now; #endregion #region 保存物流子表 //保存物流子表 OrderShipping orderShipping = OrderShipping.CreateOrderShipping(); orderShipping.OrderId = ucopDto.orderId; orderShipping.ShipExpCo = commodityOrder.ShipExpCo; orderShipping.ExpOrderNo = commodityOrder.ExpOrderNo; contextSession.SaveObject(orderShipping); #endregion #region 订单日志 Journal journal = Journal.CreateJournal(ucopDto, commodityOrder, oldState, "商家已发货"); contextSession.SaveObject(journal); #endregion return(new ResultDTO() { ResultCode = 0, Message = "设置一个订单成功" }); } catch (Exception ex) { LogHelper.Error(string.Format("打印订单状态变为2(已发货)。UpdateOrderStateTo2:{0}", JsonHelper.JsonSerializer(ucopDto)), ex); } return(new ResultDTO() { ResultCode = 1, Message = "设置一个订单失败" }); }
/// <summary> /// 批量更新订单自动发货 /// </summary> /// <param name="commodityOrders"></param> /// <param name="orders"></param> /// <param name="updateAfter"></param> /// <returns></returns> public ResultDTO BatchUpdateOrderStateTo2(List <CommodityOrder> commodityOrders, UpdatePrintDTO orders, Action <List <CommodityOrder>, UpdatePrintDTO> updateAfter) { try { var result = new ResultDTO() { ResultCode = 0 }; commodityOrders.ForEach(r => { UpdateCommodityOrderParamDTO ucopDto = new UpdateCommodityOrderParamDTO() { orderId = r.Id, targetState = 2, remessage = "", userId = orders.UserId }; var _result = UpdateOrderStateTo2(ucopDto, r, orders); if (_result.ResultCode != 0) { result = _result; } }); if (result.ResultCode != 0) { return(result); } var savecount = ContextFactory.CurrentThreadContext.SaveChanges(); ///保存成功之后异步回调 if (savecount > 0 && updateAfter != null) { System.Threading.Tasks.Task.Factory.StartNew(() => { updateAfter(commodityOrders, orders); }); } if (savecount > 0) { return new ResultDTO() { ResultCode = 0, Message = "保存成功" } } ; } catch (Exception ex) { LogHelper.Error(string.Format("批量更新订单自动发货。BatchUpdateOrderStateTo2:{0}", JsonHelper.JsonSerializer(orders)), ex); } return(new ResultDTO() { ResultCode = 1, Message = "保存失败" }); }