V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kikione
V2EX  ›  程序员

如果我想配置某个产品库存为无限的话,值设置为 -1 好吗?

  •  
  •   kikione · 34 天前 · 5651 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果我想配置某个产品库存为无限的话,值设置为 -1 好吗? 我看我们生产环境这样做的,但是我觉得有问题。

    48 条回复    2021-10-26 08:46:00 +08:00
    hefish
        1
    hefish   34 天前
    这得看具体逻辑吧。
    kikione
        2
    kikione   34 天前
    @hefish 如果超发了,库存变为-1 ,这不得出大问题
    hand515
        3
    hand515   34 天前
    2^64 -1
    wudaye
        4
    wudaye   34 天前 via Android
    有点作死的感觉
    xgfan
        5
    xgfan   34 天前 via iPhone
    0 超卖就爽翻天了。
    flynaj
        6
    flynaj   34 天前 via Android
    普通商品 65535 就够。
    infun
        7
    infun   34 天前   ❤️ 2
    分库存类型:有限库存、无限库存,无限库存不做扣减退还操作
    emeab
        8
    emeab   34 天前
    只能说设置一个大一点的库存比较好. 具体逻辑也不用改..
    JQSM
        9
    JQSM   34 天前 via Android
    whmcs 里面负数就是没货了,可以参考淘宝的商家,设一个很大的数就行了。
    0Vincent0Zhang0
        10
    0Vincent0Zhang0   34 天前 via Android
    没事的,记得退货的时候不要加回去就行了,不然就没得卖了。
    Kinnice
        11
    Kinnice   34 天前 via Android
    确定你不会超卖,就可以
    0Vincent0Zhang0
        12
    0Vincent0Zhang0   34 天前 via Android
    最大的风险可能会是那些正常库存的商品,在某个 bug 触发的情况下被扣成了-1 ,这个时候就爽歪歪了😂
    oo1
        13
    oo1   34 天前 via iPhone   ❤️ 11
    最好是新增一个字段。因为一个字段代表什么含义就应该一直做一样的用处。库存就是个数字。是否无限就是一个 bool 。字段巧用,当时是省事了,以后迭代,交接的维护成本极高。
    ferock
        14
    ferock   34 天前 via iPhone   ❤️ 2
    给个超级大数字会怀孕?
    securityCoding
        15
    securityCoding   34 天前
    这写-1 的人代码抽象能力估计要告别编码了
    villivateur
        16
    villivateur   34 天前 via Android
    实际生活中不可能出现无限库存,所以不需要这个选项
    Reficul
        17
    Reficul   34 天前
    @villivateur 手机充值表示,还是有可能的
    jousca
        18
    jousca   34 天前
    给个 1 亿以上的数字不就行了。就和加油站的员工卡一样。起步都是几千万的金额在上面。
    lower
        19
    lower   34 天前
    null
    dangyuluo
        20
    dangyuluo   34 天前
    首先你不应该用 signed 的数值来存储,然后无限的话选择 UINT32_MAX-1 其实就足够了。
    dangyuluo
        21
    dangyuluo   34 天前
    @securityCoding 不能这么说,楼主应该是有见过例子的。其实 Linux kernel 里很多函数发生错误的时候返回值都是-1 。
    clf
        22
    clf   34 天前 via iPhone
    加个字段区分标记无限库存不行吗。
    ryd994
        23
    ryd994   34 天前 via Android
    @dangyuluo 用 unsigned int 然后 underflow 了那不就成了 uinx max 了吗。这和楼主说的-1 有什么区别
    xuanbg
        24
    xuanbg   34 天前
    给 2 亿不行吗?
    ratel
        25
    ratel   34 天前 via iPhone
    设置 99999999 最高库存比较好,现实场景中无限库存应该不存在的,一般建议补库存。
    nvkou
        26
    nvkou   34 天前 via iPhone
    应该横向派生不同的类,而不是加重内部逻辑
    shyrock
        27
    shyrock   34 天前
    你这不是抽象而是篡改业务逻辑。
    库存实际上就不可能无限,如果是实体货物,有进货才有库存,成本和仓储空间决定了库存上限;如果是虚拟物品,也有版权费用、人工成本等也会限制库存上限。

    你根据实际情况定一个合理的库存,就不会留下奇奇怪怪的逻辑漏洞。
    markgor
        28
    markgor   34 天前   ❤️ 5
    我之前也试过,后来马上改了;
    1 、部分产品允许超售,此时就会出现-1 的情况,无法分辨是超售了还是无限;
    2 、设置为 NULL ,业务代码判断的时候需要单独区分判断,可以这样做,但对后续业务代码不友善;
    3 、增加栏位,设定为是否不限库存;

    最终我们选择的是第三点;
    因为产品允许 超售|库存|不限;
    包括后来增加的功能,部分产品需要二次询价,比方 A 给我们一个基本价,库存 10 ,超出库存的要二次确认,我们有单就飞过去,超出库存部分是否能做由他们决定,这种的话业务上会设置为库存产品|允许超售;
    1 、因为业务需要统计还剩多少没卖,所以不能设定为不限库存产品;
    2 、由于超出时候不是不能卖,只是流程上需要供应二次确认,所以只能设定为 可超售。

    所以建议你还是加多个栏位进行判断。
    BTW:
    我们有些直连对接的分销,业务关系,我们不会反回这种产品究竟是 可超 /不可超 /库存数量这些的,一般情况下可超或库存大于 999 的直接返回 999 ;
    feitxue
        29
    feitxue   34 天前
    @Reficul 几个月前,百度 app 里面的手机充值,不知什么原因的 bug,冲多少,就送多少话费,一群羊毛党蜂拥而至,不知道被薅了多少羊毛.我还特意冲了 100 去试了一下.
    lizuoqiang
        30
    lizuoqiang   34 天前
    咋滴 一个无符号 int 43 亿不够你库存了?
    nicebird
        31
    nicebird   34 天前
    最好设置一个产品认为用户不会超过的上限,这样能兜底。
    H97794
        32
    H97794   34 天前
    shopify
    缺货后继续销售
    HUNYXV
        33
    HUNYXV   34 天前
    math.MaxUint64 这个数够用 N 年了
    ospider
        34
    ospider   34 天前   ❤️ 1
    参考下业界成熟经验吧,你看王者荣耀 30 级的时候,经验上限是 99999999 (几个 9 忘了……
    yuankui
        35
    yuankui   34 天前
    加个类型吧,一个字段显然不够,不够优雅
    libook
        36
    libook   34 天前
    代码最好完全按照业务逻辑来写,希望合并代码逻辑的话也最好看看是不是业务逻辑上可以合并,有时候不合并比合并的开发、维护、测试成本更低,同时风险也低,还可以不同模块单独分配计算资源,以及单独上线下线。

    比如业务上有有限库存和无限库存两种概念,你就写两套,这样故障互相隔离,一部分出 Bug 不会影响另一部分。

    等业务和代码比较成熟了,再考虑是否程序规模是否是主要矛盾,是否可以合并一部分来减小规模。
    ytmsdy
        37
    ytmsdy   34 天前
    数据库里统计库存的时候,一般都是直接 sum 一下。想想结果。
    生产环境最好不要有负数存在,冷不丁什么时候会拿来运算一下。
    pengtdyd
        38
    pengtdyd   34 天前
    看大家都是从代码的角度分析,我想从业务本身来说:库存顾名思义就是存放在仓库货物的数量,既然是货物的数量就不应该是负数,货物不应该出现凭空消失的状态。
    ytll21
        39
    ytll21   34 天前
    @pengtdyd 不能这么绝对,实际业务会有先卖出,后补货的情况。也就是卖多少,补多少。
    zjuster
        40
    zjuster   34 天前
    我们的业务兜底逻辑是非正数库存,都视作无库存;

    一般是 N 个 9 作为无限库存,或者字段控制(管理库存 /不管理库存,不管理库存=无限库存),我个人觉得字段控制是否管理库存是最合适的,不管理库存的货,代码就可以每天给逻辑库存加一个极大值。

    @pengtdyd 销售不看仓库的实物,代码里都是虚拟(销售)库存逻辑,你说的 wms 的实物库存逻辑,两边业务不一样,思路不一样。
    就算是 WMS 的实物库存,因为人为操作不规范、繁琐的现象,业务上也存在出现-1 可能性。如果严控的话,可能会影响操作效率。尺度如何控制,要看业务经验了。WMS 毕竟是同时和人和货打交道,人不会完全按照设计操作。
    dangyuluo
        41
    dangyuluo   34 天前
    @ryd994 我只是单纯从数据设计角度来理解,使用 signed 来存储“数量”这个属性不太合理。如何不 underflow 就是另一个问题了,要考虑如何支持并发,该加锁的地方加锁。
    Felldeadbird
        42
    Felldeadbird   34 天前
    不能存储库存的字段设定特定值。这样会出现很奇怪的业务数据异常问题。

    我的做法是:1.加字段标记特殊产品。2. 反正都无限了,库存标记比较大的数值

    两种方式都会影响财务模块。所以还需要代码上标记筛选。
    InternetExplorer
        43
    InternetExplorer   33 天前
    不合适,有些时候业务会允许负库存的
    meiyoumingzi6
        44
    meiyoumingzi6   33 天前
    不合适,
    0.容易触发 bug,
    1.不好计数,虽然说是无限量,但是数量还得心里有数
    ultimate
        45
    ultimate   33 天前
    假如接手的不知道-1 表示无限库存,那就完了。可以设置成很大的数,不够再加嘛。
    itechnology
        46
    itechnology   33 天前
    建议设置成数字类型变量的最大值这种
    chrosing
        47
    chrosing   33 天前
    加个标识吧 你没法控制并发下 库存会不会变为-1 如果变了-1 那就是无限了
    hervey424840
        48
    hervey424840   33 天前
    @ratel 手机话费就是无限库存的
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2145 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 06:20 · PVG 14:20 · LAX 22:20 · JFK 01:20
    ♥ Do have faith in what you're doing.