Moved to ticket counter log in database.
This commit is contained in:
parent
09864f330e
commit
4d72dce327
6 changed files with 60 additions and 73 deletions
|
@ -386,7 +386,7 @@ class Ticket < ApplicationModel
|
||||||
private
|
private
|
||||||
def number_generate
|
def number_generate
|
||||||
Ticket.new.number_adapter = Setting.get('ticket_number')
|
Ticket.new.number_adapter = Setting.get('ticket_number')
|
||||||
(1..15_000).each do |i|
|
(1..25_000).each do |i|
|
||||||
number = @@number_adapter.number_generate_item()
|
number = @@number_adapter.number_generate_item()
|
||||||
ticket = Ticket.where( :number => number ).first
|
ticket = Ticket.where( :number => number ).first
|
||||||
if ticket != nil
|
if ticket != nil
|
||||||
|
|
2
app/models/ticket/counter.rb
Normal file
2
app/models/ticket/counter.rb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
class Ticket::Counter < ApplicationModel
|
||||||
|
end
|
|
@ -2,44 +2,37 @@ module Ticket::Number::Date
|
||||||
extend self
|
extend self
|
||||||
|
|
||||||
def number_generate_item
|
def number_generate_item
|
||||||
|
|
||||||
# get config
|
# get config
|
||||||
config = Setting.get('ticket_number_date')
|
config = Setting.get('ticket_number_date')
|
||||||
|
|
||||||
t = Time.now
|
t = Time.now
|
||||||
date = t.strftime("%Y-%m-%d")
|
date = t.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
# read counter
|
# read counter
|
||||||
file_name = Rails.root.to_s + '/' + config[:file]
|
counter_increment = nil
|
||||||
contents = ""
|
Ticket::Counter.transaction do
|
||||||
begin
|
counter = Ticket::Counter.where( :generator => 'Date' ).lock(true).first
|
||||||
file = File.open(file_name)
|
if !counter
|
||||||
file.each {|line|
|
counter = Ticket::Counter.new( :generator => 'Date', :content => '0' )
|
||||||
contents << line
|
end
|
||||||
}
|
|
||||||
file.close
|
|
||||||
rescue
|
|
||||||
contents = '0'
|
|
||||||
end
|
|
||||||
|
|
||||||
# increase counter
|
|
||||||
counter, date_file = contents.to_s.split(';')
|
|
||||||
|
|
||||||
if date_file == date
|
# increase counter
|
||||||
counter = counter.to_i + 1
|
counter_increment, date_file = counter.content.to_s.split(';')
|
||||||
else
|
if date_file == date
|
||||||
counter = 1
|
counter_increment = counter_increment.to_i + 1
|
||||||
end
|
else
|
||||||
contents = counter.to_s + ';' + date
|
counter_increment = 1
|
||||||
|
end
|
||||||
|
|
||||||
# write counter
|
# store new counter value
|
||||||
file = File.open(file_name, 'w')
|
counter.content = counter_increment.to_s + ';' + date
|
||||||
file.write(contents)
|
counter.save
|
||||||
file.close
|
end
|
||||||
|
|
||||||
system_id = Setting.get('system_id') || ''
|
system_id = Setting.get('system_id') || ''
|
||||||
number = t.strftime("%Y%m%d") + system_id.to_s + sprintf( "%04d", counter)
|
number = t.strftime("%Y%m%d") + system_id.to_s + sprintf( "%04d", counter_increment)
|
||||||
|
|
||||||
# calculate a checksum
|
# calculate a checksum
|
||||||
# The algorithm to calculate the checksum is derived from the one
|
# The algorithm to calculate the checksum is derived from the one
|
||||||
# Deutsche Bundesbahn (german railway company) uses for calculation
|
# Deutsche Bundesbahn (german railway company) uses for calculation
|
||||||
|
@ -55,9 +48,9 @@ module Ticket::Number::Date
|
||||||
(1..number.length).each do |i|
|
(1..number.length).each do |i|
|
||||||
digit = number.to_s[i, 1]
|
digit = number.to_s[i, 1]
|
||||||
chksum = chksum + ( mult * digit.to_i )
|
chksum = chksum + ( mult * digit.to_i )
|
||||||
mult += 1;
|
mult += 1
|
||||||
if mult == 3
|
if mult == 3
|
||||||
mult = 1;
|
mult = 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
chksum %= 10
|
chksum %= 10
|
||||||
|
|
|
@ -8,40 +8,34 @@ module Ticket::Number::Increment
|
||||||
|
|
||||||
# read counter
|
# read counter
|
||||||
min_digs = config[:min_size] || 4;
|
min_digs = config[:min_size] || 4;
|
||||||
file_name = Rails.root.to_s + '/' + config[:file]
|
counter_increment = nil
|
||||||
contents = ""
|
Ticket::Counter.transaction do
|
||||||
begin
|
counter = Ticket::Counter.where( :generator => 'Increment' ).lock(true).first
|
||||||
file = File.open( file_name )
|
if !counter
|
||||||
file.each {|line|
|
counter = Ticket::Counter.new( :generator => 'Increment', :content => '0' )
|
||||||
contents << line
|
end
|
||||||
}
|
counter_increment = counter.content.to_i
|
||||||
file.close
|
|
||||||
rescue
|
# increase counter
|
||||||
contents = '0'
|
counter_increment += 1
|
||||||
|
|
||||||
|
# store new counter value
|
||||||
|
counter.content = counter_increment.to_s
|
||||||
|
counter.save
|
||||||
end
|
end
|
||||||
|
|
||||||
# increase counter
|
|
||||||
counter, date_file = contents.to_s.split(';')
|
|
||||||
counter = counter.to_i + 1
|
|
||||||
contents = counter.to_s + ';'
|
|
||||||
|
|
||||||
# write counter
|
|
||||||
file = File.open( file_name, 'w' )
|
|
||||||
file.write(contents)
|
|
||||||
file.close
|
|
||||||
|
|
||||||
# fill up number counter
|
# fill up number counter
|
||||||
if config[:checksum]
|
if config[:checksum]
|
||||||
min_digs = min_digs.to_i - 1
|
min_digs = min_digs.to_i - 1
|
||||||
end
|
end
|
||||||
fillup = Setting.get('system_id') || '1'
|
fillup = Setting.get('system_id') || '1'
|
||||||
( 1..100 ).each do |i|
|
( 1..100 ).each do |i|
|
||||||
if ( fillup.length.to_i + counter.to_s.length.to_i ) < min_digs.to_i
|
if ( fillup.length.to_i + counter_increment.to_s.length.to_i ) < min_digs.to_i
|
||||||
fillup = fillup + '0'
|
fillup = fillup + '0'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
number = fillup.to_s + counter.to_s
|
number = fillup.to_s + counter_increment.to_s
|
||||||
|
|
||||||
# calculate a checksum
|
# calculate a checksum
|
||||||
# The algorithm to calculate the checksum is derived from the one
|
# The algorithm to calculate the checksum is derived from the one
|
||||||
# Deutsche Bundesbahn (german railway company) uses for calculation
|
# Deutsche Bundesbahn (german railway company) uses for calculation
|
||||||
|
@ -57,9 +51,9 @@ module Ticket::Number::Increment
|
||||||
(1..number.length).each do |i|
|
(1..number.length).each do |i|
|
||||||
digit = number.to_s[i, 1]
|
digit = number.to_s[i, 1]
|
||||||
chksum = chksum + ( mult * digit.to_i )
|
chksum = chksum + ( mult * digit.to_i )
|
||||||
mult += 1;
|
mult += 1
|
||||||
if mult == 3
|
if mult == 3
|
||||||
mult = 1;
|
mult = 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
chksum %= 10
|
chksum %= 10
|
||||||
|
@ -79,11 +73,11 @@ module Ticket::Number::Increment
|
||||||
ticket_hook = Setting.get('ticket_hook')
|
ticket_hook = Setting.get('ticket_hook')
|
||||||
ticket_hook_divider = Setting.get('ticket_hook_divider') || ''
|
ticket_hook_divider = Setting.get('ticket_hook_divider') || ''
|
||||||
ticket = nil
|
ticket = nil
|
||||||
|
|
||||||
# probe format
|
# probe format
|
||||||
if string =~ /#{ticket_hook}#{ticket_hook_divider}(#{system_id}\d{2,50})/i then
|
if string =~ /#{ticket_hook}#{ticket_hook_divider}(#{system_id}\d{2,48})/i then
|
||||||
ticket = Ticket.where( :number => $1 ).first
|
ticket = Ticket.where( :number => $1 ).first
|
||||||
elsif string =~ /#{ticket_hook}\s{0,2}(#{system_id}\d{2,50})/i then
|
elsif string =~ /#{ticket_hook}\s{0,2}(#{system_id}\d{2,48})/i then
|
||||||
ticket = Ticket.where( :number => $1 ).first
|
ticket = Ticket.where( :number => $1 ).first
|
||||||
end
|
end
|
||||||
return ticket
|
return ticket
|
||||||
|
|
12
db/migrate/20121127193555_ticket_counter.rb
Normal file
12
db/migrate/20121127193555_ticket_counter.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
class TicketCounter < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
create_table :ticket_counters do |t|
|
||||||
|
t.column :content, :string, :limit => 100, :null => false
|
||||||
|
t.column :generator, :string, :limit => 100, :null => false
|
||||||
|
end
|
||||||
|
add_index :ticket_counters, [:generator], :unique => true
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
end
|
||||||
|
end
|
14
db/seeds.rb
14
db/seeds.rb
|
@ -748,18 +748,11 @@ Setting.create(
|
||||||
20 => 20,
|
20 => 20,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
:display => 'Logfile',
|
|
||||||
:null => false,
|
|
||||||
:name => 'file',
|
|
||||||
:tag => 'input',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
:state => {
|
:state => {
|
||||||
:value => {
|
:value => {
|
||||||
:checksum => false,
|
:checksum => false,
|
||||||
:file => 'tmp/counter.log',
|
|
||||||
:min_size => 5,
|
:min_size => 5,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -782,18 +775,11 @@ Setting.create(
|
||||||
false => 'no',
|
false => 'no',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
:display => 'Logfile',
|
|
||||||
:null => false,
|
|
||||||
:name => 'file',
|
|
||||||
:tag => 'input',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
:state => {
|
:state => {
|
||||||
:value => {
|
:value => {
|
||||||
:checksum => false,
|
:checksum => false,
|
||||||
:file => 'tmp/counter.log',
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
:frontend => false
|
:frontend => false
|
||||||
|
|
Loading…
Reference in a new issue