Пример #1
0
        public void SendUpdateTaskState(TaskOrderModel tom, bool isCreate = false)
        {
            JsonSerializerSettings jsseting = new JsonSerializerSettings();

            jsseting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            jsseting.ContractResolver      = new CamelCasePropertyNamesContractResolver();
            ResponseEntry re = new ResponseEntry();

            if (isCreate)
            {
                switch (tom.ProductType)
                {
                case ProductType.Hotel: re.T = "h"; break;

                case ProductType.Tax: re.T = "t"; break;

                case ProductType.Titcket: re.T = "k"; break;
                }
            }
            else
            {
                re.T = "u";
            }
            re.D = tom;
            Context.Connection.Broadcast(JsonConvert.SerializeObject(re, Formatting.Indented, jsseting));
        }
        /// <summary>
        /// 根据门店的评论信息 计算 评论的分类
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        public static string CalCulateShopCommentType(TaskOrderModel order, List <ShopCommentTypeRule> rules)
        {
            string type = "BY";                                                    //  若没有匹配到类型, 则 默认 为保养

            if (order.OrderType.Trim() == "1普通" || order.OrderType.Trim() == "普通") //订单的类型 是1普通 普通 ,订单二级特殊分类
            {
                //1普通下面的pid 分类
                List <string> productPID_TR = rules.Where(p => p.ShopType == "TR" && !string.IsNullOrWhiteSpace(p.PIDPrefix)).FirstOrDefault().PIDPrefix.Split(',').ToList();
                //1普通下面的 pid所属的类目 进行分类
                /// 保养类型 筛选 条件
                List <string> productCategory_BY = rules.Where(p => p.ShopType == "BY" && !string.IsNullOrWhiteSpace(p.ProductType)).FirstOrDefault().ProductType.Split(',').ToList();
                /// 安装类型 筛选 条件
                List <string> productCategory_FW = rules.Where(p => p.ShopType == "FW" && !string.IsNullOrWhiteSpace(p.ProductType)).FirstOrDefault().ProductType.Split(',').ToList();
                /// 美容类型 筛选 条件
                List <string> productCategory_MR = rules.Where(p => p.ShopType == "MR" && !string.IsNullOrWhiteSpace(p.ProductType)).FirstOrDefault().ProductType.Split(',').ToList();

                List <string> productCategory = new List <string>();

                foreach (var item in order.Items)
                {
                    productCategory.AddRange(item.CategoryList);
                }
                List <string> PIDs = order.Items.Select(p => p.PID).ToList();
                //保养 > 轮胎 > 车品[安装] > 美容
                if (productCategory_BY.Where(p => productCategory.Contains(p)).Count() > 0)
                {
                    type = "BY";
                }
                else if (productPID_TR.Where(p => PIDs.Any(f => f.StartsWith(p))).Count() > 0)
                {
                    type = "TR";
                }
                else if (productCategory_FW.Where(p => productCategory.Contains(p)).Count() > 0)
                {
                    type = "FW";
                }
                else if (productCategory_MR.Where(p => productCategory.Contains(p)).Count() > 0)
                {
                    type = "MR";
                }
            }
            else if (order.OrderType.Trim() == "25VIP客户" || order.OrderType.Trim() == "VIP客户")
            {
                List <string> OrderNos = order.Items.Select(p => p.OrderNo).ToList();
                if (OrderNos.Any(p => p.StartsWith("TR")))
                {
                    type = "TR";
                }
            }
            else //订单的类型 不是1普通 普通,直接根据订单类型 和 分类规则进行 分类
            {
                ShopCommentTypeRule rule = rules.Where(p => p.OrderType == order.OrderType).FirstOrDefault();
                if (rule != null)
                {
                    type = rule.ShopType;
                }
            }
            return(type);
        }
        /// <summary>
        /// 批量获取订单 信息
        /// </summary>
        /// <param name="orderIds"></param>
        /// <param name="productList"></param>
        /// <returns></returns>
        private static async Task <List <TaskOrderModel> > BatchFetchOrderList(List <int> orderIds, List <TaskProductModel> productList)
        {
            List <TaskOrderModel> orderInfos = new List <TaskOrderModel> {
            };

            try
            {
                using (var client = new OrderApiForCClient())
                {
                    foreach (var orderId in orderIds)
                    {
                        TaskOrderModel orderInfo = new TaskOrderModel()
                        {
                            OrderId = orderId
                        };
                        var result = await client.FetchOrderAndListByOrderIdAsync(orderId);

                        if (!(result.Success && result.Result != null))
                        {
                            result = await client.FetchOrderAndListByOrderIdAsync(orderId, false);
                        }

                        if (result.Success && result.Result != null)
                        {
                            orderInfo.OrderType   = result.Result.OrderType;
                            orderInfo.OrderStatus = result.Result.Status;
                            foreach (var item in result.Result.OrderListModel)
                            {
                                var productItem = new TaskProductModel
                                {
                                    PID     = item.Pid,
                                    OrderNo = item.OrderNo,
                                    Count   = item.Num
                                };
                                orderInfo.Items.Add(productItem);
                            }

                            if (orderInfo.Items.Any())
                            {
                                orderInfos.Add(orderInfo);
                                productList.AddRange(orderInfo.Items);
                            }
                            else
                            {
                                Logger.Warn($"未发现订单详情==>{orderId}");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Warn(
                    $"BatchFetchOrderList 失败;Error:{ex.Message}", ex);
            }
            return(orderInfos);
        }
Пример #4
0
        public async Task <IHttpActionResult> PutOrderStatus(Guid id)
        {
            string err = string.Empty;

            try
            {
                var order = db.Orders.Include("OrderItems").FirstOrDefault(o => o.Id == id);
                if (order.OrderStatus != OrderStatus.Partion)
                {
                    ///取消还未下单的订单
                    var tasks = db.Tasks.Include(t => t.Personinfos).Where(t => t.OrderCode == order.OrderCode).ToList();
                    if (tasks.Count > 0)
                    {
                        bool isCancelOrder = true;
                        foreach (var item in tasks)
                        {
                            if (item.State == TaskState.Create || item.State == TaskState.Take || item.State == TaskState.Change)
                            {
                                item.State = TaskState.Canceled;
                                await db.SaveChangesAsync();

                                _changeState.SendUpdateTaskState(item);
                            }
                            if (item.State == TaskState.Finish)
                            {
                                isCancelOrder = false;
                                TaskOrderModel tom = new TaskOrderModel();
                                tom.OrderCode     = item.OrderCode;
                                tom.OrderItemId   = item.OrderItemId;
                                tom.ProductCode   = item.ProductCode;
                                tom.ProductFrom   = item.ProductFrom;
                                tom.ProductName   = item.ProductName;
                                tom.ProductType   = item.ProductType;
                                tom.Quantity      = item.Quantity;
                                tom.Remark        = item.Remark;
                                tom.UsedEndDate   = item.UsedEndDate;
                                tom.UsedStartDate = item.UsedStartDate;
                                foreach (var it in item.Personinfos)
                                {
                                    tom.Personinfos.Add(it);
                                }
                                tom.State = TaskState.CreateCancel;
                                db.Tasks.Add(tom);
                                await db.SaveChangesAsync();

                                _changeState.SendUpdateTaskState(tom, true);
                            }
                        }
                        if (isCancelOrder)
                        {
                            order.OrderStatus = OrderStatus.Canceled;
                            order.Remark      = order.Remark + "订单取消完成";
                        }
                        else
                        {
                            order.OrderStatus = OrderStatus.Cancel;
                        }
                    }
                    else
                    {
                        order.OrderStatus = OrderStatus.Canceled;
                    }
                    await db.SaveChangesAsync();

                    OrderUpdateModel oum = new OrderUpdateModel();
                    oum.Id     = order.Id;
                    oum.State  = order.OrderStatus;
                    oum.Remark = order.Remark;
                    _changeState.SendUpdateOrderState(oum);
                }
            }
            catch (Exception)
            {
                return(InternalServerError());
            }

            return(Ok());
        }