public static ShoppingCart Factory(string storeId, string machineId, int companyId, string deviceSn, bool isNew = false)
        {
            string key = KeyFactory.MachineKeyFactory(companyId, storeId, machineId, deviceSn);

            if (shoppingCartCache.ContainsKey(key) && !isNew)
            {
#if (Local != true)
                shoppingCartCache.JsonSerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
                shoppingCartCache.JsonSerializerSettings.Converters.Add(new BarcodeConverter());
#endif
                var shoppingCart = shoppingCartCache.Get(key);
                return(shoppingCart);
            }
            else
            {
                shoppingCartCache.Remove(key);
#if (Local != true)
                OnlineCache onlineCache = new OnlineCache();
#endif
#if (Local)
                OnlineCache onlineCache = Salesclerk.onlineCache;
#endif

                var machineInfo = onlineCache.Get(key);
                if (machineInfo != null)
                {
                    var shoppingCart = new ShoppingCart();
                    shoppingCart.MachineInformation = machineInfo;
                    shoppingCart.NewAndResetOrderSN();
                    shoppingCartCache.Set(key, shoppingCart);
                    return(shoppingCart);
                }
                else
                {
                    goto TheSaleException;
                }
            }

TheSaleException:
            throw new SaleException("400", "未登录或者未授权,不允许操作!");
        }