Пример #1
0
        /// <summary>
        /// 获得实体
        /// </summary>
        /// <returns></returns>
        private QuotedPrice EntityGet()
        {
            QuotedPrice entity = new QuotedPrice();

            entity.ID = HTDataID;
            return(entity);
        }
Пример #2
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="p_Entity">实体类</param>
        /// <returns>操作影响的记录行数</returns>
        public override int Delete(BaseEntity p_Entity)
        {
            try
            {
                QuotedPrice MasterEntity = (QuotedPrice)p_Entity;
                if (MasterEntity.ID == 0)
                {
                    return(0);
                }

                //删除主表数据
                string Sql = "";
                Sql = "DELETE FROM Sale_QuotedPrice WHERE " + "ID=" + SysString.ToDBString(MasterEntity.ID);
                //执行
                int AffectedRows = 0;
                if (!this.sqlTransFlag)
                {
                    AffectedRows = this.ExecuteNonQuery(Sql);
                }
                else
                {
                    AffectedRows = sqlTrans.ExecuteNonQuery(Sql);
                }

                return(AffectedRows);
            }
            catch (BaseException E)
            {
                throw new BaseException(E.Message, E);
            }
            catch (Exception E)
            {
                throw new BaseException(FrameWorkMessage.GetAlertMessage((int)Message.CommonDBDelete), E);
            }
        }
Пример #3
0
        /// <summary>
        /// 删除
        /// </summary>
        public override void EntityDelete()
        {
            QuotedPriceRule rule   = new QuotedPriceRule();
            QuotedPrice     entity = EntityGet();

            rule.RDelete(entity);
        }
Пример #4
0
 /// <summary>
 /// 保存(传入事务处理)
 /// </summary>
 /// <param name="p_Entity"></param>
 /// <param name="p_BE"></param>
 /// <param name="sqlTrans"></param>
 public void RSave(QuotedPrice p_Entity, BaseEntity[] p_BE, IDBTransAccess sqlTrans)
 {
     try
     {
         string sql = "DELETE FROM Sale_QuotedPriceDts WHERE MainID=" + p_Entity.ID.ToString();
         sql += " AND ID NOT IN" + string.Format("({0})", GetIDExist(p_BE));
         sqlTrans.ExecuteNonQuery(sql);//删除原单据里应该删除的明细数据,即数据库里有但是UI里已经删除的数据
         for (int i = 0; i < p_BE.Length; i++)
         {
             QuotedPriceDts entitydts = (QuotedPriceDts)p_BE[i];
             if (entitydts.ID != 0)//ID不为0说明数据库中已经存在
             {
                 this.RUpdate(entitydts, sqlTrans);
             }
             else
             {
                 entitydts.MainID = p_Entity.ID;
                 this.RAdd(entitydts, sqlTrans);
             }
         }
     }
     catch (BaseException)
     {
         throw;
     }
     catch (Exception E)
     {
         throw new BaseException(E.Message);
     }
 }
Пример #5
0
        /// <summary>
        /// 新增(传入事务处理)
        /// </summary>
        /// <param name="p_BE">要新增的实体</param>
        /// <param name="sqlTrans">事务类</param>
        public void RAdd(BaseEntity p_BE, IDBTransAccess sqlTrans)
        {
            try
            {
                this.CheckCorrect(p_BE);
                QuotedPrice entity = (QuotedPrice)p_BE;
                string      sql    = "SELECT FormNo FROM  Sale_QuotedPrice  WHERE FormNo=" + SysString.ToDBString(entity.FormNo);
                DataTable   dt     = sqlTrans.Fill(sql);
                if (dt.Rows.Count > 0)
                {
                    throw new BaseException("报价单号已存在,请重新生成");
                }

                QuotedPriceCtl control = new QuotedPriceCtl(sqlTrans);
                entity.ID = (int)EntityIDTable.GetID((long)SysEntity.Sale_QuotedPrice, sqlTrans);
                control.AddNew(entity);

                FormNoControlRule rule = new FormNoControlRule();
                rule.RAddSort((int)FormNoControlEnum.报价单号, sqlTrans);
            }
            catch (BaseException)
            {
                throw;
            }
            catch (Exception E)
            {
                throw new BaseException(E.Message);
            }
        }
Пример #6
0
        /// <summary>
        /// 检验字段值是否已存在
        /// </summary>
        /// <param name="p_TableName">表名</param>
        /// <param name="p_FieldName">字段名</param>
        /// <param name="p_FieldValue">字段值</param>
        /// <param name="p_KeyField">主键(只考虑主键为ID的情况)</param>
        /// <param name="p_KeyValue">主键值</param>
        /// <param name="p_sqlTrans"></param>
        /// <returns></returns>
        private bool CheckFieldValueIsExist(BaseEntity p_BE, string p_FieldName, string p_FieldValue, IDBTransAccess p_sqlTrans)
        {
            QuotedPrice entity = (QuotedPrice)p_BE;
            bool        ret    = false;
            string      sql    = string.Format(" SELECT {0} FROM {1} WHERE 1=1 AND {0}={2} AND {3}<>{4}", p_FieldName, QuotedPrice.TableName, SysString.ToDBString(p_FieldValue), "ID", entity.ID);
            DataTable   dt     = p_sqlTrans.Fill(sql);

            if (dt.Rows.Count != 0)
            {
                ret = true;
            }

            return(ret);
        }
Пример #7
0
 /// <summary>
 /// 修改
 /// </summary>
 /// <param name="p_BE">要修改的实体</param>
 /// <param name="sqlTrans">事务类</param>
 public void RUpdate(BaseEntity p_BE, IDBTransAccess sqlTrans)
 {
     try
     {
         this.CheckCorrect(p_BE);
         QuotedPrice    entity  = (QuotedPrice)p_BE;
         QuotedPriceCtl control = new QuotedPriceCtl(sqlTrans);
         control.Update(entity);
     }
     catch (BaseException)
     {
         throw;
     }
     catch (Exception E)
     {
         throw new BaseException(E.Message);
     }
 }
Пример #8
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="p_BE">要删除的实体</param>
        /// <param name="sqlTrans">事务类</param>
        public void RDelete(BaseEntity p_BE, IDBTransAccess sqlTrans)
        {
            try
            {
                this.CheckCorrect(p_BE);
                QuotedPrice    entity  = (QuotedPrice)p_BE;
                QuotedPriceCtl control = new QuotedPriceCtl(sqlTrans);


                string sql = "DELETE FROM Sale_QuotedPriceDts WHERE MainID=" + entity.ID.ToString();
                sqlTrans.ExecuteNonQuery(sql);//删除原单据明细数据

                control.Delete(entity);
            }
            catch (BaseException)
            {
                throw;
            }
            catch (Exception E)
            {
                throw new BaseException(E.Message);
            }
        }
Пример #9
0
        public void SettledPodForPay(IEnumerable <long> PodIDs, string creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, System.Text.StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service             = new PodService();
            var        groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 1
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);

            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();
            long relatedCustomerID           = 0;

            #region Adidas
            if (podsResponse.Result.First().CustomerID == 1)
            {
                relatedCustomerID = 1;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double      cube        = gPod.BoxNumber / 12;
                    var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    QuotedPrice price       = new QuotedPrice();
                    QuotedPrice tempPrice;

                    tempPrice = quotedPrice.FirstOrDefault(q =>
                                                           q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                           q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                           q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (tempPrice == null)
                    {
                        if (string.Equals(gPod.PODTypeName.Trim(), "退货运单", StringComparison.OrdinalIgnoreCase))
                        {
                            tempPrice = quotedPrice.FirstOrDefault(q =>
                                                                   q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.EndCityName.Trim() && q.EndCityName.Trim() == gPod.StartCityName.Trim() &&
                                                                   q.PodTypeName.Trim() == "出货运单" && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                                   q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

                            if (tempPrice == null)
                            {
                                this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统报价,出货运单也无报价,请先配置报价.");
                                continue;
                            }

                            price.Price  = tempPrice.Price;
                            price.Price *= (decimal)0.9;
                        }
                        else
                        {
                            this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                            continue;
                        }
                    }
                    else
                    {
                        price.Price = tempPrice.Price;
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }

                    decimal shipAmt = price.Price * (decimal)cube;

                    foreach (var id in innerPodIDs)
                    {
                        var        originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        SettledPod settledPod  = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(originalPod.BoxNumber / gPod.BoxNumber),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = string.Empty,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }
                }
            }
            #endregion

            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }
        public void SettledPodForReceive(IEnumerable <long> PodIDs, string Creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service = new PodService();
            var        forSettledPodsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!forSettledPodsResponse.IsSuccess)
            {
                throw forSettledPodsResponse.Exception;
            }

            var groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 0
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }
            var    quotedPrice   = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);
            var    BAF           = ApplicationConfigHelper.GetBAFPrice(ProjectID);
            string settledNumber = Guid.NewGuid().ToString();

            var SXshipper = from q in podsResponse.Result
                            where q.ShipperName == "山晓物流" || q.ShipperName == "陆久物流"
                            group q by new { q.ActualDeliveryDate, q.ShipperID, q.StartCityName, q.EndCityName }//q.ShipperID
            into r
                select new
            {
                ActualDeliveryDate = r.Key.ActualDeliveryDate.DateTimeToString(),
                StartCityName      = r.Key.StartCityName,
                EndCityName        = r.Key.EndCityName,
                ShipperID          = r.Key.ShipperID,
                Volume             = r.Sum(a => a.Volume)
            };
            var newpodsResponse = from q in podsResponse.Result
                                  where q.ShipperName != "山晓物流" && q.ShipperName != "陆久物流"
                                  group q by new { q.ActualDeliveryDate, q.EndCityName }//q.ShipperID
            into r
                select new
            {
                ActualDeliveryDate = r.Key.ActualDeliveryDate.DateTimeToString(),
                StartCityName      = "广州",
                EndCityName        = r.Key.EndCityName,
                // ShipperID = r.Key.ShipperID,
                Volume = r.Sum(a => a.Volume)
            };
            IList <SettledPod> settledPods = new List <SettledPod>();

            foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
            {
                //燃油附加费
                decimal BAFPrice = 0;
                //立方数
                double cube = gPod.Volume;
                //if( gPod.EndCityName=="苏州"){
                //    switch (gPod.StartCityName)
                //    {
                //        case "大连":
                //            break;
                //        case "青岛":
                //            break;
                //        case "丹东":
                //            break;
                //        case "番禺":
                //            break;
                //        case "清远":
                //            break;
                //        case "云浮":
                //            break;
                //        default:
                //           gPod.StartCityName = "广州";
                //           break;
                //    }
                //}else
                //  if(gPod.EndCityName == "天津") {
                //switch (gPod.StartCityName)
                //{
                //   case "大连":
                //       break;
                //   case "青岛":
                //       break;
                //   case "丹东":
                //       break;
                //   case "番禺":
                //       break;
                //   default:
                //     gPod.StartCityName = "广州";
                //     break;
                //}
                //}
                if (gPod.StartCityName == "大连" || gPod.StartCityName == "丹东")
                {
                    foreach (var item in SXshipper)
                    {
                        if (item.ActualDeliveryDate.ToString() == gPod.ActualDeliveryDate && gPod.StartCityName == item.StartCityName && item.EndCityName == gPod.EndCityName)
                        {
                            cube = Convert.ToDouble(item.Volume);
                        }
                    }
                }
                else
                {
                    foreach (var item in newpodsResponse)
                    {
                        if (item.ActualDeliveryDate.ToString() == gPod.ActualDeliveryDate && item.EndCityName == gPod.EndCityName)
                        {
                            cube = Convert.ToDouble(item.Volume);
                        }
                    }
                }
                var innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                //得到长途运输费的报价

                QuotedPrice price = quotedPrice.FirstOrDefault(q =>//
                                                               q.ProjectID == ProjectID && q.Target == 0 && q.TargetID == 13 && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                               q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                               q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

                QueryBAFPrice BAFPrices = BAF.FirstOrDefault(q =>
                                                             q.ProjectID == ProjectID && q.BAFStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && q.BAFEndTime > gPod.ActualDeliveryDate.ObjectToDateTime());


                if (BAFPrices != null)
                {
                    BAFPrice = BAFPrices.BAFPrice;
                }
                if (price == null)
                {
                    var forSettledPodsTemp = forSettledPodsResponse.Result.Where(p => gPod.PodIDs.Split('|').Contains(p.ID.ToString()));
                    if (forSettledPodsTemp != null)
                    {
                        forSettledPodsTemp.Each((k, g) =>
                        {
                            Message.Append("运单:").Append(g.CustomerOrderNumber).Append(",对应客户为:").Append(g.CustomerName).Append(",起运城市为:")
                            .Append(g.StartCityName).Append(",目的城市为:").Append(g.EndCityName).Append(",运输类型为:").Append(g.ShipperTypeName)
                            .Append(",运单类型为:").Append(g.PODTypeName).Append(",整车/零担为:").Append(g.TtlOrTplName).Append(" 无系统对应报价,请先配置报价.").Append("*");
                        });
                    }
                    continue;
                }
                if (Message.Length > 0)
                {
                    continue;
                }
                decimal shipAmt = 0;

                foreach (var id in innerPodIDs)
                {
                    //提货费
                    // decimal del = 0;
                    var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                    //是否是长途运输
                    //   if (originalPod.Str5 == "Y")
                    //  {
                    //   QuotedPrice delivery = quotedPrice.FirstOrDefault(q =>
                    //  q.ProjectID == ProjectID && q.Target == 0 && q.TargetID == gPod.TargetID && q.StartCityName.Trim() == originalPod.Str3 && q.EndCityName.Trim() == originalPod.Str3
                    //  && q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube
                    //  && q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    //  if (delivery != null)
                    // {
                    // del = delivery.Price;
                    // }
                    // }
                    shipAmt = price.Price >= 100 ? price.Price * (decimal)originalPod.Volume : price.Price * (decimal)originalPod.BoxNumber;

                    SettledPod settledPod = new SettledPod()
                    {
                        ProjectID           = originalPod.ProjectID,
                        CustomerOrderNumber = originalPod.CustomerOrderNumber,
                        SystemNumber        = originalPod.SystemNumber,
                        PodID                 = id,
                        SettledNumber         = settledNumber,
                        SettledType           = 0,
                        CustomerOrShipperID   = originalPod.CustomerID.Value,
                        CustomerOrShipperName = originalPod.CustomerName,
                        StartCityID           = originalPod.StartCityID.Value,
                        StartCityName         = originalPod.StartCityName,
                        EndCityID             = originalPod.EndCityID.Value,
                        EndCityName           = originalPod.EndCityName,
                        ShipperTypeID         = originalPod.ShipperTypeID.Value,
                        ShipperTypeName       = originalPod.ShipperTypeName,
                        PODTypeID             = originalPod.PODTypeID.Value,
                        PODTypeName           = originalPod.PODTypeName,
                        TtlOrTplID            = originalPod.TtlOrTplID.Value,
                        TtlOrTplName          = originalPod.TtlOrTplName,
                        ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                        BoxNumber             = originalPod.BoxNumber,
                        Weight                = originalPod.Weight,
                        Volume                = originalPod.Volume,
                        GoodsNumber           = originalPod.GoodsNumber,
                        ShipAmt               = shipAmt,
                        //燃油附加费=长途运费*费率(浮动率)
                        BAFAmt   = shipAmt * BAFPrice,// BAFPrice * shipAmt * (decimal)(originalPod.Str40.ObjectToDouble() / cube),
                        PointAmt = 0,
                        //其他费=卸货费(箱数*0.45)+提货费(是工厂直发才有提货费)
                        OtherAmt          = 0,//(decimal)originalPod.BoxNumber * (decimal)0.45 + del * (decimal)originalPod.Volume,
                        Amt1              = 0,
                        Amt2              = 0,
                        Amt3              = 0,
                        Amt4              = 0,
                        Amt5              = 0,
                        Str1              = string.Empty,
                        Str2              = string.Empty,
                        Str3              = string.Empty,
                        Str4              = price.Price.ToString(),
                        Str5              = string.Empty,
                        Remark            = string.Empty,
                        DateTime1         = null,
                        DateTime2         = null,
                        CreateTime        = DateTime.Now,
                        Creator           = Creator,
                        InvoiceID         = 0,
                        RelatedCustomerID = originalPod.CustomerID,
                        IsAudit           = true
                    };
                    settledPods.Add(settledPod);
                }
                if (Message.Length > 0)
                {
                    continue;
                }
            }
            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt - p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 0
                });
            }
        }
