Пример #1
0
        public ReturnType RemoveStockInOut(string stockinoutCode)
        {
            try
            {
                using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
                {
                    /*List<StockInOut> list = alading.StockInOut.Where(p => p.StockInOutID == stockinoutID).ToList();*/
                    List <StockInOut> list = alading.StockInOut.Where(p => p.InOutCode == stockinoutCode).ToList();
                    if (list.Count == 0)
                    {
                        return(ReturnType.NotExisted);
                    }

                    else
                    {
                        StockInOut sy = list.First();
                        alading.DeleteObject(sy);
                        alading.SaveChanges();
                        return(ReturnType.Success);
                    }
                }
            }
            catch (SqlException sex)
            {
                return(ReturnType.ConnFailed);
            }
            catch (System.Exception ex)
            {
                return(ReturnType.OthersError);
            }
        }
Пример #2
0
 private void SaveButton_Click(object sender, EventArgs e)
 {
     try
     {
         StockInOut   stockInOut   = new StockInOut();
         Transactions transactions = new Transactions();
         DateTime     today        = DateTime.Today;
         stockInOut.ItemId              = Convert.ToInt32(itemComboBox.SelectedValue.ToString());
         stockInOut.Quantity            = Convert.ToInt32(stockInQuantityTextBox.Text);
         stockInOut.StockId             = 1;
         stockInOut.Status              = null;
         stockInOut.Date                = today.ToString("dd/MM/yyyy");
         _availq                        = Update(transactions) + stockInOut.Quantity;
         transactions.AvailableQuantity = _availq;
         bool isAdded = Add(stockInOut);
         if (isAdded)
         {
             MessageBox.Show("Stock In successfully");
         }
         else
         {
             MessageBox.Show("Error");
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Пример #3
0
        private void Add(StockInOut stockInOut)
        {
            foreach (DataGridViewRow rows in dataGridView1.Rows)
            {
                Transactions transactions = new Transactions();
                DateTime     today        = DateTime.Today;
                stockInOut.ItemId   = Convert.ToInt32(rows.Cells["ItemId"].Value);
                stockInOut.Quantity = Convert.ToInt32(rows.Cells["Quantity"].Value);
                stockInOut.StockId  = 2;

                stockInOut.Date = today.ToString("dd/MM/yyyy");
                _availq         = Convert.ToInt32(rows.Cells["Avail"].Value) - stockInOut.Quantity;
                transactions.AvailableQuantity = _availq;
                if (stockInOut.ItemId > 0)
                {
                    string connectionString = @"server=DESKTOP-412B1P8\SQLEXPRESS; database=StockManagement; integrated security=true";

                    SqlConnection con = new SqlConnection(connectionString);

                    string query = @"INSERT INTO StockInOut VALUES('" + stockInOut.ItemId + "','" + stockInOut.Quantity + "','" +
                                   stockInOut.StockId + "','" + stockInOut.Date + "','" + stockInOut.Status + "') UPDATE Transactions SET AvailableQuantity = '" + _availq + "' WHERE ItemId = '" + stockInOut.ItemId + "' ";
                    SqlCommand command = new SqlCommand(query, con);

                    con.Open();

                    bool isAdded = command.ExecuteNonQuery() > 0;


                    con.Close();
                }
            }
        }
Пример #4
0
 public ReturnType AddStockInOut(StockInOut stockinout)
 {
     try
     {
         using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
         {
             alading.AddToStockInOut(stockinout);
             if (alading.SaveChanges() == 1)
             {
                 return(ReturnType.Success);
             }
             else
             {
                 return(ReturnType.PropertyExisted);
             }
         }
     }
     catch (SqlException sex)
     {
         return(ReturnType.ConnFailed);
     }
     catch (Exception ex)
     {
         return(ReturnType.OthersError);
     }
 }
Пример #5
0
 public ReturnType AddInOutAndDetails(StockInOut stockInOut, PayCharge payChage, List <StockDetail> sdList, List <StockHouseProduct> shpList, List <View_StockItemProduct> vsipList)
 {
     System.Data.Common.DbTransaction tran = null;
     using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
     {
         try
         {
             alading.Connection.Open();
             tran = alading.Connection.BeginTransaction();
             alading.AddToPayCharge(payChage);
             alading.AddToStockInOut(stockInOut);
             foreach (StockDetail sd in sdList)
             {
                 alading.AddToStockDetail(sd);
             }
             foreach (StockHouseProduct shp in shpList)
             {
                 StockHouseProduct tmpshp = alading.StockHouseProduct.FirstOrDefault(c => c.HouseProductCode == shp.HouseProductCode);
                 if (tmpshp != null)
                 {
                     tmpshp.Num = shp.Num;
                 }
                 else
                 {
                     alading.AddToStockHouseProduct(shp);
                 }
             }
             foreach (View_StockItemProduct vsip in vsipList)
             {
                 StockItem    stockItem    = alading.StockItem.FirstOrDefault(s => s.OuterID == vsip.OuterID);
                 StockProduct stockProduct = alading.StockProduct.FirstOrDefault(s => s.SkuOuterID == vsip.SkuOuterID);
                 stockItem.TotalQuantity     = Math.Round(vsip.TotalQuantity, 3);
                 stockProduct.SkuQuantity    = vsip.SkuQuantity;
                 stockProduct.LastStockPrice = vsip.LastStockPrice;
                 stockProduct.AvgStockPrice  = vsip.AvgStockPrice;
             }
             alading.SaveChanges();
             tran.Commit();
             return(ReturnType.Success);
         }
         catch (System.Exception ex)
         {
             if (tran != null)
             {
                 tran.Rollback();
             }
             return(ReturnType.SaveFailed);
         }
         finally
         {
             if (alading != null && alading.Connection.State != System.Data.ConnectionState.Closed)
             {
                 alading.Connection.Close();
             }
         }
     }
 }
Пример #6
0
        public ReturnType AddStockInOutDetail(List <Alading.Entity.StockInOut> stockInOutList, List <StockDetail> stockDetailList)
        {
            try
            {
                using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
                {
                    StockInOut stock = alading.StockInOut.FirstOrDefault(i => i.InOutCode == stockInOutList[0].InOutCode);
                    if (stock == null)
                    {
                        return(ReturnType.PropertyExisted);
                    }
                    foreach (StockInOut stockinout in stockInOutList)
                    {
                        alading.AddToStockInOut(stockinout);
                    }

                    foreach (StockDetail stockDetail in stockDetailList)
                    {
                        StockHouseProduct stockProduct = alading.StockHouseProduct.FirstOrDefault(i => i.SkuOuterID == stockDetail.ProductSkuOuterId && i.HouseCode == stockDetail.StockHouseCode && i.LayoutCode == stockDetail.StockLayOutCode);
                        if (stockProduct != null)
                        {
                            if (stockDetail.DetailType == (int)DetailType.AllocateIn)
                            {
                                stockProduct.Num += stockDetail.Quantity;
                            }
                            else if (stockDetail.DetailType == (int)DetailType.AllocateOut)
                            {
                                stockProduct.Num -= stockDetail.Quantity;
                            }
                        }
                        else
                        {
                            //从一个仓库调拨到另一个仓库中,此仓库没有此product
                            StockHouseProduct newProduct = new StockHouseProduct();
                            newProduct.HouseName        = stockDetail.HouseName;
                            newProduct.HouseCode        = stockDetail.StockHouseCode;
                            newProduct.HouseProductCode = Guid.NewGuid().ToString();
                            newProduct.LayoutCode       = stockDetail.StockLayOutCode;
                            newProduct.LayoutName       = stockDetail.LayoutName;
                            newProduct.Num        = stockDetail.Quantity;
                            newProduct.SkuOuterID = stockDetail.ProductSkuOuterId;
                            alading.AddToStockHouseProduct(newProduct);
                        }
                        alading.AddToStockDetail(stockDetail);
                    }
                    alading.SaveChanges();
                    return(ReturnType.Success);
                }
            }
            catch (Exception ex)
            {
                return(ReturnType.OthersError);
            }
        }
Пример #7
0
        private void itemComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            _itemId = Convert.ToInt32(itemComboBox.SelectedValue.ToString());
            StockInOut stockInOut = new StockInOut();

            if (itemComboBox.SelectedIndex > 0)
            {
                reorderLabel.Text           = OrderLevelCheck(stockInOut).ToString();
                availableQuantityLabel.Text = availLevelCheck(stockInOut).ToString();
            }
        }
Пример #8
0
        private int OrderLevelCheck(StockInOut stockInOut)
        {
            Int32         reorder          = 0;
            string        connectionString = @"server=DESKTOP-412B1P8\SQLEXPRESS; database=StockManagement; integrated security=true";
            SqlConnection con     = new SqlConnection(connectionString);
            string        query   = @"SELECT ReorderLevel FROM Items WHERE Id = '" + _itemId + "' ";
            SqlCommand    command = new SqlCommand(query, con);

            con.Open();
            reorder = (int)command.ExecuteScalar();
            con.Close();
            return(reorder);
        }
Пример #9
0
        private int availLevelCheck(StockInOut stockInOut)
        {
            Int32  avail            = 0;
            string connectionString = @"server=DESKTOP-412B1P8\SQLEXPRESS; database=StockManagement; integrated security=true";

            SqlConnection con     = new SqlConnection(connectionString);
            string        query   = @"SELECT AvailableQuantity FROM Transactions WHERE ItemId = '" + _itemId + "'  ";
            SqlCommand    command = new SqlCommand(query, con);

            con.Open();
            avail = (int)command.ExecuteScalar();
            con.Close();
            return(avail);
        }
Пример #10
0
 private void LostButton_Click(object sender, EventArgs e)
 {
     try
     {
         StockInOut stockInOut = new StockInOut();
         stockInOut.Status = 3.ToString();
         Add(stockInOut);
         dataGridView1.DataSource = null;
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Пример #11
0
        public ReturnType RemoveInOutAndDetails(string inOutCode)
        {
            System.Data.Common.DbTransaction tran = null;
            using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
            {
                try
                {
                    alading.Connection.Open();
                    tran = alading.Connection.BeginTransaction();
                    List <StockInOut> list = alading.StockInOut.Where(p => p.InOutCode == inOutCode).ToList();
                    if (list.Count == 0)
                    {
                        return(ReturnType.NotExisted);
                    }

                    else
                    {
                        StockInOut sy = list.First();
                        foreach (StockDetail sd in alading.StockDetail.Where(c => c.InOutCode == inOutCode))
                        {
                            alading.DeleteObject(sd);
                        }
                        alading.DeleteObject(sy);
                        alading.SaveChanges();
                    }
                    alading.SaveChanges();
                    tran.Commit();
                    return(ReturnType.Success);
                }
                catch (SqlException sex)
                {
                    return(ReturnType.ConnFailed);
                }
                catch (System.Exception ex)
                {
                    if (tran != null)
                    {
                        tran.Rollback();
                    }
                    return(ReturnType.SaveFailed);
                }
                finally
                {
                    if (alading != null && alading.Connection.State != System.Data.ConnectionState.Closed)
                    {
                        alading.Connection.Close();
                    }
                }
            }
        }
Пример #12
0
        private bool Add(StockInOut stockInOut)
        {
            string connectionString = @"server=DESKTOP-412B1P8\SQLEXPRESS; database=StockManagement; integrated security=true";

            SqlConnection con = new SqlConnection(connectionString);

            string query = @"INSERT INTO StockInOut VALUES('" + stockInOut.ItemId + "','" + stockInOut.Quantity + "','" +
                           stockInOut.StockId + "','" + stockInOut.Date + "','" + stockInOut.Status + "') UPDATE Transactions SET AvailableQuantity = '" + _availq + "' WHERE ItemId = '" + _itemId + "' ";
            SqlCommand command = new SqlCommand(query, con);

            con.Open();

            bool isAdded = command.ExecuteNonQuery() > 0;


            con.Close();
            return(isAdded);
        }
Пример #13
0
        public ReturnType UpdateStockInOut(string stockinoutCode, StockInOut stockinout)
        {
            try
            {
                using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
                {
                    /*var result = alading.StockInOut.Where(p => p.StockInOutID == stockinoutID).ToList();*/
                    var result = alading.StockInOut.Where(p => p.InOutCode == stockinoutCode).ToList();
                    if (result.Count == 0)
                    {
                        return(ReturnType.NotExisted);
                    }

                    StockInOut ob = result.First();
                    ob.InOutCode      = stockinout.InOutCode;
                    ob.InOutTime      = stockinout.InOutTime;
                    ob.OperatorCode   = stockinout.OperatorCode;
                    ob.OperatorName   = stockinout.OperatorName;
                    ob.InOutType      = stockinout.InOutType;
                    ob.TradeOrderCode = stockinout.TradeOrderCode;
                    ob.DiscountFee    = stockinout.DiscountFee;
                    ob.DueFee         = stockinout.DueFee;
                    ob.InOutStatus    = stockinout.InOutStatus;
                    ob.IsSettled      = stockinout.IsSettled;

                    if (alading.SaveChanges() == 1)
                    {
                        return(ReturnType.Success);
                    }
                    else
                    {
                        return(ReturnType.OthersError);
                    }
                }
            }
            catch (SqlException sex)
            {
                return(ReturnType.ConnFailed);
            }
            catch (System.Exception ex)
            {
                return(ReturnType.OthersError);
            }
        }
Пример #14
0
 public static ReturnType UpdateStockInOut(string stockinoutCode, StockInOut stockinout)
 {
     return(DataProviderClass.Instance().UpdateStockInOut(stockinoutCode, stockinout));
 }
Пример #15
0
 public static ReturnType AddStockInOut(StockInOut stockinout)
 {
     return(DataProviderClass.Instance().AddStockInOut(stockinout));
 }
Пример #16
0
 public static ReturnType AddInOutAndDetails(StockInOut stockInOut, PayCharge payChage, List <StockDetail> sdList, List <StockHouseProduct> shpList, List <View_StockItemProduct> vsipList)
 {
     return(DataProviderClass.Instance().AddInOutAndDetails(stockInOut, payChage, sdList, shpList, vsipList));
 }
Пример #17
0
        /// <summary>
        /// 初始化入库,将outer_id相同的商品作为同种商品处理,将成功的商品
        /// 从失败列表failedViewItemList里删除,并更新成功商品的IsAssociate为TRUE
        /// </summary>
        /// <param name="ViewItemlist"></param>
        private void InPutStock(List <ViewShopItemInherit> vItemlist, DoWorkEventArgs e)
        {
            if (vItemlist == null || vItemlist.Count == 0)
            {
                return;
            }
            //存放需要更新和关联的商品iid,outer_id
            Dictionary <string, string> itemOuterIdDic = new Dictionary <string, string>();

            //去除outer_id相同的商品
            List <ViewShopItemInherit> ViewItemlist = vItemlist.Distinct(new ShopItemComparer()).ToList();

            /*查找与数据库重复的商品,将其从入库列表中跳过*/
            List <string> dRepeatedOuterIdList = StockItemService.GetWhereInOuterIds(vItemlist.Select(v => v.outer_id).Distinct().ToList());

            ViewItemlist = ViewItemlist.SkipWhile(v => dRepeatedOuterIdList.Contains(v.outer_id)).ToList();
            /*将跳过入库的商品信息加进itemOuterIdDic中*/
            foreach (string outer_id in dRepeatedOuterIdList)
            {
                //失败列表删除与当前商品outer_id相同的所有商品
                inPutFailedViewItemList.RemoveAll(v => v.outer_id == outer_id);
                //查找所有outer_id下的商品iid并加入iidlist中
                vItemlist.FindAll(v => v.outer_id == outer_id).ForEach(a => itemOuterIdDic.Add(a.iid, a.outer_id));
            }
            if (ViewItemlist.Count > 0)
            {
                //获取cid下的所有属性值
                List <View_ItemPropValue> viewPropValueList = ItemPropValueService.GetView_ItemPropValueList(ViewItemlist.First().cid, "-1", "-1");

                /*销售属性是否有必填项*/
                bool salePropHasMust = false;
                if (viewPropValueList.Where(v => v.is_sale_prop && v.must).ToList().Count > 0)
                {
                    salePropHasMust = true;
                }

                //获取该类目下所有销售属性Id
                List <string> salePidList = viewPropValueList.Where(v => v.is_sale_prop).Select(v => v.pid).Distinct().ToList();

                /*StockInOut*/
                StockInOut stockIntOut = new StockInOut();
                #region 赋值stockInOut
                stockIntOut.AmountTax      = 0;
                stockIntOut.DiscountFee    = 0;
                stockIntOut.DueFee         = 0;
                stockIntOut.FreightCode    = string.Empty;
                stockIntOut.FreightCompany = string.Empty;
                stockIntOut.IncomeTime     = DateTime.Now;
                stockIntOut.InOutCode      = System.Guid.NewGuid().ToString();
                stockIntOut.InOutStatus    = (int)InOutStatus.AllReach;
                stockIntOut.InOutTime      = DateTime.Now;
                stockIntOut.InOutType      = (int)InOutType.InitInput;
                stockIntOut.IsSettled      = true;
                /*操作人*/
                stockIntOut.OperatorCode = string.Empty;
                stockIntOut.OperatorName = string.Empty;
                stockIntOut.PayTerm      = 0;
                stockIntOut.PayThisTime  = 0;
                stockIntOut.PayType      = (int)PayType.OTHER;
                /*模糊查询字段*/
                stockIntOut.SearchText     = string.Empty;
                stockIntOut.TradeOrderCode = string.Empty;
                stockIntOut.TransportCode  = string.Empty;
                #endregion

                //进度报告暂存值
                int temp = 0;
                #region for循环入库
                for (int j = 0; j < ViewItemlist.Count; j++)
                {
                    if (workerInput.CancellationPending)
                    {
                        e.Cancel = true;
                        break;
                    }
                    ViewShopItemInherit viewItem = ViewItemlist[j];

                    StockItem stock = new StockItem();
                    stock.HasSaleProps = !string.IsNullOrEmpty(viewItem.skus);
                    #region 赋值StockItem
                    stock.Name           = viewItem.title;
                    stock.SimpleName     = viewItem.title;
                    stock.OuterID        = viewItem.outer_id;
                    stock.TotalQuantity  = (double)viewItem.TotalQuantity;//总数量,默认值
                    stock.ProductID      = viewItem.product_id;
                    stock.CatName        = viewItem.name ?? string.Empty;
                    stock.Cid            = viewItem.cid ?? string.Empty;
                    stock.Created        = DateTime.Now;
                    stock.InputPids      = viewItem.input_pids ?? string.Empty;
                    stock.InputStr       = viewItem.input_str ?? string.Empty;
                    stock.IsConsignment  = false;
                    stock.KeyProps       = viewItem.KeyProps ?? string.Empty;
                    stock.Modified       = DateTime.Now;
                    stock.NotKeyProps    = viewItem.NotKeyProps ?? string.Empty;
                    stock.PicUrl         = viewItem.pic_url ?? string.Empty;
                    stock.Property_Alias = viewItem.property_alias ?? string.Empty;
                    stock.Props          = viewItem.props ?? string.Empty;
                    stock.SaleProps      = viewItem.StockProps ?? string.Empty;
                    /*库存类目*/
                    stock.StockCatName    = viewItem.StockCatName;
                    stock.StockCid        = viewItem.StockCid;
                    stock.StockItemCode   = System.Guid.NewGuid().ToString();
                    stock.StockItemDesc   = viewItem.desc ?? string.Empty;
                    stock.StockItemImgs   = viewItem.item_imgs ?? string.Empty;
                    stock.StockItemRemark = Constants.INIT_FROM_TOP;
                    stock.StockItemType   = (int)Alading.Core.Enum.StockItemType.FinishGoods;
                    stock.UnitCode        = viewItem.UnitCode; //单位

                    /*空值字段*/
                    stock.SearchText    = string.Empty;
                    stock.Specification = string.Empty;
                    stock.Model         = string.Empty;
                    stock.Tax           = string.Empty;
                    stock.TaxName       = string.Empty;
                    stock.StockProps    = string.Empty;//自定义属性
                    stock.StockCheckUrl = string.Empty;
                    /*辅助字段*/
                    stock.IsSelected = false;
                    #endregion

                    List <StockProduct>      stockProductList      = new List <StockProduct>();
                    List <StockDetail>       stockDetailList       = new List <StockDetail>();
                    List <StockHouseProduct> stockHouseProductList = new List <StockHouseProduct>();
                    int stockTotalQuantity = 0;
                    if (!string.IsNullOrEmpty(viewItem.props))
                    {
                        List <Taobao.Entity.Sku> skuList = new List <Taobao.Entity.Sku>();

                        SortedDictionary <string, List <string> > propValueDic = new SortedDictionary <string, List <string> >();
                        #region  照;分割,同时去掉空白项,每一项是一个pid:vid,值放进字典propValueDic里
                        List <string> propsList = viewItem.props.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                        foreach (string pv in propsList)
                        {
                            string[] pvArr = pv.Split(new Char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                            if (pvArr.Length == 2)
                            {
                                if (!propValueDic.Keys.Contains(pvArr[0]))
                                {
                                    List <string> vidlist = new List <string>();
                                    vidlist.Add(pvArr[1]);
                                    propValueDic.Add(pvArr[0], vidlist);
                                }
                                else
                                {
                                    propValueDic[pvArr[0]].Add(pvArr[1]);
                                }
                            }
                        }
                        #endregion

                        /*销售属性有两个,根据条件组合Sku*/
                        if (salePidList.Count == 2)
                        {
                            //保存有值的销售属性个数
                            int salePropValueCount = 0;
                            //将props里存在值的属性串的pid放进列表itemPidlist
                            List <string> itemPidList = propValueDic.Keys.ToList();
                            //求itemPidList与salePropIdList的交集,结果的个数表示销售属性选择的个数
                            salePropValueCount = itemPidList.Intersect(salePidList).ToList().Count;

                            #region 如果销售属性包含必选项但填写项数不为2,或者不包含必选项但选择项个数为1时,组合SKU
                            //用于存放两组vid列表
                            SortedList <string, List <string> > saleValueList = new SortedList <string, List <string> >();
                            if ((salePropHasMust && salePropValueCount != 2) || !salePropHasMust && salePropValueCount == 1)
                            {
                                #region 查询属性值放进saleValueList
                                for (int i = 0; i < 2; i++)
                                {
                                    string pid = salePidList[i];
                                    /*如果商该品选择了此销售属性,则把其值加进字典里*/
                                    if (propValueDic.Keys.Contains(pid))
                                    {
                                        saleValueList.Add(pid, propValueDic[pid]);
                                    }
                                    /*该商品没有选则此销售属性,则把此属性下的所有属性值加进字典*/
                                    else
                                    {
                                        List <string> vidlist = new List <string>();
                                        viewPropValueList.Where(v => v.is_sale_prop && v.pid == pid).Select(v => v.vid).Distinct().ToList().ForEach(a => vidlist.Add(a));
                                        saleValueList.Add(pid, vidlist);
                                    }
                                }
                                #endregion

                                #region 组合Sku,加进skuList
                                if (saleValueList.Count == 2)
                                {
                                    foreach (string vid0 in saleValueList.Values[0])
                                    {
                                        foreach (string vid1 in saleValueList.Values[1])
                                        {
                                            Taobao.Entity.Sku sku = new Taobao.Entity.Sku();
                                            sku.SkuProps = string.Format("{0}:{1};{2}:{3}", saleValueList.Keys[0], vid0, saleValueList.Keys[1], vid1);
                                            sku.Quantity = 0;
                                            sku.Price    = "0";
                                            /*sku.OuterId在这里不编码,最后统一编码*/
                                            skuList.Add(sku);
                                        }
                                    }
                                }
                                #endregion
                            }
                            #endregion
                        }

                        Alading.Taobao.Entity.Extend.Skus skus = JsonConvert.DeserializeObject <Alading.Taobao.Entity.Extend.Skus>(viewItem.skus);
                        if (skus != null && skus.Sku != null)
                        {
                            skuList.AddRange(skus.Sku);
                        }
                        if (skuList.Count == 0)
                        {
                            Taobao.Entity.Sku sku = new Taobao.Entity.Sku();
                            sku.SkuProps = string.Empty;
                            sku.Price    = viewItem.price;
                            sku.Quantity = (int)stock.TotalQuantity;
                            /*sku.OuterId在这里不编码,最后统一编码*/
                            skuList.Add(sku);
                        }
                        //根据SkuProps去重
                        skuList = skuList.Distinct(new SkuComparer()).ToList();
                        for (int i = 0; i < skuList.Count; i++)
                        {
                            Alading.Taobao.Entity.Sku sku = skuList[i];
                            StockProduct product          = new StockProduct();
                            #region 赋值StockProduct
                            product.LastStockPrice   = product.AvgStockPrice = 0;
                            product.CommissionPrice  = 0;
                            product.MaxSkuPrice      = 0;
                            product.MinSkuPrice      = 0;
                            product.OccupiedQuantity = 0;
                            product.OuterID          = stock.OuterID;
                            product.SkuQuantity      = sku.Quantity;
                            //重新计算库存总量
                            stockTotalQuantity += sku.Quantity;

                            product.SkuPrice = product.MarketPrice = sku.Price == null ? 0 : double.Parse(sku.Price);
                            //由于sku.OuterId是不允许编辑的,所有系统编码不会有重复
                            product.SkuOuterID = string.Format("{0}-{1}", product.OuterID, i + 1);
                            product.SkuProps   = sku.SkuProps;
                            //分割属性查找
                            #region 翻译销售属性组合
                            List <string> skuPropsList = product.SkuProps.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                            string        propstr      = string.Empty;
                            //每个PV值都为pid:vid格式
                            foreach (string pv in skuPropsList)
                            {
                                string[] pvArr = pv.Split(new Char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                                if (pvArr.Length == 2)
                                {
                                    View_ItemPropValue viewProp = viewPropValueList.SingleOrDefault(vv => vv.pid == pvArr[0] && vv.vid == pvArr[1]);
                                    if (viewProp != null)
                                    {
                                        //重新命名销售属性,如:1627207:28341:黑色;1627207:3232481:棕色
                                        if (!string.IsNullOrEmpty(viewItem.property_alias) && viewItem.property_alias.Contains(pv))
                                        {
                                            List <string> propertyAliasList = viewItem.property_alias.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                                            foreach (string propertyAlias in propertyAliasList)
                                            {
                                                if (propertyAlias.Contains(pv))
                                                {
                                                    propstr += string.Format("{0}:{1};", viewProp.prop_name, propertyAlias.Substring(propertyAlias.LastIndexOf(':') + 1));
                                                    break;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            propstr += string.Format("{0}:{1};", viewProp.prop_name, viewProp.name_alias);
                                        }
                                    }
                                }
                            }
                            propstr = propstr.TrimEnd(';');
                            if (string.IsNullOrEmpty(propstr))
                            {
                                product.SkuProps_Str = string.Empty;
                            }
                            else
                            {
                                /*重新分割,按默认排序进行排序*/
                                skuPropsList = propstr.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                                skuPropsList.Sort();
                                foreach (string property in skuPropsList)
                                {
                                    product.SkuProps_Str += string.Format("{0};", property);
                                }
                                product.SkuProps_Str = product.SkuProps_Str.TrimEnd(';');
                            }
                            #endregion

                            product.ProductStatus      = 0;//
                            product.HighestNum         = 0;
                            product.IsUsingWarn        = false;
                            product.LowestNum          = 0;
                            product.PropsAlias         = string.Empty;
                            product.StockProductRemark = Constants.INIT_FROM_TOP;
                            product.WarningCount       = 0;
                            product.WholeSalePrice     = 0;
                            product.ProductTimeStamp   = new byte[] { };
                            #endregion
                            /*加入product列表*/
                            stockProductList.Add(product);

                            StockDetail stockDetail = new StockDetail();
                            #region 赋值StockDetail
                            stockDetail.DetailRemark   = string.Empty;
                            stockDetail.DetailType     = (int)DetailType.InitInput;
                            stockDetail.DurabilityDate = DateTime.Now;
                            /*仓库名称*/
                            stockDetail.HouseName       = viewItem.StockHouseName;
                            stockDetail.LayoutName      = viewItem.StockLayoutName;
                            stockDetail.StockHouseCode  = viewItem.StockHouseCode;
                            stockDetail.StockLayOutCode = viewItem.StockLayoutCode;

                            stockDetail.InOutCode         = stockIntOut.InOutCode;
                            stockDetail.Price             = float.Parse(product.SkuPrice.ToString());
                            stockDetail.ProductSkuOuterId = product.SkuOuterID;
                            stockDetail.Quantity          = product.SkuQuantity;
                            /*搜索字段*/
                            stockDetail.SearchText      = string.Empty;
                            stockDetail.StockDetailCode = System.Guid.NewGuid().ToString();
                            stockDetail.Tax             = string.Empty;
                            stockDetail.TotalFee        = float.Parse((product.SkuPrice * stockDetail.Quantity).ToString());
                            #endregion
                            /*加入stockDetail列表*/
                            stockDetailList.Add(stockDetail);

                            StockHouseProduct houseProduct = new StockHouseProduct();
                            #region 赋值StockHouseProduct
                            houseProduct.HouseCode        = viewItem.StockHouseCode;
                            houseProduct.HouseName        = viewItem.StockHouseName;
                            houseProduct.HouseProductCode = System.Guid.NewGuid().ToString();
                            houseProduct.LayoutCode       = viewItem.StockLayoutCode;
                            houseProduct.LayoutName       = viewItem.StockLayoutName;
                            houseProduct.Num        = product.SkuQuantity;
                            houseProduct.SkuOuterID = product.SkuOuterID;
                            #endregion
                            stockHouseProductList.Add(houseProduct);
                        }
                    }
                    //库存总量重新赋值
                    stock.TotalQuantity = stockTotalQuantity;
                    if (StockItemService.InitInput(stock, stockProductList, stockDetailList, stockHouseProductList) == ReturnType.Success)
                    {
                        StockInOutService.AddStockInOut(stockIntOut);
                        //成功一个,失败列表删除与当前商品outer_id相同的所有商品
                        inPutFailedViewItemList.RemoveAll(v => v.outer_id == viewItem.outer_id);
                        //查找所有outer_id下的商品iid并加入iidlist中
                        vItemlist.FindAll(v => v.outer_id == viewItem.outer_id).ForEach(a => itemOuterIdDic.Add(a.iid, a.outer_id));
                    }
                    //进度报告
                    if (workerInput != null)
                    {
                        int propgress = (int)((float)(j + 1) / ViewItemlist.Count * 100);
                        if (propgress > temp)
                        {
                            workerInput.ReportProgress(propgress, null);
                        }
                        temp = propgress;
                    }
                } //for
                #endregion
            }     // if (ViewItemlist.Count>0)

            /*更新入库成功商品的Outer_id及IsAssociate*/
            if (itemOuterIdDic.Count > 0)
            {
                ItemService.UpdateItemsOuterId(itemOuterIdDic, true);
            }
        }
Пример #18
0
        public ReturnType UpdateStockInOut(StockInOut stockinout)
        {
            try
            {
                using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
                {
                    /*StockInOut result = alading.StockInOut.Where(p => p.StockInOutID == stockinout.StockInOutID).FirstOrDefault();*/
                    StockInOut result = alading.StockInOut.Where(p => p.InOutCode == stockinout.InOutCode).FirstOrDefault();
                    if (result == null)
                    {
                        return(ReturnType.NotExisted);
                    }
                    #region   Using Attach() Function Update,Default USE;
                    alading.Attach(result);
                    alading.ApplyPropertyChanges("StockInOut", stockinout);
                    #endregion

                    #region    Using All Items Replace To Update ,Default UnUse

                    /*
                     *
                     *  result.InOutCode = stockinout.InOutCode;
                     *
                     *  result.InOutTime = stockinout.InOutTime;
                     *
                     *  result.OperatorCode = stockinout.OperatorCode;
                     *
                     *  result.OperatorName = stockinout.OperatorName;
                     *
                     *  result.InOutType = stockinout.InOutType;
                     *
                     *  result.TradeOrderCode = stockinout.TradeOrderCode;
                     *
                     *  result.DiscountFee = stockinout.DiscountFee;
                     *
                     *  result.DueFee = stockinout.DueFee;
                     *
                     *  result.InOutStatus = stockinout.InOutStatus;
                     *
                     *  result.IsSettled = stockinout.IsSettled;
                     *
                     */
                    #endregion
                    if (alading.SaveChanges() == 1)
                    {
                        return(ReturnType.Success);
                    }
                    else
                    {
                        return(ReturnType.OthersError);
                    }
                }
            }
            catch (SqlException sex)
            {
                return(ReturnType.ConnFailed);
            }
            catch (Exception ex)
            {
                return(ReturnType.OthersError);
            }
        }
Пример #19
0
        /// <summary>
        /// 标记为配货并出库
        /// </summary>
        /// <param name="houseProductList">数量即为出库数量</param>
        /// <param name="customtid">交易的唯一标识</param>
        /// <returns></returns>
        public ReturnType AllocationAndOutput(List <StockHouseProduct> houseProductList, string customtid)
        {
            System.Data.Common.DbTransaction tran = null;
            using (AladingEntities alading = new AladingEntities(AppSettings.GetConnectionString()))
            {
                try
                {
                    alading.Connection.Open();
                    tran = alading.Connection.BeginTransaction();
                    StockInOut stockInOut = new StockInOut();
                    stockInOut.InOutCode = System.Guid.NewGuid().ToString();//GUID??

                    foreach (StockHouseProduct shp in houseProductList)
                    {
                        StockProduct stockProduct = alading.StockProduct.FirstOrDefault(c => c.SkuOuterID == shp.SkuOuterID);
                        stockProduct.SkuQuantity -= shp.Num;

                        StockItem item = alading.StockItem.FirstOrDefault(c => c.OuterID == stockProduct.OuterID);
                        item.TotalQuantity -= shp.Num;

                        StockHouseProduct stockHouseProduct = alading.StockHouseProduct.FirstOrDefault(c => c.SkuOuterID == shp.SkuOuterID && c.HouseCode == shp.HouseCode && c.LayoutCode == shp.LayoutCode);
                        stockHouseProduct.Num -= shp.Num;

                        #region StockDetail

                        StockDetail stockDetail = new StockDetail();
                        stockDetail.DetailRemark      = "销售自动出库";
                        stockDetail.DetailType        = (int)DetailType.TaobaoSaleOut;
                        stockDetail.DurabilityDate    = DateTime.Now;
                        stockDetail.HouseName         = stockHouseProduct.HouseName;
                        stockDetail.InOutCode         = stockInOut.InOutCode;//////////
                        stockDetail.LayoutName        = stockHouseProduct.LayoutCode;
                        stockDetail.Price             = float.Parse(stockProduct.SkuPrice.ToString());
                        stockDetail.ProductSkuOuterId = stockProduct.SkuOuterID;
                        stockDetail.Quantity          = shp.Num;                          //出库数量
                        stockDetail.SearchText        = string.Empty;                     //搜索字段
                        stockDetail.StockDetailCode   = System.Guid.NewGuid().ToString(); //
                        stockDetail.StockHouseCode    = stockHouseProduct.HouseCode;
                        stockDetail.StockLayOutCode   = stockHouseProduct.LayoutCode;
                        stockDetail.Tax      = item.Tax;//税率
                        stockDetail.TotalFee = float.Parse((stockProduct.SkuPrice * shp.Num).ToString());
                        alading.AddToStockDetail(stockDetail);

                        #endregion

                        stockInOut.DiscountFee += stockDetail.TotalFee;//这么算可对?
                    }

                    Trade trade = alading.Trade.FirstOrDefault(c => c.CustomTid == customtid);
                    trade.LocalStatus = LocalTradeStatus.AssortedNotSent;

                    stockInOut.AmountTax      = 0.0f;                   //税率怎么算?
                    stockInOut.DueFee         = stockInOut.DiscountFee; //??
                    stockInOut.FreightCode    = string.Empty;
                    stockInOut.FreightCompany = string.Empty;
                    stockInOut.HouseCodeIn    = string.Empty;
                    stockInOut.HouseCodeOut   = string.Empty;
                    stockInOut.HouseNameIn    = string.Empty;
                    stockInOut.HouseNameOut   = string.Empty;
                    stockInOut.IncomeTime     = DateTime.Now;
                    stockInOut.InOutStatus    = (int)InOutStatus.AllSend;
                    stockInOut.InOutTime      = DateTime.Now;
                    stockInOut.InOutType      = (int)InOutType.SaleOut;
                    stockInOut.IsSettled      = true;
                    stockInOut.OperatorCode   = string.Empty; //操作人编码???
                    stockInOut.OperatorName   = string.Empty; //操作人姓名??
                    stockInOut.PayTerm        = 0;;
                    stockInOut.PayThisTime    = stockInOut.DueFee;
                    stockInOut.PayType        = (int)PayType.ALIPAY;
                    stockInOut.SearchText     = string.Empty;//搜索字段
                    stockInOut.TradeOrderCode = trade.CustomTid;
                    stockInOut.TransportCode  = string.Empty;
                    alading.AddToStockInOut(stockInOut);

                    alading.SaveChanges();
                    tran.Commit();
                    return(ReturnType.Success);
                }
                catch (System.Exception ex)
                {
                    if (tran != null)
                    {
                        tran.Rollback();
                    }
                    return(ReturnType.SaveFailed);
                }
                finally
                {
                    if (alading != null && alading.Connection.State != System.Data.ConnectionState.Closed)
                    {
                        alading.Connection.Close();
                    }
                }
            }
        }