如何实现库存每少1000就发送一次短信,本来是打算定时的但是可能在定时时间超过1000第一次的就没有统计下来,请问该如何实现
你问题的关键无非就是让数据库主动发短信,而不是轮询。看你用什么数据库,sql server有集成服务(ssis),mysql没有,但是支持调用外部程序。
参考:https://www.cnblogs.com/yfceshi/p/7259020.html
你在数据库里加上表触发器(trigger),当你修改库存记录的时候会触发,在里面判断是否<1000,如果是,调用外部程序,而你的外部程序要么自己发短信,要么再调用你的java网站,都可以。
用mq呀,订阅一下减库存消息,每次消息来检查下已扣库存是否到1k整数倍就行
再建立一张表,表的每行都记录1000的整数倍,例如 1000 2000 3000,4000... 每次库存减少 就把库存的值写入到对应的行中,
例如库存之前是3000到4000,现在变成2000到3000,然后就触发发短信
你这个还涉及库存数据会增加的吧,所以监控的不是库存值,应当是变化值,确切地的应该是减少值,所以应当是减库存操作成功后,记录减掉的值,然后累计计算。
具体点,可以这样,减库存成功时,把减掉的数量发到消息队列,消费者监听、累加、判断,超过1000后发短信,并把累加值减去1000;(因为可能一次性减多个,总的变化值不一定刚好是1000,细节问题就看怎么处理了,这里给的建议是严格按照1000个处理的)
一、数据库里创建一个表 tb_test
二、包含4个字段[test_id test_time test_change test_number] (自动编号主键,创建时间,减少的库存累加结果 mod 1000,减少的库存)
三、取出最后一行的test_change(也可以按时间从大到小排序,取出该记录的test_change)到程序中
四、test_change + 新减少的库存test_number ,如果大于等于 1000, 发送短信
五、test_change = test_change mod 1000
六、将[0,系统时间,test_change,test_number]插入到tb_test中