Пример #11
0
        /// <summary>
        /// 结算方法
        /// </summary>
        /// <param name="settledNumber"></param>
        /// <param name="ProjectID"></param>
        /// <param name="Message"></param>
        /// <param name="cube">合并后的立方</param>
        /// <param name="boxnumner">合并后的箱数</param>
        /// <param name="Temporary">合并后运单的集合</param>
        /// <param name="settledPods">结算结果集合</param>
        /// <param name="quotedPrices">报价</param>
        private void Settlement(string settledNumber, long ProjectID, StringBuilder Message, double cube, double boxnumner, IList <Pod> Temporary, IList <SettledPod> settledPods, IEnumerable <QuotedPrice> quotedPrices)
        {
            decimal     shipAmt = 0;
            string      n       = Temporary[0].EndCityName.Trim().Substring(0, 2) == "太仓" ? Temporary[0].EndCityName.Trim().Substring(0, 2) : Temporary[0].EndCityName.Trim();
            QuotedPrice price   = quotedPrices.FirstOrDefault(q =>
                                                              q.ProjectID == ProjectID && q.Target == 0 && q.TargetID == Temporary[0].CustomerID && q.StartCityName.Trim() == (Temporary[0].StartCityName.Trim().Substring(0, 2) == "太仓" ? Temporary[0].StartCityName.Trim().Substring(0, 2) : Temporary[0].StartCityName.Trim()) &&
                                                              q.EndCityName.Trim() == (Temporary[0].EndCityName.Trim().Substring(0, 2) == "太仓" ? Temporary[0].EndCityName.Trim().Substring(0, 2) : Temporary[0].EndCityName.Trim()) &&
                                                              q.PodTypeName.Trim() == Temporary[0].PODTypeName.Trim() && q.ShipperTypeName.Trim() == Temporary[0].ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == Temporary[0].TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                              q.EffectiveStartTime <= Temporary[0].ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= Temporary[0].ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

            if (price == null)
            {
                this.GenErrorMessage(Temporary[0], Message, " 无系统对应报价,请先配置报价.");
            }
            if (Message.Length > 0)
            {
                return;
            }
            shipAmt = price.Price * (decimal)cube;
            foreach (var pod in Temporary)
            {
                SettledPod settledPod = new SettledPod()
                {
                    ProjectID           = pod.ProjectID,
                    CustomerOrderNumber = pod.CustomerOrderNumber,
                    SystemNumber        = pod.SystemNumber,
                    PodID                 = pod.ID,
                    SettledNumber         = settledNumber,
                    SettledType           = 0,
                    CustomerOrShipperID   = pod.CustomerID.Value,
                    CustomerOrShipperName = pod.CustomerName,
                    StartCityID           = pod.StartCityID.Value,
                    StartCityName         = pod.StartCityName,
                    EndCityID             = pod.EndCityID.Value,
                    EndCityName           = pod.EndCityName,
                    ShipperTypeID         = pod.ShipperTypeID.Value,
                    ShipperTypeName       = pod.ShipperTypeName,
                    PODTypeID             = pod.PODTypeID.Value,
                    PODTypeName           = pod.PODTypeName,
                    TtlOrTplID            = pod.TtlOrTplID.Value,
                    TtlOrTplName          = pod.TtlOrTplName,
                    ActualDeliveryDate    = pod.ActualDeliveryDate.Value,
                    BoxNumber             = pod.BoxNumber,
                    Weight                = pod.Weight,
                    Volume                = pod.Volume,
                    GoodsNumber           = pod.GoodsNumber,
                    ShipAmt               = shipAmt * (decimal)(pod.BoxNumber / boxnumner),
                    BAFAmt                = 0,
                    PointAmt              = 0,
                    OtherAmt              = 0,
                    Amt1              = 0,
                    Amt2              = 0,
                    Amt3              = 0,
                    Amt4              = 0,
                    Amt5              = 0,
                    Str1              = string.Empty,
                    Str2              = string.Empty,
                    Str3              = string.Empty,
                    Str4              = price.Price.ToString(),
                    Str5              = string.Empty,
                    Remark            = string.Empty,
                    DateTime1         = null,
                    DateTime2         = null,
                    CreateTime        = DateTime.Now,
                    Creator           = pod.Creator,
                    InvoiceID         = 0,
                    RelatedCustomerID = pod.CustomerID,
                    IsAudit           = true
                };
                settledPods.Add(settledPod);
            }
        }
        public void SettledPodForPay(IEnumerable <long> PodIDs, string creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, System.Text.StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service             = new PodService();
            var        groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 1
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);

            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();
            long relatedCustomerID           = 0;

            #region akzo
            if (podsResponse.Result.First().CustomerID == 7)
            {
                relatedCustomerID = 7;
                #region  天同城
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double weight = gPod.Weight;
                    if (weight < 300)
                    {
                        weight = 300;
                    }
                    var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    QuotedPrice price       = new QuotedPrice();
                    QuotedPrice tempPrice;
                    tempPrice = quotedPrice.FirstOrDefault(q =>
                                                           q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                           q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal <= weight && q.EndVal > weight &&
                                                           q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (tempPrice == null)
                    {
                        this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                        continue;
                    }
                    else
                    {
                        price.Price = tempPrice.Price;
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    decimal shipAmt = price.Price * (decimal)weight;

                    foreach (var id in innerPodIDs)
                    {
                        var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        if (originalPod.Weight == null)
                        {
                            this.GenErrorMessage_ByGroupedPod(gPod, Message, "请先设置货物的重量");
                            continue;
                        }
                        SettledPod settledPod = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(originalPod.Weight / gPod.Weight),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = string.Empty,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };
                        settledPods.Add(settledPod);
                    }

                    #region 判断同天同城同客户的运费是否小于80
                    var groupedCustomerPodsResponse = service.SettledPodSearch(new SettledPodRequest()
                    {
                        IDs = innerPodIDs, SettledType = 1, IsID = 1
                    });
                    if (!groupedCustomerPodsResponse.IsSuccess)
                    {
                        throw groupedCustomerPodsResponse.Exception;
                    }
                    foreach (var gcPod in groupedCustomerPodsResponse.Result.GroupedPods)
                    {
                        var                innerCustomerPodIDs    = gcPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                        decimal            sumshipAmt             = 0;
                        IList <SettledPod> settledCustomerPodPods = new List <SettledPod>();
                        foreach (var id in innerCustomerPodIDs)
                        {
                            var originalCustomerPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                            foreach (var settledPod in settledPods)
                            {
                                if (originalCustomerPod.CustomerOrderNumber == settledPod.CustomerOrderNumber)
                                {
                                    sumshipAmt += (decimal)settledPod.ShipAmt;
                                    settledCustomerPodPods.Add(settledPod);
                                }
                            }
                        }
                        if (sumshipAmt < 80)
                        {
                            foreach (var settledCustomerPodPod in settledCustomerPodPods)
                            {
                                settledCustomerPodPod.OtherAmt += (80 - sumshipAmt) * (decimal)(settledCustomerPodPod.Weight / gcPod.Weight);
                            }
                        }
                    }
                    #endregion
                }
                #endregion
            }
            #endregion
            #region Nike
            if (podsResponse.Result.First().CustomerID == 8)
            {
                //起运城市是太仓CLC、太仓CRW、上海的按同城结算(大仓和工厂直发[上海])
                var podsResponses = podsResponse.Result.Where(s => s.PODTypeName == "大仓出货" || s.PODTypeName == "工厂直发").GroupBy(x => new { x.ActualDeliveryDate, x.EndCityName, })
                                    .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsResponses)
                {
                    double boxnumner = 0;
                    double cube      = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }
                    cube = boxnumner / 11;
                    Settlement(settledNumber, ProjectID, Message, cube, boxnumner, pods.pods, settledPods, quotedPrice);
                }
                //到货城市是太仓CLC、太仓CRW、上海的按同城结算(退货运单)
                var podsReturnResponses = podsResponse.Result.Where(s => s.PODTypeName == "退货运单").GroupBy(x => new { x.ActualDeliveryDate, x.StartCityName, })
                                          .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsReturnResponses)
                {
                    double boxnumner = 0;
                    double cube      = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }
                    cube = boxnumner / 11;
                    Settlement(settledNumber, ProjectID, Message, cube, boxnumner, pods.pods, settledPods, quotedPrice);
                }
                //门店调拨(按正常的同天同城结算,但报价是按箱并不与承运商做关联结算,)
                var podsTransfersResponses = podsResponse.Result.Where(s => s.PODTypeName == "门店调拨").GroupBy(x => new { x.ActualDeliveryDate, x.StartCityName, x.EndCityName })
                                             .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsTransfersResponses)
                {
                    double boxnumner = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }

                    Settlement(settledNumber, ProjectID, Message, 0, boxnumner, pods.pods, settledPods, quotedPrice);
                }

                //只有大仓出货按照11箱/方*10计算支出补贴
                var prs = podsResponse.Result.Where(p => p.PODTypeName == "大仓出货");
                prs.Each((i, e) =>
                {
                    settledPods.Each((m, n) =>
                    {
                        if (n.PodID == e.ID)
                        {
                            n.OtherAmt = (decimal)(n.BoxNumber / 11) * 10;
                        }
                    });
                });
            }
            #endregion
            #region AdidasPurchase
            if (podsResponse.Result.First().CustomerID == 13)
            {
                var newpodsResponse = from q in podsResponse.Result
                                      //where q.StartCityName != "天津" && q.StartCityName != "苏州"
                                      group q by new { q.ActualDeliveryDate, q.EndCityName, q.ShipperID }
                into r
                    select new
                {
                    ActualDeliveryDate = r.Key.ActualDeliveryDate.DateTimeToString(),
                    EndCityName        = r.Key.EndCityName,
                    ShipperID          = r.Key.ShipperID,
                    Volume             = r.Sum(a => a.Volume),
                    BoxNumber          = r.Sum(a => a.BoxNumber)
                };


                relatedCustomerID = 13;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double cube        = gPod.Volume;
                    var    innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    //gPod.StartCityName = "广东";
                    foreach (var item in newpodsResponse)
                    {
                        if (item.ActualDeliveryDate.ToString() == gPod.ActualDeliveryDate && item.EndCityName == gPod.EndCityName)
                        {
                            cube = Convert.ToDouble(item.Volume);
                        }
                    }
                    QuotedPrice price;
                    price = quotedPrice.FirstOrDefault(q =>
                                                       q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                       q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                       q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (price == null)
                    {
                        this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    decimal shipAmt  = price.Price;
                    decimal delivery = 0;
                    foreach (var id in innerPodIDs)
                    {
                        //提货费 同天同城收一票
                        //if (cube < 40)
                        //{
                        //    var a = innerPodIDs.First();
                        //    if (innerPodIDs.First().ToString() == id.ToString())
                        //    {
                        //        switch (gPod.EndCityName)
                        //        {
                        //            case "广州":
                        //                delivery = 15;
                        //                break;
                        //            case "清远":
                        //                delivery = 25;
                        //                break;
                        //            case "云浮":
                        //                delivery = 25;
                        //                break;
                        //            case "东莞":
                        //                delivery = 25;
                        //                break;
                        //            case "中山":
                        //                delivery = 25;
                        //                break;
                        //            case "佛山":
                        //                delivery = 25;
                        //                break;
                        //            case "惠州":
                        //                delivery = 25;
                        //                break;
                        //            case "河源":
                        //                delivery = 25;
                        //                break;
                        //            default:
                        //                delivery = 0;
                        //                break;
                        //        }
                        //    }
                        //}
                        var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        //卸货费
                        //decimal unload = 0;
                        //if (gPod.EndCityName == "苏州")
                        //{
                        //    unload = (decimal)4.2;
                        //}
                        //else if (gPod.EndCityName == "广州")
                        //{
                        //    unload = cube< 150 ? (decimal)5.5 : (decimal)5;
                        //}
                        SettledPod settledPod = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)originalPod.Volume,
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,//unload * (decimal)originalPod.Volume + delivery * (decimal)originalPod.Volume,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = "其他费用=提货费+卸货费",
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    //var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID)) group p by p.ID into g select new { g.Key, Pods = g });
                    //if (temp != null)
                    //{
                    //    temp.Each((i, k) =>
                    //    {
                    //        var innPodIDs = k.Pods.Select(p => p.ID);

                    //        if (1 == 1)
                    //        {
                    //            settledPods.First(s => s.PodID == innPodIDs.First()).OtherAmt = 4.2*k.Pods.Select(a=>a.Volume);
                    //            settledPods.First(s => s.PodID == innPodIDs.First()).Remark += "成耀出货,同天同城同客户点费135";
                    //        }
                    //    });
                    //}
                }
            }
            #endregion

            if (Message.Length > 0)
            {
                return;
            }

            //OtherAmt  其他费用=保底费
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }
Пример #13
0
        public void SettledPodForPay(IEnumerable <long> PodIDs, string creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, System.Text.StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service             = new PodService();
            var        groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 1
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);

            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();
            long relatedCustomerID           = 0;

            #region akzo
            if (podsResponse.Result.First().CustomerID == 7)
            {
                relatedCustomerID = 7;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double weight = gPod.Weight;
                    if (weight < 300)
                    {
                        weight = 300;
                    }
                    var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    QuotedPrice price       = new QuotedPrice();
                    QuotedPrice tempPrice;
                    tempPrice = quotedPrice.FirstOrDefault(q =>
                                                           q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                           q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal <= weight && q.EndVal > weight &&
                                                           q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (tempPrice == null)
                    {
                        this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                        continue;
                    }
                    else
                    {
                        price.Price = tempPrice.Price;
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    decimal shipAmt = price.Price * (decimal)weight;

                    foreach (var id in innerPodIDs)
                    {
                        var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        if (originalPod.Weight == null)
                        {
                            this.GenErrorMessage_ByGroupedPod(gPod, Message, "请先设置货物的重量");
                            continue;
                        }
                        SettledPod settledPod = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(originalPod.Weight / gPod.Weight),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = string.Empty,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }
                }
            }
            #endregion
            #region Nike
            if (podsResponse.Result.First().CustomerID == 8)
            {
                //起运城市是太仓CLC、太仓CRW、上海的按同城结算(大仓和工厂直发[上海])
                var podsResponses = podsResponse.Result.Where(s => s.PODTypeName == "大仓出货" || s.PODTypeName == "工厂直发").GroupBy(x => new { x.ActualDeliveryDate, x.EndCityName, })
                                    .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsResponses)
                {
                    double boxnumner = 0;
                    double cube      = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }
                    cube = boxnumner / 12;
                    Settlement(settledNumber, ProjectID, Message, cube, boxnumner, pods.pods, settledPods, quotedPrice);
                }
                //到货城市是太仓CLC、太仓CRW、上海的按同城结算(退货运单)
                var podsReturnResponses = podsResponse.Result.Where(s => s.PODTypeName == "退货运单").GroupBy(x => new { x.ActualDeliveryDate, x.StartCityName, })
                                          .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsReturnResponses)
                {
                    double boxnumner = 0;
                    double cube      = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }
                    cube = boxnumner / 12;
                    Settlement(settledNumber, ProjectID, Message, cube, boxnumner, pods.pods, settledPods, quotedPrice);
                }
                //门店调拨(按正常的同天同城结算,但报价是按箱并不与承运商做关联结算,)
                var podsTransfersResponses = podsResponse.Result.Where(s => s.PODTypeName == "门店调拨").GroupBy(x => new { x.ActualDeliveryDate, x.StartCityName, x.EndCityName })
                                             .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsTransfersResponses)
                {
                    double boxnumner = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }

                    Settlement(settledNumber, ProjectID, Message, 0, boxnumner, pods.pods, settledPods, quotedPrice);
                }

                //只有大仓出货按照12箱/方*10计算支出补贴
                var prs = podsResponse.Result.Where(p => p.PODTypeName == "大仓出货");
                prs.Each((i, e) =>
                {
                    settledPods.Each((m, n) =>
                    {
                        if (n.PodID == e.ID)
                        {
                            n.OtherAmt = (decimal)(n.BoxNumber / 12) * 10;
                        }
                    });
                });
            }
            #endregion

            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }
