示例#1
0
        //数据源
        public List <ContactTable> GetContactTables(List <WayBillInfo> waybillInfoList)
        {
            var listContactTable = new List <ContactTable>();
            var contactTable     = new ContactTable();
            var enumStatus       = new EnumStatus();


            foreach (var wayBillInfo in waybillInfoList)
            {
                ////判断运单状态,是否是退回,退货在仓
                //int returnStatus = WayBill.StatusToValue(WayBill.StatusEnum.Return);
                //int reGoodsInStorageStatus = WayBill.StatusToValue(WayBill.StatusEnum.ReGoodsInStorage);

                //if (wayBillInfo.Status == returnStatus || wayBillInfo.Status == reGoodsInStorageStatus)
                //{

                //    contactTable.WaybillReurnStatus = true;
                //}


                #region 获取数据
                //获取外部数据
                OrderTrackingModel getOuterOrderTrackingModel = _iFreightService.GetOutTrackingInfo(wayBillInfo.TrueTrackingNumber) ??
                                                                _iFreightService.GetOutTrackingInfo(wayBillInfo.TrackingNumber);


                //外部信息已签收--反写该运单已签收
                if (getOuterOrderTrackingModel != null && getOuterOrderTrackingModel.PackageState == (int)EnumStatus.PackageStateEnum.Delivered)
                {
                    _trackingService.UpdateWayBillInfo(wayBillInfo.WayBillNumber);
                }

                //去除外部轨迹抓取第一条
                if (getOuterOrderTrackingModel != null && getOuterOrderTrackingModel.OrderTrackingDetails.Any())
                {
                    getOuterOrderTrackingModel.OrderTrackingDetails.RemoveAt(getOuterOrderTrackingModel.OrderTrackingDetails.Count - 1);
                }

                //获取内部数据列表
                List <InTrackingLogInfo> getInTackingLogInfo     = _trackingService.GetInTrackingLogInfos(wayBillInfo.WayBillNumber).OrderByDescending(a => a.ProcessDate).ToList();
                List <InTrackingLogInfo> getInTackingLogInfoList = _trackingService.GetInTrackingLogInfos(wayBillInfo.WayBillNumber).ToList();

                #endregion


                var orderTrackingDetailModelInfo = new List <OrderTrackingDetailModelInfo>();

                //都有数据
                if (getInTackingLogInfo.Any() && getOuterOrderTrackingModel != null)
                {
                    int?getSpanDay = 0;
                    int getCount   = 0;

                    if (getOuterOrderTrackingModel.OrderTrackingDetails.Any())
                    {
                        //获取内部数据收货时间(第二条)
                        DateTime getSecondInnerDate = getInTackingLogInfoList.Count >= 2 ? getInTackingLogInfoList.Skip(1).Take(1).ToList()[0].ProcessDate.Value : getInTackingLogInfo[0].ProcessDate.Value;

                        //签收天数
                        TimeSpan ts = getOuterOrderTrackingModel.OrderTrackingDetails.First().ProcessDate.Value - getSecondInnerDate;
                        getSpanDay = Convert.ToInt32(Math.Ceiling(Math.Abs(ts.TotalDays)));
                        //外部明细
                        getCount = getOuterOrderTrackingModel.OrderTrackingDetails.Count();

                        //添加外部轨迹信息
                        getOuterOrderTrackingModel.OrderTrackingDetails.ForEach(
                            p => orderTrackingDetailModelInfo.Add(new OrderTrackingDetailModelInfo
                        {
                            WaybillNumber   = wayBillInfo.WayBillNumber,
                            ProcessDate     = p.ProcessDate,
                            ProcessContent  = p.ProcessContent,
                            ProcessLocation = p.ProcessLocation
                        }));
                    }


                    //添加内部轨迹信息
                    getInTackingLogInfo.ForEach(p => orderTrackingDetailModelInfo.Add(new OrderTrackingDetailModelInfo
                    {
                        WaybillNumber   = wayBillInfo.WayBillNumber,
                        ProcessDate     = p.ProcessDate,
                        ProcessContent  = p.ProcessContent,
                        ProcessLocation = p.ProcessLocation
                    }));


                    listContactTable.Add(new ContactTable()
                    {
                        WaybillNumber        = wayBillInfo.WayBillNumber,
                        FalseTrackNumber     = wayBillInfo.TrackingNumber,
                        CurrentLocation      = "China",
                        CustomerOrderNumber  = wayBillInfo.CustomerOrderNumber,
                        InShippingMethodName = wayBillInfo.InShippingMethodName,

                        //运单退回情况
                        WaybillReurnStatus = contactTable.WaybillReurnStatus,
                        //目的地
                        Destination = _trackingNumberService.GetShippingInfo(wayBillInfo.WayBillNumber).CountryCode,

                        //最新事件时间
                        LastEventDate    = getCount == 0 ? getInTackingLogInfo.First().ProcessDate : getOuterOrderTrackingModel.OrderTrackingDetails.First().ProcessDate,
                        LastEventContent = getCount == 0 ? getInTackingLogInfo.First().ProcessContent : getOuterOrderTrackingModel.OrderTrackingDetails.First().ProcessContent,

                        //包裹状态
                        EnumStingStatus = getCount != 0 ? enumStatus.PackageState(getOuterOrderTrackingModel.PackageState.Value) : WayBill.GetStatusDescription(wayBillInfo.Status),

                        //运单状态
                        WaybillStatus = wayBillInfo.Status,
                        //是否hold
                        IsHold = wayBillInfo.IsHold,

                        //收货天数
                        IntervalDays = getCount != 0 ? getSpanDay : Convert.ToInt32((System.DateTime.Now - getInTackingLogInfo.Min(a => a.ProcessDate).Value).TotalDays),
                        //真实跟踪号时
                        TrackNumber = wayBillInfo.TrueTrackingNumber,
                        //显示轨迹信息
                        OrderTrackingDetailModelInfo = orderTrackingDetailModelInfo
                    });
                }



                //内部表有数据,外部表没有数据
                if (getInTackingLogInfo.Any() && getOuterOrderTrackingModel == null)
                {
                    //添加内部轨迹信息
                    getInTackingLogInfo.ForEach(p => orderTrackingDetailModelInfo.Add(new OrderTrackingDetailModelInfo
                    {
                        WaybillNumber   = wayBillInfo.WayBillNumber,
                        ProcessDate     = p.ProcessDate,
                        ProcessContent  = p.ProcessContent,
                        ProcessLocation = p.ProcessLocation
                    }));


                    listContactTable.Add(new ContactTable()
                    {
                        WaybillNumber        = wayBillInfo.WayBillNumber,
                        FalseTrackNumber     = wayBillInfo.TrackingNumber,
                        CurrentLocation      = "中国",
                        CustomerOrderNumber  = wayBillInfo.CustomerOrderNumber,
                        InShippingMethodName = wayBillInfo.InShippingMethodName,

                        //目的地
                        Destination = _trackingNumberService.GetShippingInfo(wayBillInfo.WayBillNumber).CountryCode,
                        //最新事件时间
                        LastEventDate    = getInTackingLogInfo.First().ProcessDate,
                        LastEventContent = getInTackingLogInfo.First().ProcessContent,

                        //包裹状态
                        EnumStingStatus = WayBill.GetStatusDescription(wayBillInfo.Status),

                        //运单状态
                        WaybillStatus = wayBillInfo.Status,
                        //是否hold
                        IsHold = wayBillInfo.IsHold,

                        //显示轨迹信息
                        OrderTrackingDetailModelInfo = orderTrackingDetailModelInfo
                    });
                }


                //都没有轨迹数据
                if (!getInTackingLogInfo.Any() && getOuterOrderTrackingModel == null)
                {
                    listContactTable.Add(new ContactTable()
                    {
                        NoQueryWaybillnumber = wayBillInfo.WayBillNumber
                    });
                }
            }


            return(listContactTable);
        }