while loop for race condition in seed generate

This commit is contained in:
Yan
2017-10-19 17:09:34 +06:30
parent 2f3e6cb9aa
commit a00c2d5922

View File

@@ -2,35 +2,40 @@ class SeedGenerator < ApplicationRecord
# Generate ID for Tables # Generate ID for Tables
def self.generate_id(model, prefix) def self.generate_id(model, prefix)
seed = SeedGenerator.find_by_model(model) seed = SeedGenerator.find_by_model(model)
next_no = seed.next
new_receipt_no = 0 new_receipt_no = 0
puts "OOO"
puts next_no
if (seed.nil?) if (seed.nil?)
seed = SeedGenerator.new() seed = SeedGenerator.new()
seed.model = model seed.model = model
new_receipt_no = seed.next new_receipt_no = seed.next
seed.save seed.save
else else
next_current = self.update_seed(model, seed.next, seed.increase_by) cur_val, next_val = self.update_seed(model, next_no, seed.increase_by)
puts "OOO"
puts seed.next
if seed.next == next_current
next_current = next_current + 1
end
puts "MMM"
puts next_current
currentNo = next_current
# current_no = seed.next # if next_no == cur_val
# seed.next = seed.next + seed.increase_by # puts "SSS"
# seed.current = current_no # puts next_val
# seed.save # cur_val2, next_val2 = self.update_seed(model, next_val, seed.increase_by)
end # padding_len = 15 - prefix.length
padding_len = 15 - prefix.length # saleOrderId = prefix +"-"+ cur_val2.to_s.to_s.rjust((14-prefix.length)+1,'0')
saleOrderId = prefix +"-"+ currentNo.to_s.to_s.rjust((14-prefix.length)+1,'0') # return saleOrderId
return saleOrderId
while next_no == cur_val
padding_len = 15 - prefix.length
saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust((14-prefix.length)+1,'0')
return saleOrderId
puts "LLL"
puts next_val
next_no = next_val
cur_val, next_val = self.update_seed(model, next_val, seed.increase_by)
padding_len = 15 - prefix.length
saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust((14-prefix.length)+1,'0')
return saleOrderId
end
# end
end
end end
# Generate Receipt No # Generate Receipt No
@@ -97,20 +102,34 @@ class SeedGenerator < ApplicationRecord
return seed_val return seed_val
end end
def self.current_no_present(next_val, cur_val)
cur_val2, next_val2 = self.update_seed(model, next_val, seed.increase_by)
padding_len = 15 - prefix.length
saleOrderId = prefix +"-"+ cur_val2.to_s.to_s.rjust((14-prefix.length)+1,'0')
return saleOrderId
if next_val == cur_val2
current_no_present(next_val2, cur_val2)
end
end
def self.update_seed(model, current, inc) def self.update_seed(model, current, inc)
cur_val = 0
next_val = 0 next_val = 0
nex = current + inc nex = current + inc
update_sql = "update seed_generators set current= #{current}, next= #{nex} where model='#{model}';"; update_sql = "update seed_generators set current= #{current}, next= #{nex} where model='#{model}';";
select_sql = "select * from seed_generators where model='#{model}';" select_sql = "select * from seed_generators where model='#{model}';"
update_result = ActiveRecord::Base.connection.execute(update_sql); update_result = ActiveRecord::Base.connection.execute(update_sql);
Rails.logger.debug "SeedGenerator -> " + update_result.to_s Rails.logger.debug "SeedGenerator -> " + update_result.to_s
select_result = ActiveRecord::Base.connection.execute(select_sql); select_result = ActiveRecord::Base.connection.execute(select_sql);
select_result.each do |row| select_result.each do |row|
p row[3] p row[3]
next_val = row[3] cur_val = row [3]
next_val = row[4]
end end
return next_val return cur_val, next_val
end end
end end