Пример #14
0
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="p_Entity">实体类</param>
        /// <returns>操作影响的记录行数</returns>
        public override int AddNew(BaseEntity p_Entity)
        {
            try
            {
                QuotedPrice MasterEntity = (QuotedPrice)p_Entity;
                if (MasterEntity.ID == 0)
                {
                    return(0);
                }

                //新增主表数据
                StringBuilder MasterField = new StringBuilder();
                StringBuilder MasterValue = new StringBuilder();
                MasterField.Append("INSERT INTO Sale_QuotedPrice(");
                MasterValue.Append(" VALUES(");
                MasterField.Append("ID" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.ID) + ",");
                MasterField.Append("FormNo" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.FormNo) + ",");
                MasterField.Append("MakeOPID" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.MakeOPID) + ",");
                MasterField.Append("MakeOPName" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.MakeOPName) + ",");
                MasterField.Append("MakeDate" + ",");
                if (MasterEntity.MakeDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.MakeDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("CheckOPID" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.CheckOPID) + ",");
                MasterField.Append("CheckDate" + ",");
                if (MasterEntity.CheckDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.CheckDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("SubmitFlag" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.SubmitFlag) + ",");
                MasterField.Append("DelFlag" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.DelFlag) + ",");
                MasterField.Append("FormDate" + ",");
                if (MasterEntity.FormDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.FormDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("VendorID" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.VendorID) + ",");
                MasterField.Append("SaleOPID" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.SaleOPID) + ",");
                MasterField.Append("Remark" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.Remark) + ",");
                MasterField.Append("VendorOPName" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.VendorOPName) + ",");
                MasterField.Append("EffDate" + ",");
                if (MasterEntity.EffDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.EffDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("PriceContext" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.PriceContext) + ",");
                MasterField.Append("TradeType" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.TradeType) + ",");
                MasterField.Append("AddPer" + ",");
                if (MasterEntity.AddPer != 0)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.AddPer) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("EffTime" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.EffTime) + ",");
                MasterField.Append("HL" + ",");
                if (MasterEntity.HL != 0)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.HL) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("TradeWay" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.TradeWay) + ",");
                MasterField.Append("PayMethodFlag" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.PayMethodFlag) + ",");
                MasterField.Append("TransportWay" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.TransportWay) + ",");
                MasterField.Append("SelvageReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.SelvageReq) + ",");
                MasterField.Append("DyeReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.DyeReq) + ",");
                MasterField.Append("ArrangeReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.ArrangeReq) + ",");
                MasterField.Append("PackReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.PackReq) + ",");
                MasterField.Append("QualityReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.QualityReq) + ",");
                MasterField.Append("DeliveryReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.DeliveryReq) + ",");
                MasterField.Append("OtherReq" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.OtherReq) + ",");
                MasterField.Append("VAddress" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.VAddress) + ",");
                MasterField.Append("VTelephone" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.VTelephone) + ",");
                MasterField.Append("VFax" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.VFax) + ",");
                MasterField.Append("VEmail" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.VEmail) + ",");
                MasterField.Append("JiaoQi" + ",");
                if (MasterEntity.JiaoQi != SystemConfiguration.DateTimeDefaultValue)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.JiaoQi.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("YongJing" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.YongJing) + ",");
                MasterField.Append("GangKou" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.GangKou) + ",");
                MasterField.Append("KHType" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.KHType) + ",");
                MasterField.Append("ZZMarket" + ",");
                MasterValue.Append(SysString.ToDBString(MasterEntity.ZZMarket) + ",");
                MasterField.Append("AuditTime" + ",");
                if (MasterEntity.AuditTime != SystemConfiguration.DateTimeDefaultValue)
                {
                    MasterValue.Append(SysString.ToDBString(MasterEntity.AuditTime.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    MasterValue.Append("null,");
                }

                MasterField.Append("BJSaleOPID" + ")");
                MasterValue.Append(SysString.ToDBString(MasterEntity.BJSaleOPID) + ")");



                //执行
                int AffectedRows = 0;
                if (!this.sqlTransFlag)
                {
                    AffectedRows = this.ExecuteNonQuery(MasterField.Append(MasterValue.ToString()).ToString());
                }
                else
                {
                    AffectedRows = sqlTrans.ExecuteNonQuery(MasterField.Append(MasterValue.ToString()).ToString());
                }
                return(AffectedRows);
            }
            catch (BaseException E)
            {
                throw new BaseException(E.Message, E);
            }
            catch (Exception E)
            {
                throw new BaseException(FrameWorkMessage.GetAlertMessage((int)Message.CommonDBInsert), E);
            }
        }
        public void SettledPodForReceive(IEnumerable <long> PodIDs, string Creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service = new PodService();
            //forSettledPodsResponse 待结算运单列表
            var forSettledPodsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!forSettledPodsResponse.IsSuccess)
            {
                throw forSettledPodsResponse.Exception;
            }
            //同天同城合并,取得合并运单列表 groupedPodsResponse
            var groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 0
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }
            //取得报价
            var                quotedPrice   = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);
            var                BAF           = ApplicationConfigHelper.GetBAFPrice(ProjectID);
            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();

            foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
            {
                decimal BAFPrice         = 0;
                double  cube             = 0;
                var     innerPodIDs      = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                var     tempOriginalPods = podsResponse.Result.Where(p => innerPodIDs.Contains(p.ID));
                tempOriginalPods.Each((i, p) =>
                {
                    int tempInt     = 0;
                    double tempCube = 0;
                    if (string.Equals(p.PODTypeName, "出货运单", StringComparison.OrdinalIgnoreCase))
                    {
                        if (p.CustomerOrderNumber.Substring(0, 2) == "SP" || int.TryParse(p.CustomerOrderNumber.Substring(0, 1), out tempInt))
                        {
                            tempCube = p.BoxNumber.Value / specialDivisor;//11.4
                        }
                        else
                        {
                            tempCube = p.BoxNumber.Value / commonDivisor;//11
                        }
                    }
                    else
                    {
                        tempCube = p.BoxNumber.Value / commonDivisor;
                    }
                    cube += tempCube;
                    podsResponse.Result.First(c => c.ID == p.ID).Str40 = tempCube.ToString();
                });
                QuotedPrice price = quotedPrice.FirstOrDefault(q =>
                                                               q.ProjectID == ProjectID && q.Target == 0 && q.TargetID == gPod.TargetID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                               q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                               q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                QueryBAFPrice BAFPrices = BAF.FirstOrDefault(q =>
                                                             q.ProjectID == ProjectID && q.BAFStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && q.BAFEndTime > gPod.ActualDeliveryDate.ObjectToDateTime());

                if (BAFPrices == null)
                {
                    BAFPrice = 0;
                }
                else
                {
                    BAFPrice = BAFPrices.BAFPrice;
                }
                if (price == null)
                {
                    var forSettledPodsTemp = forSettledPodsResponse.Result.Where(p => gPod.PodIDs.Split('|').Contains(p.ID.ToString()));
                    if (forSettledPodsTemp != null)
                    {
                        forSettledPodsTemp.Each((k, g) =>
                        {
                            Message.Append("运单:").Append(g.CustomerOrderNumber).Append(",对应客户为:").Append(g.CustomerName).Append(",起运城市为:")
                            .Append(g.StartCityName).Append(",目的城市为:").Append(g.EndCityName).Append(",运输类型为:").Append(g.ShipperTypeName)
                            .Append(",运单类型为:").Append(g.PODTypeName).Append(",整车/零担为:").Append(g.TtlOrTplName).Append(" 无系统对应报价,请先配置报价.").Append("*");
                        });
                    }
                    continue;
                }
                if (Message.Length > 0)
                {
                    continue;
                }
                decimal shipAmt = 0;
                shipAmt = price.Price * (decimal)cube;

                foreach (var id in innerPodIDs)
                {
                    var        originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                    SettledPod settledPod  = new SettledPod()
                    {
                        ProjectID           = originalPod.ProjectID,
                        CustomerOrderNumber = originalPod.CustomerOrderNumber,
                        SystemNumber        = originalPod.SystemNumber,
                        PodID                 = id,
                        SettledNumber         = settledNumber,
                        SettledType           = 0,
                        CustomerOrShipperID   = originalPod.CustomerID.Value,
                        CustomerOrShipperName = originalPod.CustomerName,
                        StartCityID           = originalPod.StartCityID.Value,
                        StartCityName         = originalPod.StartCityName,
                        EndCityID             = originalPod.EndCityID.Value,
                        EndCityName           = originalPod.EndCityName,
                        ShipperTypeID         = originalPod.ShipperTypeID.Value,
                        ShipperTypeName       = originalPod.ShipperTypeName,
                        PODTypeID             = originalPod.PODTypeID.Value,
                        PODTypeName           = originalPod.PODTypeName,
                        TtlOrTplID            = originalPod.TtlOrTplID.Value,
                        TtlOrTplName          = originalPod.TtlOrTplName,
                        ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                        BoxNumber             = originalPod.BoxNumber,
                        Weight                = originalPod.Weight,
                        Volume                = originalPod.Volume,
                        GoodsNumber           = originalPod.GoodsNumber,
                        ShipAmt               = shipAmt * (decimal)(originalPod.Str40.ObjectToDouble() / cube),
                        BAFAmt                = BAFPrice * shipAmt * (decimal)(originalPod.Str40.ObjectToDouble() / cube),
                        PointAmt              = 0,
                        OtherAmt              = 0,
                        Amt1              = 0,
                        Amt2              = 0,
                        Amt3              = 0,
                        Amt4              = 0,
                        Amt5              = 0,
                        Str1              = string.Empty,
                        Str2              = string.Empty,
                        Str3              = string.Empty,
                        Str4              = price.Price.ToString(),
                        Str5              = string.Empty,
                        Remark            = string.Empty,
                        DateTime1         = null,
                        DateTime2         = null,
                        CreateTime        = DateTime.Now,
                        Creator           = Creator,
                        InvoiceID         = 0,
                        RelatedCustomerID = originalPod.CustomerID,
                        IsAudit           = true
                    };

                    settledPods.Add(settledPod);
                }

                if (Message.Length > 0)
                {
                    continue;
                }

                if (string.Equals(gPod.PODTypeName.Trim(), "调拨运单", StringComparison.OrdinalIgnoreCase))
                {
                    var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID)) group p by p.Str6 into g select new { g.Key, Pods = g });

                    if (temp != null)
                    {
                        temp.Each((i, k) =>
                        {
                            var innPodIDs = k.Pods.Select(p => p.ID);
                            if (k.Pods.First().CustomerOrderNumber.Substring(0, 2) == "BR" && (k.Pods.First().StartCityName.Trim() == "苏州" || k.Pods.First().EndCityName.Trim() == "苏州"))
                            {
                                //settledPods.Each((i1, k1) =>
                                //{
                                //    if (innPodIDs.Contains(k1.PodID))
                                //    {
                                settledPods.Each((i1, k1) => { if (innerPodIDs.Contains(k1.PodID))
                                                               {
                                                                   k1.PointAmt = 0;
                                                               }
                                                 });
                                settledPods.First(c => c.PodID == k.Pods.First().ID).PointAmt = point_from_suzhou;
                                settledPods.First(c => c.PodID == k.Pods.First().ID).Remark  += "Adidas调拨运单,BR开头的按照苏州至全国,全国至苏州,按照同天同城同客户合并后每票100计算点费";
                                //k1.PointAmt = point_from_suzhou;//(decimal)(k1.BoxNumber / commonDivisor) * point_from_suzhou
                                //k1.Remark = "Adidas调拨运单,发货城市苏州,按照方*100计算点费";
                                //  }
                                //});
                            }
                            else if (k.Pods.First().CustomerOrderNumber.Substring(0, 2) == "SP" && (k.Pods.First().StartCityName.Trim() == "上海" || k.Pods.First().EndCityName.Trim() == "上海"))
                            {
                                settledPods.Each((i1, k1) => { if (innerPodIDs.Contains(k1.PodID))
                                                               {
                                                                   k1.PointAmt = 0;
                                                               }
                                                 });
                                settledPods.First(c => c.PodID == k.Pods.First().ID).PointAmt = point_from_shanghai;
                                settledPods.First(c => c.PodID == k.Pods.First().ID).Remark  += "Adidas调拨运单,SP开头的按照上海至全国,全国至上海,按照同天同城同客户合并后每票100计算点费";
                            }
                            else if (k.Pods.First().CustomerOrderNumber.Substring(0, 3) == "TRS" || k.Pods.First().CustomerOrderNumber.Substring(0, 3) == "TRN")
                            {
                                settledPods.Each((i1, k1) =>
                                {
                                    if (innPodIDs.Contains(k1.PodID))
                                    {
                                        k1.PointAmt = (decimal)(k1.BoxNumber / commonDivisor) * point100;
                                        k1.Remark   = "Adidas调拨运单,TRS开头和TRN开头,按照方*100计算点费";
                                    }
                                });
                            }
                            else if (k.Pods.First().CustomerOrderNumber.Substring(0, 3) == "SPOW")
                            {
                                settledPods.Each((i1, k1) =>
                                {
                                    if (innPodIDs.Contains(k1.PodID))
                                    {
                                        k1.PointAmt = (decimal)(k1.BoxNumber / commonDivisor) * point80;
                                        k1.Remark   = "Adidas调拨运单,SPOW开头,按照方*100计算点费";
                                    }
                                });
                            }
                            //else if ((k.Pods.First().StartCityName.Trim() == "东莞" && k.Pods.First().EndCityName == "深圳")
                            //    || (k.Pods.First().StartCityName.Trim() == "深圳" && k.Pods.First().EndCityName == "东莞")
                            //    || (k.Pods.First().StartCityName.Trim() == "东莞" && k.Pods.First().EndCityName == "广州")
                            //    || (k.Pods.First().StartCityName.Trim() == "珠海" && k.Pods.First().EndCityName == "东莞")
                            //    )
                            //{
                            //    settledPods.Each((i1, k1) =>
                            //    {
                            //        if (innPodIDs.Contains(k1.PodID))
                            //        {
                            //            k1.PointAmt = (decimal)(k1.BoxNumber / commonDivisor) * 84;
                            //            k1.Remark = "Adidas调拨运单,发货城市" + k1.StartCityName + ",收货城市" + k1.EndCityName + ",按照方*84计算点费";
                            //        }
                            //    });
                            //}
                            else
                            {
                                settledPods.Each((i1, k1) =>
                                {
                                    if (innPodIDs.Contains(k1.PodID))
                                    {
                                        k1.PointAmt = (decimal)(k1.BoxNumber / commonDivisor) * point80;
                                        k1.Remark   = "Adidas调拨运单,如无特殊,按照方*80计算点费";
                                    }
                                });
                            }
                        });
                    }
                }

                //同城同天同一家客户经销商点费为100元、自营店(客户简称为中文)原则上无点费
                if (string.Equals(gPod.PODTypeName.Trim(), "退货运单", StringComparison.OrdinalIgnoreCase))
                {
                    var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID) && k.Str10 == "经销商" || (k.Str10 == "自营店" && k.Str7 == "淘宝" && k.Str7 == "北区卫星舱")) group p by p.Str2 into g select new { g.Key, Pods = g });
                    if (temp != null)
                    {
                        temp.Each((i, k) =>
                        {
                            var innPodIDs = k.Pods.Select(p => p.ID);
                            settledPods.Each((i1, k1) => { if (innerPodIDs.Contains(k1.PodID))
                                                           {
                                                               k1.PointAmt = 0;
                                                           }
                                             });
                            settledPods.First(c => c.PodID == k.Pods.First().ID).PointAmt = point100;
                            settledPods.First(c => c.PodID == k.Pods.First().ID).Remark  += "Adidas退货,同天同城,点费100元。";
                        });
                    }
                }

                //出货 自营店(客户简称为中文)按方收取点费
                if (string.Equals(gPod.PODTypeName.Trim(), "出货运单", StringComparison.OrdinalIgnoreCase))
                {
                    var temp = podsResponse.Result.Where(p => innerPodIDs.Contains(p.ID) && p.Str10 == "自营店" && Regex.IsMatch(p.Str7.Substring(0, 1), @"^[\u4e00-\u9fa5]+$") && p.Str7 != "淘宝" && p.Str7 != "北区卫星舱" && (p.CustomerOrderNumber.Substring(0, 3) != "RBO" && p.CustomerOrderNumber.Substring(0, 2) != "OW" && p.CustomerOrderNumber.Substring(0, 2) != "ZD" && p.CustomerOrderNumber.Substring(0, 2) != "SC" && p.CustomerOrderNumber.Substring(0, 2) != "OB"));
                    if (temp != null)
                    {
                        temp.Each((i, k) =>
                        {
                            int tInt;
                            double cbm;
                            if (int.TryParse(k.CustomerOrderNumber.Substring(0, 1), out tInt))
                            {
                                cbm = k.BoxNumber.Value / specialDivisor;
                            }
                            else
                            {
                                cbm = k.BoxNumber.Value / commonDivisor;
                            }

                            settledPods.First(c => c.PodID == k.ID).PointAmt = point80 * (decimal)cbm;
                            settledPods.First(c => c.PodID == k.ID).Remark   = "Adidas出货,自营店按方*80 收取点费";
                        });
                    }
                }
            }

            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt - p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 0
                });
            }
        }
