ruby实现下订单后给客户发送手机序列号

2019-08-22  本文已影响0人  ibob2012

ruby实现下订单后给客户发送手机序列号

  两个类,订单类和序列号类.

  订单类

1class GroupOrder 2  include Mongoid::Document 3  include Mongoid::Timestamps 4 5  field :order_code, type: String 6  field :cellphone_num, type: String 7  field :quantity, type: Integer 8  field :state, type: String 910  has_many :verify_serial_nums1112end

订单的state 用状态机来管理.

  序列号类

1

2

3

4

5

6

7

8

9

10

11

12

class VerifySerialNum

  include Mongoid::Document

  include Mongoid::Timestamps

  field :code, type: String

  field :state, type: String

  belongs_to :group_order

  validates_uniqueness_of :code

end

需求是这样的: 在一个订单创建并且付款成功之后,需要产生序列号,订单下有几件商品就产生多少个序列号.在订单的序列号产生完毕之后,调用短信接口给顾客发送短信.

序列号产生的方法是用ruby中SecureRandom类产生的.

SecureRandom.uuid.gsub(/-/,"")[0..9]

限制10位验证码, validates_uniqueness_of :code 来唯一性验证.

短信内容要显示订单下的所有序列号,实现方法:

#{self.verify_serial_nums.map(&:code).join(",")}

订单类下支付成功后创建多个序列号代码:

1self.quantity.times do 2      begin 3        VerifySerialNum.create({ 4:code => SecureRandom.uuid.gsub(/-/,"")[0..9], 5:group_order => self 6          }) 7      rescue 8        redo 9      end10end

若产生的序列号不是惟一的,就redo 再次执行本次循环.

最后调用短信接口把短信内容和电话号码传过去就OK.

content = "兑换码为:'#{self.verify_serial_nums.map(&:code).join(",")}'"

Sender.send_code_channel(content, self.cellphone_num)

原文地址:https://www.cnblogs.com/wangyuyu/p/3569860.html

上一篇 下一篇

猜你喜欢

热点阅读