Example #1
0
        private void layoutViewDbRepeat_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            ViewShopItemInherit vsii = layoutViewDbRepeat.GetRow(e.FocusedRowHandle) as ViewShopItemInherit;

            if (vsii != null && vsii.outer_id != null)
            {
                LoadStockItem(vsii.outer_id);
            }
        }
Example #2
0
 private void gridViewNotAssociate_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
 {
     if (e.Column == gridColumnOuterId)
     {
         if (e.Value == null || e.Value.ToString().Trim() == string.Empty)
         {
             return;
         }
         gridViewNotAssociate.BeginUpdate();
         ViewShopItemInherit vsii = gridViewNotAssociate.GetFocusedRow() as ViewShopItemInherit;
         vsii.outer_id = e.Value.ToString();
         gridViewNotAssociate.EndUpdate();
     }
 }
Example #3
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);
            }
        }