Пример #16
0
        public void SettledPodForReceive(IEnumerable <long> PodIDs, string Creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service      = new PodService();
            var        podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);

            string settledNumber = Guid.NewGuid().ToString();

            IList <SettledPod> settledPods = new List <SettledPod>();

            foreach (var pod in podsResponse.Result)
            {
                if (string.IsNullOrEmpty(pod.Str9))
                {
                    this.GenErrorMessage(pod, Message, "毛重没有录入,请重新编辑运单");
                    continue;
                }

                double weight = 0;

                try
                {
                    weight = pod.Str9.ObjectToDouble();
                }
                catch
                {
                    this.GenErrorMessage(pod, Message, "毛重数据不是数字类型,请重新编辑运单");
                    continue;
                }

                int carType = 0;
                if (pod.TtlOrTplID == 27)
                {
                    if (string.IsNullOrEmpty(pod.Str29))
                    {
                        this.GenErrorMessage(pod, Message, "无整车吨位信息,请重新编辑运单");
                        continue;
                    }

                    try
                    {
                        carType = pod.Str29.ObjectToInt32();
                    }
                    catch
                    {
                        this.GenErrorMessage(pod, Message, "整车吨位信息有误(2|5|10|15|20),,请重新编辑运单");
                        continue;
                    }
                }

                SettledPod settledPod = new SettledPod()
                {
                    ProjectID           = pod.ProjectID,
                    CustomerOrderNumber = pod.CustomerOrderNumber,
                    SystemNumber        = pod.SystemNumber,
                    PodID                 = pod.ID,
                    SettledNumber         = settledNumber,
                    SettledType           = 0,
                    CustomerOrShipperID   = pod.CustomerID.Value,
                    CustomerOrShipperName = pod.CustomerName,
                    StartCityID           = pod.StartCityID.Value,
                    StartCityName         = pod.StartCityName,
                    EndCityID             = pod.EndCityID.Value,
                    EndCityName           = pod.EndCityName,
                    ShipperTypeID         = pod.ShipperTypeID.Value,
                    ShipperTypeName       = pod.ShipperTypeName,
                    PODTypeID             = pod.PODTypeID.Value,
                    PODTypeName           = pod.PODTypeName,
                    TtlOrTplID            = pod.TtlOrTplID.Value,
                    TtlOrTplName          = pod.TtlOrTplName,
                    ActualDeliveryDate    = pod.ActualDeliveryDate.Value,
                    BoxNumber             = pod.BoxNumber,
                    Weight                = weight,
                    Volume                = pod.Volume,
                    GoodsNumber           = pod.GoodsNumber,
                    BAFAmt                = 0,
                    PointAmt              = 0,
                    OtherAmt              = 0,
                    Amt1              = 0,
                    Amt2              = 0,
                    Amt3              = 0,
                    Amt4              = 0,
                    Amt5              = 0,
                    Str1              = string.Empty,
                    Str2              = string.Empty,
                    Str3              = string.Empty,
                    Str4              = string.Empty,
                    Str5              = string.Empty,
                    Remark            = string.Empty,
                    DateTime1         = null,
                    DateTime2         = null,
                    CreateTime        = DateTime.Now,
                    Creator           = Creator,
                    InvoiceID         = 0,
                    RelatedCustomerID = pod.CustomerID,
                    IsAudit           = true
                };

                IEnumerable <QuotedPrice> prices = quotedPrice.Where(q =>
                                                                     q.ProjectID == ProjectID && q.Target == 0 && q.TargetID == pod.CustomerID && q.StartCityName == pod.StartCityName && q.EndCityName == pod.EndCityName &&
                                                                     q.PodTypeName == pod.PODTypeName && q.ShipperTypeName == pod.ShipperTypeName && q.TplOrTtlName == pod.TtlOrTplName &&
                                                                     q.EffectiveStartTime <= pod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= pod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

                if (prices == null || !prices.Any())
                {
                    this.GenErrorMessage(pod, Message, " 无对应报价,请先配置");
                    continue;
                }

                QuotedPrice price;
                QuotedPrice miniPrice = prices.FirstOrDefault(p => p.StartVal == 20 && p.EndVal == 50);

                if (miniPrice == null)
                {
                    this.GenErrorMessage(pod, Message, " 系统报价有问题!");
                    continue;
                }

                if (pod.TtlOrTplID == 26)//零担
                {
                    price = prices.FirstOrDefault(p => p.StartVal < weight && p.EndVal >= weight);

                    if (price == null)
                    {
                        this.GenErrorMessage(pod, Message, " 根据运单毛重,未找到对应报价");
                        continue;
                    }
                    var region = ApplicationConfigHelper.GetRegions().FirstOrDefault(r => r.ID == pod.EndCityID);
                    if ((pod.StartCityID == 10 && pod.EndCityID == 10) || (pod.StartCityID == 10 && region.SupperID == 10))
                    {
                        settledPod.ShipAmt = price.Price;
                    }
                    else
                    {
                        if (weight <= this._settledByItem)
                        {
                            settledPod.ShipAmt = price.Price;
                        }
                        else
                        {
                            settledPod.ShipAmt = price.Price * (decimal)weight;
                            if (settledPod.ShipAmt < miniPrice.Price)
                            {
                                settledPod.ShipAmt = miniPrice.Price;
                            }
                        }
                    }
                }
                else
                {
                    price = prices.First();
                    if (price == null || string.IsNullOrEmpty(price.Remark))
                    {
                        this.GenErrorMessage(pod, Message, "报价录入有误");
                        continue;
                    }

                    var     holeCarPrices = price.Remark.Split(';');
                    decimal holeCarPrice  = 0;
                    try
                    {
                        holeCarPrice = holeCarPrices.FirstOrDefault(p => p.Split(':')[0].ObjectToInt32() == carType).Split(':')[1].ObjectToDecimal();
                    }
                    catch
                    {
                        this.GenErrorMessage(pod, Message, "报价录入有误");
                        continue;
                    }

                    if (holeCarPrice == 0)
                    {
                        this.GenErrorMessage(pod, Message, "无对应报价,请录入报价");
                        continue;
                    }

                    settledPod.ShipAmt = holeCarPrice;
                }

                if (pod.Str22 == "1")
                {
                    if (string.Equals(pod.Str30.Trim(), "支票"))
                    {
                        settledPod.ShipAmt += this._receiveForCheck;
                    }
                    else
                    {
                        settledPod.ShipAmt += this._receiveForCache;
                    }
                }

                settledPods.Add(settledPod);
            }

            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 0
                });
            }
        }
Пример #17
0
        public void SettledPodForPay(IEnumerable <long> PodIDs, string creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, System.Text.StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service             = new PodService();
            var        groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 1
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);

            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();
            long relatedCustomerID           = 0;

            #region Adidas
            if (podsResponse.Result.First().CustomerID == 1)
            {
                relatedCustomerID = 1;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double      cube        = gPod.BoxNumber / 12;
                    var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    QuotedPrice price;
                    price = quotedPrice.FirstOrDefault(q =>
                                                       q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                       q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                       q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (price == null)
                    {
                        if (string.Equals(gPod.PODTypeName.Trim(), "退货运单", StringComparison.OrdinalIgnoreCase))
                        {
                            price       = new QuotedPrice();
                            price.Price = 100;
                        }
                        else
                        {
                            this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                            continue;
                        }
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }

                    decimal shipAmt = price.Price * (decimal)cube;

                    foreach (var id in innerPodIDs)
                    {
                        var        originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        SettledPod settledPod  = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(originalPod.BoxNumber / gPod.BoxNumber),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = string.Empty,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }

                    if (string.Equals(gPod.PODTypeName.Trim(), "出货运单", StringComparison.OrdinalIgnoreCase))
                    {
                        var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID) && k.PODTypeName.Trim() == "出货运单") group p by p.Str7 into g select new { g.Key, Pods = g });
                        if (temp != null)
                        {
                            temp.Each((i, k) =>
                            {
                                var innPodIDs = k.Pods.Select(p => p.ID);
                                settledPods.First(s => s.PodID == innPodIDs.First()).PointAmt = 165;
                                settledPods.First(s => s.PodID == innPodIDs.First()).Remark  += "亚华出货,同天同城同客户点费165";
                            });
                        }
                    }

                    if (string.Equals(gPod.PODTypeName.Trim(), "退货运单", StringComparison.OrdinalIgnoreCase))
                    {
                        var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID) && k.PODTypeName.Trim() == "退货运单") group p by p.Str7 into g select new { g.Key, Pods = g });
                        if (temp != null)
                        {
                            temp.Each((i, k) =>
                            {
                                var innPodIDs = k.Pods.Select(p => p.ID);
                                settledPods.First(s => s.PodID == innPodIDs.First()).PointAmt = 200;
                                settledPods.First(s => s.PodID == innPodIDs.First()).Remark  += "亚华退货,同天同城同客户100点费+100提货费。";
                            });
                        }
                    }
                }
            }
            #endregion


            #region AdidasPurchase
            if (podsResponse.Result.First().CustomerID == 13)
            {
                var newpodsResponse = from q in podsResponse.Result
                                      //where q.StartCityName != "天津" && q.StartCityName != "苏州"
                                      group q by new { q.ActualDeliveryDate, q.EndCityName, q.ShipperID }
                into r
                    select new
                {
                    ActualDeliveryDate = r.Key.ActualDeliveryDate.DateTimeToString(),
                    EndCityName        = r.Key.EndCityName,
                    ShipperID          = r.Key.ShipperID,
                    Volume             = r.Sum(a => a.Volume),
                    BoxNumber          = r.Sum(a => a.BoxNumber)
                };
                relatedCustomerID = 13;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double cube        = gPod.Volume;
                    var    innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    //gPod.StartCityName = "广东";
                    foreach (var item in newpodsResponse)
                    {
                        if (item.ActualDeliveryDate.ToString() == gPod.ActualDeliveryDate && item.EndCityName == gPod.EndCityName)
                        {
                            cube = Convert.ToDouble(item.Volume);
                        }
                    }
                    QuotedPrice price;
                    price = quotedPrice.FirstOrDefault(q =>
                                                       q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                       q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                       q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (price == null)
                    {
                        this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    decimal shipAmt  = price.Price;
                    decimal delivery = 0;
                    foreach (var id in innerPodIDs)
                    {
                        //提货费 同天同城收一票
                        //if (cube < 40)
                        //{
                        //    var a = innerPodIDs.First();
                        //    if (innerPodIDs.First().ToString() == id.ToString())
                        //    {
                        //        switch (gPod.EndCityName)
                        //        {
                        //            case "广州":
                        //                delivery = 15;
                        //                break;
                        //            case "清远":
                        //                delivery = 25;
                        //                break;
                        //            case "云浮":
                        //                delivery = 25;
                        //                break;
                        //            case "东莞":
                        //                delivery = 25;
                        //                break;
                        //            case "中山":
                        //                delivery = 25;
                        //                break;
                        //            case "佛山":
                        //                delivery = 25;
                        //                break;
                        //            case "惠州":
                        //                delivery = 25;
                        //                break;
                        //            case "河源":
                        //                delivery = 25;
                        //                break;
                        //            default:
                        //                delivery = 0;
                        //                break;
                        //        }
                        //    }
                        //}
                        var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        //卸货费
                        //decimal unload = 0;
                        //if (gPod.EndCityName == "苏州")
                        //{
                        //    unload = (decimal)4.2;
                        //}
                        //else if (gPod.EndCityName == "广州")
                        //{
                        //    unload = cube< 150 ? (decimal)5.5 : (decimal)5;
                        //}
                        SettledPod settledPod = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)originalPod.Volume,
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,//unload * (decimal)originalPod.Volume + delivery * (decimal)originalPod.Volume,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = "其他费用=提货费+卸货费",
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    //var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID)) group p by p.ID into g select new { g.Key, Pods = g });
                    //if (temp != null)
                    //{
                    //    temp.Each((i, k) =>
                    //    {
                    //        var innPodIDs = k.Pods.Select(p => p.ID);

                    //        if (1 == 1)
                    //        {
                    //            settledPods.First(s => s.PodID == innPodIDs.First()).OtherAmt = 4.2*k.Pods.Select(a=>a.Volume);
                    //            settledPods.First(s => s.PodID == innPodIDs.First()).Remark += "成耀出货,同天同城同客户点费135";
                    //        }
                    //    });
                    //}
                }
            }
            #endregion
            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }
Пример #18
0
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="p_Entity">实体类</param>
        /// <returns>操作影响的记录行数</returns>
        public override int Update(BaseEntity p_Entity)
        {
            try
            {
                QuotedPrice MasterEntity = (QuotedPrice)p_Entity;
                if (MasterEntity.ID == 0)
                {
                    return(0);
                }

                //更新主表数据
                StringBuilder UpdateBuilder = new StringBuilder();
                UpdateBuilder.Append("UPDATE Sale_QuotedPrice SET ");
                UpdateBuilder.Append(" ID=" + SysString.ToDBString(MasterEntity.ID) + ",");
                UpdateBuilder.Append(" FormNo=" + SysString.ToDBString(MasterEntity.FormNo) + ",");
                UpdateBuilder.Append(" MakeOPID=" + SysString.ToDBString(MasterEntity.MakeOPID) + ",");
                UpdateBuilder.Append(" MakeOPName=" + SysString.ToDBString(MasterEntity.MakeOPName) + ",");

                if (MasterEntity.MakeDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    UpdateBuilder.Append(" MakeDate=" + SysString.ToDBString(MasterEntity.MakeDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" MakeDate=null,");
                }

                UpdateBuilder.Append(" CheckOPID=" + SysString.ToDBString(MasterEntity.CheckOPID) + ",");

                if (MasterEntity.CheckDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    UpdateBuilder.Append(" CheckDate=" + SysString.ToDBString(MasterEntity.CheckDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" CheckDate=null,");
                }

                UpdateBuilder.Append(" SubmitFlag=" + SysString.ToDBString(MasterEntity.SubmitFlag) + ",");
                UpdateBuilder.Append(" DelFlag=" + SysString.ToDBString(MasterEntity.DelFlag) + ",");

                if (MasterEntity.FormDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    UpdateBuilder.Append(" FormDate=" + SysString.ToDBString(MasterEntity.FormDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" FormDate=null,");
                }

                UpdateBuilder.Append(" VendorID=" + SysString.ToDBString(MasterEntity.VendorID) + ",");
                UpdateBuilder.Append(" SaleOPID=" + SysString.ToDBString(MasterEntity.SaleOPID) + ",");
                UpdateBuilder.Append(" Remark=" + SysString.ToDBString(MasterEntity.Remark) + ",");
                UpdateBuilder.Append(" VendorOPName=" + SysString.ToDBString(MasterEntity.VendorOPName) + ",");

                if (MasterEntity.EffDate != SystemConfiguration.DateTimeDefaultValue)
                {
                    UpdateBuilder.Append(" EffDate=" + SysString.ToDBString(MasterEntity.EffDate.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" EffDate=null,");
                }

                UpdateBuilder.Append(" PriceContext=" + SysString.ToDBString(MasterEntity.PriceContext) + ",");
                UpdateBuilder.Append(" TradeType=" + SysString.ToDBString(MasterEntity.TradeType) + ",");

                if (MasterEntity.AddPer != 0)
                {
                    UpdateBuilder.Append(" AddPer=" + SysString.ToDBString(MasterEntity.AddPer) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" AddPer=null,");
                }

                UpdateBuilder.Append(" EffTime=" + SysString.ToDBString(MasterEntity.EffTime) + ",");

                if (MasterEntity.HL != 0)
                {
                    UpdateBuilder.Append(" HL=" + SysString.ToDBString(MasterEntity.HL) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" HL=null,");
                }

                UpdateBuilder.Append(" TradeWay=" + SysString.ToDBString(MasterEntity.TradeWay) + ",");
                UpdateBuilder.Append(" PayMethodFlag=" + SysString.ToDBString(MasterEntity.PayMethodFlag) + ",");
                UpdateBuilder.Append(" TransportWay=" + SysString.ToDBString(MasterEntity.TransportWay) + ",");
                UpdateBuilder.Append(" SelvageReq=" + SysString.ToDBString(MasterEntity.SelvageReq) + ",");
                UpdateBuilder.Append(" DyeReq=" + SysString.ToDBString(MasterEntity.DyeReq) + ",");
                UpdateBuilder.Append(" ArrangeReq=" + SysString.ToDBString(MasterEntity.ArrangeReq) + ",");
                UpdateBuilder.Append(" PackReq=" + SysString.ToDBString(MasterEntity.PackReq) + ",");
                UpdateBuilder.Append(" QualityReq=" + SysString.ToDBString(MasterEntity.QualityReq) + ",");
                UpdateBuilder.Append(" DeliveryReq=" + SysString.ToDBString(MasterEntity.DeliveryReq) + ",");
                UpdateBuilder.Append(" OtherReq=" + SysString.ToDBString(MasterEntity.OtherReq) + ",");
                UpdateBuilder.Append(" VAddress=" + SysString.ToDBString(MasterEntity.VAddress) + ",");
                UpdateBuilder.Append(" VTelephone=" + SysString.ToDBString(MasterEntity.VTelephone) + ",");
                UpdateBuilder.Append(" VFax=" + SysString.ToDBString(MasterEntity.VFax) + ",");
                UpdateBuilder.Append(" VEmail=" + SysString.ToDBString(MasterEntity.VEmail) + ",");

                if (MasterEntity.JiaoQi != SystemConfiguration.DateTimeDefaultValue)
                {
                    UpdateBuilder.Append(" JiaoQi=" + SysString.ToDBString(MasterEntity.JiaoQi.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" JiaoQi=null,");
                }

                UpdateBuilder.Append(" YongJing=" + SysString.ToDBString(MasterEntity.YongJing) + ",");
                UpdateBuilder.Append(" GangKou=" + SysString.ToDBString(MasterEntity.GangKou) + ",");
                UpdateBuilder.Append(" KHType=" + SysString.ToDBString(MasterEntity.KHType) + ",");
                UpdateBuilder.Append(" ZZMarket=" + SysString.ToDBString(MasterEntity.ZZMarket) + ",");

                if (MasterEntity.AuditTime != SystemConfiguration.DateTimeDefaultValue)
                {
                    UpdateBuilder.Append(" AuditTime=" + SysString.ToDBString(MasterEntity.AuditTime.ToString("yyyy-MM-dd HH:mm:ss")) + ",");
                }
                else
                {
                    UpdateBuilder.Append(" AuditTime=null,");
                }

                UpdateBuilder.Append(" BJSaleOPID=" + SysString.ToDBString(MasterEntity.BJSaleOPID));

                UpdateBuilder.Append(" WHERE " + "ID=" + SysString.ToDBString(MasterEntity.ID));



                //执行
                int AffectedRows = 0;
                if (!this.sqlTransFlag)
                {
                    AffectedRows = this.ExecuteNonQuery(UpdateBuilder.ToString());
                }
                else
                {
                    AffectedRows = sqlTrans.ExecuteNonQuery(UpdateBuilder.ToString());
                }
                return(AffectedRows);
            }
            catch (BaseException E)
            {
                throw new BaseException(E.Message, E);
            }
            catch (Exception E)
            {
                throw new BaseException(FrameWorkMessage.GetAlertMessage((int)Message.CommonDBUpdate), E);
            }
        }
Пример #19
0
        public void SettledPodForPay(IEnumerable <long> PodIDs, string creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, System.Text.StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service             = new PodService();
            var        groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
            {
                IDs = PodIDs, SettledType = 1
            });

            if (!groupedPodsResponse.IsSuccess)
            {
                throw groupedPodsResponse.Exception;
            }

            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);

            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();
            long relatedCustomerID           = 0;

            #region Adidas
            if (podsResponse.Result.First().CustomerID == 1)
            {
                relatedCustomerID = 1;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double      cube        = gPod.BoxNumber / 12;
                    var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    QuotedPrice price       = new QuotedPrice();
                    QuotedPrice tempPrice;
                    tempPrice = quotedPrice.FirstOrDefault(q =>
                                                           q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                           q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                           q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (tempPrice == null)
                    {
                        if (string.Equals(gPod.PODTypeName.Trim(), "退货运单", StringComparison.OrdinalIgnoreCase))
                        {
                            tempPrice = quotedPrice.FirstOrDefault(q =>
                                                                   q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.EndCityName.Trim() && q.EndCityName.Trim() == gPod.StartCityName.Trim() &&
                                                                   q.PodTypeName.Trim() == "出货运单" && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                                   q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

                            if (tempPrice == null)
                            {
                                this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统报价,出货运单也无报价,请先配置报价.");
                                continue;
                            }

                            price.Price  = tempPrice.Price;
                            price.Price *= (decimal)0.9;
                        }
                        else
                        {
                            this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                            continue;
                        }
                    }
                    else
                    {
                        price.Price = tempPrice.Price;
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }

                    decimal shipAmt = price.Price * (decimal)cube;

                    foreach (var id in innerPodIDs)
                    {
                        var        originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        SettledPod settledPod  = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(originalPod.BoxNumber / gPod.BoxNumber),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = string.Empty,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }
                }
            }
            #endregion
            #region Akzo
            if (podsResponse.Result.First().CustomerID == 7)
            {
                relatedCustomerID = 7;
                //var groupedModels = podsResponse.Result.GroupBy(s => new { s.ActualDeliveryDate,s.Str17}).Select(g => new { models = g.Key, Pods = g.Select(k => { return k; }) });
                var         groupedModels    = podsResponse.Result.GroupBy(s => new { s.ActualDeliveryDate, s.Str17 }).Select(g => new { models = g.Key, count = g.Count() });
                IList <Pod> settelModelspods = new List <Pod>();
                foreach (var groupedModel in groupedModels)
                {
                    DateTime time       = (DateTime)groupedModel.models.ActualDeliveryDate;
                    string   CarModels  = groupedModel.models.Str17;
                    int      placeCount = 0;
                    decimal  shipAmt    = 0;
                    double   Models     = 0;
                    double   weight     = 0;
                    string   price      = "";
                    foreach (var item in podsResponse.Result)
                    {
                        if (item.ActualDeliveryDate == time && item.Str17 == CarModels)
                        {
                            var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == item.ID);
                            settelModelspods.Add(originalPod);
                        }
                    }
                    foreach (var settelModelspod in settelModelspods)
                    {
                        weight += (double)settelModelspod.Weight;
                    }
                    if (settelModelspods[0].Str17 == "小面包车" || settelModelspods[0].Str17 == "金杯车")
                    {
                        placeCount = settelModelspods.GroupBy(s => new { s.Str3 }).Select(g => new { str3 = g.Key }).Count();
                        shipAmt    = 260 + (placeCount - 1) * 30;
                        price      = "按车结算";
                    }
                    else
                    {
                        Models = string.IsNullOrEmpty(settelModelspods[0].Str17) ? 0 : Convert.ToDouble(settelModelspods[0].Str17);
                        if (Models == 0)
                        {
                            this.GenErrorMessage_ByPod(podsResponse.Result.FirstOrDefault(p => p.ID == settelModelspods[0].ID), Message, "请设置车型");
                            continue;
                        }
                        if (Models <= 5.5)
                        {
                            placeCount = settelModelspods.GroupBy(s => new { s.Str3 }).Select(g => new { str3 = g.Key, count = g.Count() }).Count();
                            shipAmt    = 260 + (placeCount - 1) * 50;
                            price      = "按车结算";
                        }
                        if (Models >= 6.2)
                        {
                            if (weight < 10000)
                            {
                                weight = 10000;
                            }
                            shipAmt = (decimal)weight / 1000 * 70;
                            price   = (0.07).ToString();
                        }
                    }

                    foreach (var settelModelspod in settelModelspods)
                    {
                        SettledPod settledPod = new SettledPod()
                        {
                            ProjectID           = settelModelspod.ProjectID,
                            CustomerOrderNumber = settelModelspod.CustomerOrderNumber,
                            SystemNumber        = settelModelspod.SystemNumber,
                            PodID                 = settelModelspod.ID,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = settelModelspod.ShipperID.Value,
                            CustomerOrShipperName = settelModelspod.ShipperName,
                            StartCityID           = settelModelspod.StartCityID.Value,
                            StartCityName         = settelModelspod.StartCityName,
                            EndCityID             = settelModelspod.EndCityID.Value,
                            EndCityName           = settelModelspod.EndCityName,
                            ShipperTypeID         = settelModelspod.ShipperTypeID.Value,
                            ShipperTypeName       = settelModelspod.ShipperTypeName,
                            PODTypeID             = settelModelspod.PODTypeID.Value,
                            PODTypeName           = settelModelspod.PODTypeName,
                            TtlOrTplID            = settelModelspod.TtlOrTplID.Value,
                            TtlOrTplName          = settelModelspod.TtlOrTplName,
                            ActualDeliveryDate    = settelModelspod.ActualDeliveryDate.Value,
                            BoxNumber             = settelModelspod.BoxNumber,
                            Weight                = settelModelspod.Weight,
                            Volume                = settelModelspod.Volume,
                            GoodsNumber           = settelModelspod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(settelModelspod.Weight / weight),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price,
                            Str5              = string.Empty,
                            Remark            = time.ToString() + "|" + CarModels,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = settelModelspod.CustomerID,
                            IsAudit           = true
                        };
                        settledPods.Add(settledPod);
                    }
                    settelModelspods.Clear();
                }
            }
            #endregion
            #region Nike
            if (podsResponse.Result.First().CustomerID == 8)
            {
                //门店调拨(按正常的同天同城结算,但报价是按箱并不与承运商做关联结算,)
                var podsTransfersResponses = podsResponse.Result.Where(s => s.PODTypeName == "门店调拨").GroupBy(x => new { x.ActualDeliveryDate, x.StartCityName, x.EndCityName })
                                             .Select(g => new
                {
                    Peo   = g.Key,
                    count = g.Count(),
                    pods  = g.Select(k => { return(k); })
                });
                foreach (var pods in podsTransfersResponses)
                {
                    double boxnumner = 0;
                    foreach (var pod in pods.pods)
                    {
                        if (string.IsNullOrEmpty(pod.BoxNumber.ToString()))
                        {
                            this.GenErrorMessage_ByPod(pod, Message, " 请设置该运单的箱数");
                            continue;
                        }
                        boxnumner += (double)pod.BoxNumber;
                    }
                    Settlement(settledNumber, ProjectID, Message, 0, boxnumner, pods.pods, settledPods, quotedPrice);
                }
            }
            #endregion

            #region AdidasPurchase
            if (podsResponse.Result.First().CustomerID == 13)
            {
                var newpodsResponse = from q in podsResponse.Result
                                      //where q.StartCityName != "天津" && q.StartCityName != "苏州"
                                      group q by new { q.ActualDeliveryDate, q.EndCityName, q.ShipperID }
                into r
                    select new
                {
                    ActualDeliveryDate = r.Key.ActualDeliveryDate.DateTimeToString(),
                    EndCityName        = r.Key.EndCityName,
                    ShipperID          = r.Key.ShipperID,
                    Volume             = r.Sum(a => a.Volume),
                    BoxNumber          = r.Sum(a => a.BoxNumber)
                };
                relatedCustomerID = 13;
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double cube        = gPod.Volume;
                    var    innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    //gPod.StartCityName = "广东";
                    foreach (var item in newpodsResponse)
                    {
                        if (item.ActualDeliveryDate.ToString() == gPod.ActualDeliveryDate && item.EndCityName == gPod.EndCityName)
                        {
                            cube = Convert.ToDouble(item.Volume);
                        }
                    }
                    QuotedPrice price;
                    price = quotedPrice.FirstOrDefault(q =>
                                                       q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                       q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                       q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (price == null)
                    {
                        this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价,请先配置报价.");
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    decimal shipAmt  = price.Price;
                    decimal delivery = 0;
                    foreach (var id in innerPodIDs)
                    {
                        //提货费 同天同城收一票
                        //if (cube < 40)
                        //{
                        //    var a = innerPodIDs.First();
                        //    if (innerPodIDs.First().ToString() == id.ToString())
                        //    {
                        //        switch (gPod.EndCityName)
                        //        {
                        //            case "广州":
                        //                delivery = 15;
                        //                break;
                        //            case "清远":
                        //                delivery = 25;
                        //                break;
                        //            case "云浮":
                        //                delivery = 25;
                        //                break;
                        //            case "东莞":
                        //                delivery = 25;
                        //                break;
                        //            case "中山":
                        //                delivery = 25;
                        //                break;
                        //            case "佛山":
                        //                delivery = 25;
                        //                break;
                        //            case "惠州":
                        //                delivery = 25;
                        //                break;
                        //            case "河源":
                        //                delivery = 25;
                        //                break;
                        //            default:
                        //                delivery = 0;
                        //                break;
                        //        }
                        //    }
                        //}
                        var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        //卸货费
                        //decimal unload = 0;
                        //if (gPod.EndCityName == "苏州")
                        //{
                        //    unload = (decimal)4.2;
                        //}
                        //else if (gPod.EndCityName == "广州")
                        //{
                        //    unload = cube< 150 ? (decimal)5.5 : (decimal)5;
                        //}
                        SettledPod settledPod = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)originalPod.Volume,
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,//unload * (decimal)originalPod.Volume + delivery * (decimal)originalPod.Volume,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = "其他费用=提货费+卸货费",
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }
                    //var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID)) group p by p.ID into g select new { g.Key, Pods = g });
                    //if (temp != null)
                    //{
                    //    temp.Each((i, k) =>
                    //    {
                    //        var innPodIDs = k.Pods.Select(p => p.ID);

                    //        if (1 == 1)
                    //        {
                    //            settledPods.First(s => s.PodID == innPodIDs.First()).OtherAmt = 4.2*k.Pods.Select(a=>a.Volume);
                    //            settledPods.First(s => s.PodID == innPodIDs.First()).Remark += "成耀出货,同天同城同客户点费135";
                    //        }
                    //    });
                    //}
                }
            }
            #endregion
            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }
Пример #20
0
 /// <summary>
 /// 检查将要操作的数据是否符合业务规则
 /// </summary>
 /// <param name="p_BE"></param>
 private void CheckCorrect(BaseEntity p_BE)
 {
     QuotedPrice entity = (QuotedPrice)p_BE;
 }
Пример #21
0
        public void SettledPodForPay(IEnumerable <long> PodIDs, string Creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }

            PodService service      = new PodService();
            var        podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }

            var                quotedPrice   = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);
            string             settledNumber = Guid.NewGuid().ToString();
            IList <SettledPod> settledPods   = new List <SettledPod>();

            foreach (var pod in podsResponse.Result)
            {
                //For Hilti
                if (pod.CustomerID == 2)
                {
                    if (string.IsNullOrEmpty(pod.Str24))
                    {
                        this.GenErrorMessage(pod, Message, " 无净重,请先编辑运单毛重");
                        continue;
                    }

                    double weight = 0;
                    try
                    {
                        weight = pod.Str24.ObjectToDouble();
                    }
                    catch
                    {
                        this.GenErrorMessage(pod, Message, "净重数据不是数字类型,请重新编辑运单");
                        continue;
                    }

                    IEnumerable <QuotedPrice> prices = quotedPrice.Where(q =>
                                                                         q.ProjectID == ProjectID && q.Target == 0 && q.TargetID == pod.CustomerID && q.StartCityName == pod.StartCityName && q.EndCityName == pod.EndCityName &&
                                                                         q.PodTypeName == pod.PODTypeName && q.ShipperTypeName == pod.ShipperTypeName && q.TplOrTtlName == pod.TtlOrTplName &&
                                                                         q.EffectiveStartTime <= pod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= pod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

                    if (prices == null || !prices.Any())
                    {
                        this.GenErrorMessage(pod, Message, " 无对应报价,请先配置");
                        continue;
                    }

                    SettledPod settledPod = new SettledPod()
                    {
                        ProjectID           = pod.ProjectID,
                        CustomerOrderNumber = pod.CustomerOrderNumber,
                        SystemNumber        = pod.SystemNumber,
                        PodID                 = pod.ID,
                        SettledNumber         = settledNumber,
                        SettledType           = 1,
                        CustomerOrShipperID   = pod.ShipperID.Value,
                        CustomerOrShipperName = pod.ShipperName,
                        StartCityID           = pod.StartCityID.Value,
                        StartCityName         = pod.StartCityName,
                        EndCityID             = pod.EndCityID.Value,
                        EndCityName           = pod.EndCityName,
                        ShipperTypeID         = pod.ShipperTypeID.Value,
                        ShipperTypeName       = pod.ShipperTypeName,
                        PODTypeID             = pod.PODTypeID.Value,
                        PODTypeName           = pod.PODTypeName,
                        TtlOrTplID            = pod.TtlOrTplID.Value,
                        TtlOrTplName          = pod.TtlOrTplName,
                        ActualDeliveryDate    = pod.ActualDeliveryDate.Value,
                        BoxNumber             = pod.BoxNumber,
                        Weight                = weight,
                        Volume                = pod.Volume,
                        GoodsNumber           = pod.GoodsNumber,
                        BAFAmt                = 0,
                        PointAmt              = 0,
                        OtherAmt              = 0,
                        Amt1              = 0,
                        Amt2              = 0,
                        Amt3              = 0,
                        Amt4              = 0,
                        Amt5              = 0,
                        Str1              = string.Empty,
                        Str2              = string.Empty,
                        Str3              = string.Empty,
                        Str4              = string.Empty,
                        Str5              = string.Empty,
                        Remark            = string.Empty,
                        DateTime1         = null,
                        DateTime2         = null,
                        CreateTime        = DateTime.Now,
                        Creator           = Creator,
                        InvoiceID         = 0,
                        RelatedCustomerID = pod.CustomerID,
                        IsAudit           = true
                    };

                    QuotedPrice price;
                    QuotedPrice minPrice = prices.FirstOrDefault(p => p.StartVal == 0 && p.EndVal == 50);

                    if (minPrice == null)
                    {
                        this.GenErrorMessage(pod, Message, " 系统报价有问题!");
                        continue;
                    }

                    price = prices.FirstOrDefault(p => p.StartVal < weight && p.EndVal >= weight);

                    if (price == null)
                    {
                        this.GenErrorMessage(pod, Message, " 根据运单净重,未找到对应报价");
                        continue;
                    }

                    if (weight <= this._settledByItem)
                    {
                        settledPod.ShipAmt = minPrice.Price;
                    }
                    else
                    {
                        settledPod.ShipAmt = price.Price * (decimal)weight;
                        if (settledPod.ShipAmt < minPrice.Price)
                        {
                            settledPod.ShipAmt = minPrice.Price;
                        }
                    }

                    if (pod.Str22 == "1")
                    {
                        if (string.Equals(pod.Str30.Trim(), "现金"))
                        {
                            if (string.IsNullOrEmpty(pod.Str14))
                            {
                                this.GenErrorMessage(pod, Message, " 代收款方式为现金,但未提供代收款金额,无法结算代收现金手续费,请编辑运单代收款金额");
                                continue;
                            }

                            decimal tempAmt = 0;
                            try
                            {
                                tempAmt = pod.Str14.ObjectToDecimal();
                            }
                            catch
                            {
                                this.GenErrorMessage(pod, Message, " 代收款方式为现金,但代收款金额输入有误,无法结算代收现金手续费,请编辑运单代收款金额");
                                continue;
                            }

                            decimal tempAmt1 = tempAmt * this._rate;
                            if (tempAmt1 < this._minFee)
                            {
                                tempAmt1 = this._minFee;
                            }

                            settledPod.ShipAmt += tempAmt1;
                        }
                    }

                    if (pod.Str31 == "1")
                    {
                        settledPod.ShipAmt += this._caoGanAmt;
                    }

                    settledPods.Add(settledPod);
                }
            }

            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }
Пример #22
0
        public void SettledPodForPay(IEnumerable <long> PodIDs, string creator, long ProjectID, int Target, long CustomerOrShipperID, long RelatedCustomerID, StringBuilder Message)
        {
            if (Message.Length > 0)
            {
                return;
            }
            PodService         service     = new PodService();
            IList <SettledPod> settledPods = new List <SettledPod>();
            //podsResponse 待结算运单列表
            var podsResponse = service.QueryPodByPodIDs(new QueryPodByIDsRequest()
            {
                PodIDs = PodIDs
            });

            if (!podsResponse.IsSuccess)
            {
                throw podsResponse.Exception;
            }
            //取得报价
            var quotedPrice = ApplicationConfigHelper.GetProjectQuotedPrice(ProjectID, Target, CustomerOrShipperID, RelatedCustomerID);
            //生成结算序列号
            string settledNumber = Guid.NewGuid().ToString();

            long relatedCustomerID = 0;

            #region Adidas

            if (podsResponse.Result.First().CustomerID == 1)
            {
                relatedCustomerID = 1;
                var groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
                {
                    IDs = PodIDs, SettledType = 1
                });
                if (!groupedPodsResponse.IsSuccess)
                {
                    throw groupedPodsResponse.Exception;
                }
                foreach (var gPod in groupedPodsResponse.Result.GroupedPods)
                {
                    double      cube        = gPod.BoxNumber / 11;
                    var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                    QuotedPrice price       = quotedPrice.FirstOrDefault(q =>
                                                                         q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                                         q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal < cube && q.EndVal >= cube &&
                                                                         q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));
                    if (price == null)
                    {
                        this.GenErrorMessage_ByGroupedPod(gPod, Message, "无系统对应报价, 请先配置报价.");
                        continue;
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }

                    decimal shipAmt = price.Price * (decimal)cube;

                    foreach (var id in innerPodIDs)
                    {
                        var        originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                        SettledPod settledPod  = new SettledPod()
                        {
                            ProjectID           = originalPod.ProjectID,
                            CustomerOrderNumber = originalPod.CustomerOrderNumber,
                            SystemNumber        = originalPod.SystemNumber,
                            PodID                 = id,
                            SettledNumber         = settledNumber,
                            SettledType           = 1,
                            CustomerOrShipperID   = originalPod.ShipperID.Value,
                            CustomerOrShipperName = originalPod.ShipperName,
                            StartCityID           = originalPod.StartCityID.Value,
                            StartCityName         = originalPod.StartCityName,
                            EndCityID             = originalPod.EndCityID.Value,
                            EndCityName           = originalPod.EndCityName,
                            ShipperTypeID         = originalPod.ShipperTypeID.Value,
                            ShipperTypeName       = originalPod.ShipperTypeName,
                            PODTypeID             = originalPod.PODTypeID.Value,
                            PODTypeName           = originalPod.PODTypeName,
                            TtlOrTplID            = originalPod.TtlOrTplID.Value,
                            TtlOrTplName          = originalPod.TtlOrTplName,
                            ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                            BoxNumber             = originalPod.BoxNumber,
                            Weight                = originalPod.Weight,
                            Volume                = originalPod.Volume,
                            GoodsNumber           = originalPod.GoodsNumber,
                            ShipAmt               = shipAmt * (decimal)(originalPod.BoxNumber / gPod.BoxNumber),
                            BAFAmt                = 0,
                            PointAmt              = 0,
                            OtherAmt              = 0,
                            Amt1              = 0,
                            Amt2              = 0,
                            Amt3              = 0,
                            Amt4              = 0,
                            Amt5              = 0,
                            Str1              = string.Empty,
                            Str2              = string.Empty,
                            Str3              = string.Empty,
                            Str4              = price.Price.ToString(),
                            Str5              = string.Empty,
                            Remark            = string.Empty,
                            DateTime1         = null,
                            DateTime2         = null,
                            CreateTime        = DateTime.Now,
                            Creator           = creator,
                            InvoiceID         = 0,
                            RelatedCustomerID = originalPod.CustomerID,
                            IsAudit           = true
                        };

                        settledPods.Add(settledPod);
                    }

                    if (Message.Length > 0)
                    {
                        continue;
                    }

                    //同天同城,出货运单,第一个客户不算点费,之后30元一个
                    if (string.Equals(gPod.PODTypeName.Trim(), "出货运单", StringComparison.OrdinalIgnoreCase))
                    {
                        var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID)) group p by p.Str7 into g select new { g.Key, Pods = g });
                        if (temp != null)
                        {
                            temp.Each((i, k) =>
                            {
                                if (i > 0)
                                {
                                    var innPodIDs = k.Pods.Select(p => p.ID);
                                    settledPods.First(s => s.PodID == innPodIDs.First()).PointAmt = 30;
                                    settledPods.First(s => s.PodID == innPodIDs.First()).Remark   = "佳勤出货,同天同城同客户30元点费";
                                }
                            });
                        }
                    }

                    //同天同城,退货运单,客户类型为经销商,无论去几个地方30元,自营店无
                    if (string.Equals(gPod.PODTypeName.Trim(), "退货运单", StringComparison.OrdinalIgnoreCase))
                    {
                        var temp = (from p in podsResponse.Result.Where(k => innerPodIDs.Contains(k.ID)) group p by p.Str10 into g select new { g.Key, Pods = g });
                        if (temp != null)
                        {
                            foreach (var k in temp)
                            {
                                if (k.Key == "经销商")
                                {
                                    var innPodIDs = k.Pods.Select(p => p.ID);
                                    settledPods.First(s => innPodIDs.Contains(s.PodID)).PointAmt = 30;
                                    settledPods.First(s => innPodIDs.Contains(s.PodID)).Remark   = "佳勤退货,同天同城经销商30元点费";
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            #endregion Adidas
            #region akzo
            if (podsResponse.Result.First().CustomerID == 7)
            {
                relatedCustomerID = 7;
                #region   目的地是四川但不是成都的   为转仓运单
                var            regins    = ApplicationConfigHelper.GetRegions().Where(r => r.SupperID == 29 && r.Name != "成都");
                IList <string> cityNames = new List <string>();
                regins.Each((i, r) =>
                {
                    cityNames.Add(r.Name);
                    ApplicationConfigHelper.GetRegions().Where(g => g.SupperID == r.ID || g.SupperID == 256).Each((j, k) => cityNames.Add(k.Name));
                });
                IList <Pod> Normal = new List <Pod>();
                //存放转仓运单的
                IList <Pod> Special = new List <Pod>();
                podsResponse.Result.Each((i, p) =>
                {
                    if (cityNames.Contains(p.EndCityName))
                    {
                        Special.Add(p);
                    }
                    else
                    {
                        Normal.Add(p);
                    }
                });
                IEnumerable <long> podIDC  = Normal.Select(p => p.ID);
                var         groupedSprcial = Special.GroupBy(s => s.ActualDeliveryDate).Select(g => new { Date = g.Key.Value, Pods = g.Select(k => { return(k); }) });
                IList <Pod> DatePods       = new List <Pod>();
                double      SpecialWeight  = 0;
                decimal     SpecialPrice   = 0;
                decimal     SpecialShipAmt = 0;
                foreach (var item in groupedSprcial)
                {
                    DateTime dt = item.Date;
                    foreach (var pod in Special)
                    {
                        if (pod.ActualDeliveryDate == dt)
                        {
                            SpecialWeight += (double)pod.Weight;
                            DatePods.Add(pod);
                        }
                    }
                    if (SpecialWeight >= 30000)
                    {
                        SpecialPrice = (decimal)668 / 1000;
                    }
                    else if (SpecialWeight >= 20000)
                    {
                        SpecialPrice = (decimal)670 / 1000;
                    }
                    else if (SpecialWeight >= 10000)
                    {
                        SpecialPrice = (decimal)675 / 1000;
                    }
                    else if (SpecialWeight >= 3000)
                    {
                        SpecialPrice = (decimal)685 / 1000;
                    }
                    else
                    {
                        SpecialPrice = (decimal)690 / 1000;
                    }
                    SpecialShipAmt = (decimal)SpecialWeight * SpecialPrice;
                    if (SpecialWeight > 0)
                    {
                        foreach (var special in DatePods)
                        {
                            if (special.Weight == null)
                            {
                                this.GenErrorMessage_ByPod(special, Message, "请先设置货物的重量");
                                continue;
                            }
                            SettledPod settledPod = new SettledPod()
                            {
                                ProjectID           = special.ProjectID,
                                CustomerOrderNumber = special.CustomerOrderNumber,
                                SystemNumber        = special.SystemNumber,
                                PodID                 = special.ID,
                                SettledNumber         = special.CustomerOrderNumber,
                                SettledType           = 1,
                                CustomerOrShipperID   = special.ShipperID.Value,
                                CustomerOrShipperName = special.ShipperName,
                                StartCityID           = special.StartCityID.Value,
                                StartCityName         = special.StartCityName,
                                EndCityID             = special.EndCityID.Value,
                                EndCityName           = special.EndCityName,
                                ShipperTypeID         = special.ShipperTypeID.Value,
                                ShipperTypeName       = special.ShipperTypeName,
                                PODTypeID             = special.PODTypeID.Value,
                                PODTypeName           = special.PODTypeName,
                                TtlOrTplID            = special.TtlOrTplID.Value,
                                TtlOrTplName          = special.TtlOrTplName,
                                ActualDeliveryDate    = special.ActualDeliveryDate.Value,
                                BoxNumber             = special.BoxNumber,
                                Weight                = special.Weight,
                                Volume                = special.Volume,
                                GoodsNumber           = special.GoodsNumber,
                                ShipAmt               = SpecialShipAmt * (decimal)(special.Weight / SpecialWeight),
                                BAFAmt                = 0,
                                PointAmt              = 0,
                                OtherAmt              = 0,
                                Amt1              = 0,
                                Amt2              = 0,
                                Amt3              = 0,
                                Amt4              = 0,
                                Amt5              = 0,
                                Str1              = string.Empty,
                                Str2              = string.Empty,
                                Str3              = string.Empty,
                                Str4              = SpecialPrice.ToString(),
                                Str5              = string.Empty,
                                Remark            = string.Empty,
                                DateTime1         = null,
                                DateTime2         = null,
                                CreateTime        = DateTime.Now,
                                Creator           = creator,
                                InvoiceID         = 0,
                                RelatedCustomerID = special.CustomerID,
                                IsAudit           = true
                            };

                            settledPods.Add(settledPod);
                        }
                    }
                    SpecialWeight  = 0;
                    SpecialPrice   = 0;
                    SpecialShipAmt = 0;
                    DatePods.Clear();
                }
                var groupedPodsResponse = service.SettledPodSearch(new SettledPodRequest()
                {
                    IDs = podIDC, SettledType = 1, IsID = 1
                });
                if (!groupedPodsResponse.IsSuccess)
                {
                    throw groupedPodsResponse.Exception;
                }
                #endregion

                #region  目的地是成都 、重庆、西藏下面的市   就要按照同天同城同客户获取报价

                var podsResponses = from q in podsResponse.Result
                                    group q by new { q.Str2, q.StartCityName, q.ActualDeliveryDate, q.EndCityName }

                into g
                let ids = g.Select(b => b.ID.ToString()).ToArray()
                          select new
                {
                    ActualDeliveryDate = g.Max(a => a.ActualDeliveryDate),
                    ShipperTypeName    = g.Max(a => a.ShipperTypeName),
                    BoxNumber          = g.Sum(a => a.BoxNumber),
                    Volume             = g.Sum(a => a.Volume),
                    Weight             = g.Sum(a => a.Weight),
                    TargetID           = g.Max(a => a.ShipperID),
                    ShipperName        = g.Max(a => a.ShipperName),
                    ShipperTypeID      = g.Max(a => a.ShipperTypeID),
                    PODTypeID          = g.Max(a => a.PODTypeID),
                    PODTypeName        = g.Max(a => a.PODTypeName),
                    TtlOrTplID         = g.Max(a => a.TtlOrTplID),
                    TtlOrTplName       = g.Max(a => a.TtlOrTplName),
                    StartCityID        = g.Max(a => a.StartCityID),
                    StartCityName      = g.Max(a => a.StartCityName),
                    GoodsNumber        = g.Max(a => a.GoodsNumber),
                    EndCityName        = g.Max(a => a.EndCityName),
                    PodIDs             = string.Join("|", ids),
                    //sd=g.Max(a=>a.),
                };
                foreach (var gPod in podsResponses)
                {
                    List <string> endcityname = new List <string> {
                        "成都", "重庆", "长寿", "达州", "涪陵", "广安", "华蓥", "江津", "万源",
                        "万州", "永川", "昌都", "噶尔", "拉萨", "林芝", "那曲", " 乃东", "日喀则"
                    };

                    if (endcityname.Contains(gPod.EndCityName))
                    {
                        double weight  = (double)gPod.Weight;
                        double weights = 0;
                        if (weight < 50)
                        {
                            weights = 50;
                        }
                        else
                        {
                            weights = weight;
                        }

                        var         innerPodIDs = gPod.PodIDs.Split('|').Select(i => i.ObjectToInt64());
                        QuotedPrice price       = new QuotedPrice();
                        QuotedPrice tempPrice;
                        //tempPrice = quotedPrice.FirstOrDefault(q =>
                        //q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim()
                        //&& q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal <= weight && q.EndVal > weight
                        //&& q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));

                        tempPrice = quotedPrice.FirstOrDefault(q =>
                                                               q.ProjectID == ProjectID && q.Target == 1 && q.TargetID == gPod.TargetID && q.RelatedCustomerID == relatedCustomerID && q.StartCityName.Trim() == gPod.StartCityName.Trim() && q.EndCityName.Trim() == gPod.EndCityName.Trim() &&
                                                               q.PodTypeName.Trim() == gPod.PODTypeName.Trim() && q.ShipperTypeName.Trim() == gPod.ShipperTypeName.Trim() && q.TplOrTtlName.Trim() == gPod.TtlOrTplName.Trim() && q.StartVal <= weights && q.EndVal > weight &&
                                                               q.EffectiveStartTime <= gPod.ActualDeliveryDate.ObjectToDateTime() && (q.EffectiveEndTime >= gPod.ActualDeliveryDate.ObjectToDateTime() || q.EffectiveEndTime == null));



                        GroupedPods gPods = new GroupedPods();
                        gPods.PodIDs          = gPod.PodIDs;
                        gPods.TargetName      = gPod.ShipperName;
                        gPods.StartCityName   = gPod.StartCityName;
                        gPods.EndCityName     = gPod.EndCityName;
                        gPods.ShipperTypeName = gPod.ShipperTypeName;
                        gPods.PODTypeName     = gPod.PODTypeName;
                        gPods.TtlOrTplName    = gPod.TtlOrTplName;
                        if (tempPrice == null)
                        {
                            this.GenErrorMessage_ByGroupedPod(gPods, Message, "无系统对应报价,请先配置报价.");
                            continue;
                        }
                        else
                        {
                            price.Price = tempPrice.Price;
                        }

                        if (Message.Length > 0)
                        {
                            continue;
                        }
                        decimal shipAmt = price.Price;

                        foreach (var id in innerPodIDs)
                        {
                            var originalPod = podsResponse.Result.FirstOrDefault(p => p.ID == id);
                            if (originalPod.Weight == null)
                            {
                                this.GenErrorMessage_ByGroupedPod(gPods, Message, "请先设置货物的重量");
                                continue;
                            }
                            SettledPod settledPod = new SettledPod()
                            {
                                ProjectID           = originalPod.ProjectID,
                                CustomerOrderNumber = originalPod.CustomerOrderNumber,
                                SystemNumber        = originalPod.SystemNumber,
                                PodID                 = id,
                                SettledNumber         = settledNumber,
                                SettledType           = 1,
                                CustomerOrShipperID   = originalPod.ShipperID.Value,
                                CustomerOrShipperName = originalPod.ShipperName,
                                StartCityID           = originalPod.StartCityID.Value,
                                StartCityName         = originalPod.StartCityName,
                                EndCityID             = originalPod.EndCityID.Value,
                                EndCityName           = originalPod.EndCityName,
                                ShipperTypeID         = originalPod.ShipperTypeID.Value,
                                ShipperTypeName       = originalPod.ShipperTypeName,
                                PODTypeID             = originalPod.PODTypeID.Value,
                                PODTypeName           = originalPod.PODTypeName,
                                TtlOrTplID            = originalPod.TtlOrTplID.Value,
                                TtlOrTplName          = originalPod.TtlOrTplName,
                                ActualDeliveryDate    = originalPod.ActualDeliveryDate.Value,
                                BoxNumber             = originalPod.BoxNumber,
                                Weight                = originalPod.Weight,
                                Volume                = originalPod.Volume,
                                GoodsNumber           = originalPod.GoodsNumber,
                                ShipAmt               = weight < 50 ? shipAmt * (decimal)(originalPod.Weight / weight) * 50 : shipAmt * (decimal)originalPod.Weight,
                                BAFAmt                = 0,
                                PointAmt              = 0,
                                OtherAmt              = 0,
                                Amt1              = 0,
                                Amt2              = 0,
                                Amt3              = 0,
                                Amt4              = 0,
                                Amt5              = 0,
                                Str1              = string.Empty,
                                Str2              = string.Empty,
                                Str3              = string.Empty,
                                Str4              = price.Price.ToString(),
                                Str5              = string.Empty,
                                Remark            = string.Empty,
                                DateTime1         = null,
                                DateTime2         = null,
                                CreateTime        = DateTime.Now,
                                Creator           = creator,
                                InvoiceID         = 0,
                                RelatedCustomerID = originalPod.CustomerID,
                                IsAudit           = true
                            };

                            settledPods.Add(settledPod);
                        }
                    }
                }


                #endregion
            }
            #endregion
            if (Message.Length > 0)
            {
                return;
            }
            else
            {
                settledPods.Each((i, p) => { p.TotalAmt = p.ShipAmt + p.PointAmt + p.BAFAmt + p.OtherAmt + p.Amt1 + p.Amt2 + p.Amt3 + p.Amt4 + p.Amt5; });
                new SettledService().SettlePods(new SettlePodsRequest()
                {
                    SettledPods = settledPods, SettledType = 1
                });
            }
        }