Commit 766a6e6c authored by panos's avatar panos Committed by Georgios Dagkakis

Insert the scripts for the implementation of Database approachin Jobshop example

parent 7a974453
'''
Created on 27 Jan 2015
@author: Panos
'''
import ImportDatabase
from datetime import datetime
#connect to the database providing the following data and generate six different cursor variables
cnxn=ImportDatabase.ConnectionData(seekName='ServerData', implicitExt='txt', number_of_cursors=6)
cursor=cnxn.getCursors()
#SQL query to extract data from orders table
a=cursor[0].execute("""
select Order_id, ProjectName, Customer, Order_date, Due_date, ProjectManager, Status
from orders
""")
#create a dictionary called data and put inside two lists (orders and stations) and a dictionary called WIP
data={}
data['orders']=[]
data['WIP']={}
data['stations']=[]
order={}
#Another SQL query that extracts data from the machines table
b=cursor[1].execute("""
select MachineName, description
from machines
""")
# for every machine of the machines table
for j in range(b.rowcount):
#get the next line
ind3=b.fetchone()
#and insert in one of the above initiated lists
data['stations'].append(ind3.MachineName)
# for every order of the orders table
for j in range(a.rowcount):
#get the next line
ind0=a.fetchone()
#define a variable called status and holds the status of the order (extracted from orders table)
status = ind0.Status
#check if status is 'accepted' or 'in progress' and move in
if status == 'accepted' or status == 'in progress':
#insert the following extracted data from the database in order disctionary
order['orderName']=ind0.ProjectName
order['orderID']=ind0.Order_id
order['manager']=ind0.ProjectManager
order['orderDate']=ind0.Order_date
order['dueDate']=ind0.Due_date
order['componentsList']=[]
#SQL query to extract data from sequence table where order data is given
c=cursor[2].execute("""
select Order_id, WP_id, PartCode, PartName, Operation_Name, ProcessingTime, PersonnelCode, Quantity, step
from sequence where Order_id=?
""", ind0.Order_id)
appended=[] # list that holds the already added components
# for all the lines of c (every component)
for i in range(c.rowcount):
# create a comopnent dict
component={}
# and get the next row
ind1=c.fetchone()
name=ind1.PartName
component['componentName']=name
code=ind1.PartCode
WP=ind1.WP_id
component['componentID']=code
component['route']=[]
#SQL query that extracts data from sequence table where PartCode is given
d=cursor[3].execute("""
select PartCode, PartName, WP_id, Operation_Name, ProcessingTime, PersonnelCode, Quantity, step
from sequence
where PartCode=?
""", code)
#SQL query that joins the sequence and prerequisites tables where WP_id is common and PartCode is given
f=cursor[4].execute("""
select sequence.WP_id, sequence.PartCode, prerequisites.PartsNeeded
from sequence, prerequisites
where sequence.WP_id=prerequisites.WP_id
AND sequence.PartCode=?
""", code)
#loop every line in the sequence table
for line in range(d.rowcount):
#create a new dictionary to hold the sequence of this order
step={}
ind2=d.fetchone()
step['technology']=ind2.Operation_Name
step['sequence']=ind2.step
step['operator']=ind2.PersonnelCode
step['task_id']=ind2.WP_id
step['quantity']=ind2.Quantity
ind3=f.fetchone()
partsNeeded = ind3.PartsNeeded.split(';')
step['partsneeded']=partsNeeded
step['processingTime']={}
step['processingTime']['distribution']='Fixed'
step['processingTime']['mean']=ind2.ProcessingTime
component['route'].append(step)
#The following checks if the component ids have been inserted to appended
if not component['componentID'] in appended:
order['componentsList'].append(component)
appended.append(component['componentID'])
#SQL query to extract WIP data from the prod_status table when sequence and prod_status are joined together and PartCode is given
e= cursor[5].execute("""
select prod_status.WP_id, sequence.WP_id, sequence.ProcessingTime, sequence.step, MachineName, TIMEIN, TIMEOUT, prod_status.PersonnelCode
from prod_status
join sequence on sequence.WP_id = prod_status.WP_id
where sequence.PartCode=?
""", code)
#loop in the lines of the prod_status table
for x in range(e.rowcount):
ind3=e.fetchone()
for t in appended:
if ind3.TIMEOUT:
remTime= 0
else:
#calculate the time difference between the TIMEIN and the moment the user wants to run the simulation (e.g. datetime.now())
timeDelta= datetime.now() - ind3.TIMEIN
timeDiff= timeDelta.total_seconds() / 3600
#calculate the remaining time the part needs to be processed
remTime= round((ind3.ProcessingTime - timeDiff),2)
data['WIP'][code]={}
data['WIP'][code]['station']=ind3.MachineName
data['WIP'][code]['operator']=ind3.PersonnelCode
data['WIP'][code]['task_id']=ind3.WP_id
data['WIP'][code]['sequence']=ind3.step
data['WIP'][code]['remainingProcessingTime']=remTime
#in case the status is 'finished' continue to the next order
elif status == 'finished':
continue
data['orders'].append(order.copy())
print data
\ No newline at end of file
# ===========================================================================
# Copyright 2013 University of Limerick
#
# This file is part of DREAM.
#
# DREAM is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DREAM is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with DREAM. If not, see <http://www.gnu.org/licenses/>.
# ===========================================================================
'''
Created on 23 March 2015
@author: Panos
'''
import xlrd
import datetime
import os
import ImportDatabase
#Static variables that hold the column's number in Workplan (Excel document - template)
WPColumn=14
OrderColumn=0
ProjectColumn=2
PartsNeeded=13
#Method created to extract the required data from the spreadsheet
def dataExtraction(File):
# loop through all the sheets
for sheet in xls_workbook.sheets():
if sheet.name=='Workplan':
orderId=sheet.cell(4,0).value
customer=sheet.cell(4,1).value
projectName=sheet.cell(4,2).value
orderDate=datetime.datetime.utcfromtimestamp((sheet.cell(4,3).value - 25569) * 86400.0)
dueDate=datetime.datetime.utcfromtimestamp((sheet.cell(4,4).value - 25569) * 86400.0)
projectManager=sheet.cell(4,5).value
#create a dictionary called workplan with key the order id
workplan[orderId]={}
workplan[orderId][projectName]=[]
workplan[orderId][projectName].insert(0, customer)
workplan[orderId][projectName].insert(1, orderDate)
workplan[orderId][projectName].insert(2, dueDate)
workplan[orderId][projectName].insert(4, projectManager)
#loop in the rows of the spreadsheet
for i in range(4,sheet.nrows):
if sheet.cell(i,14).value:
wpId=sheet.cell(i,14).value
partId=sheet.cell(i,6).value
partType=sheet.cell(i,7).value
operation=sheet.cell(i,8).value
step=sheet.cell(i,9).value
personnel=sheet.cell(i,10).value
quantity=sheet.cell(i,11).value
procTime=sheet.cell(i,12).value
partsNeeded=sheet.cell(i,13).value
workplan[orderId][wpId]=[]
workplan[orderId][wpId].insert(0, partId)
workplan[orderId][wpId].insert(1, partType)
workplan[orderId][wpId].insert(2, operation)
workplan[orderId][wpId].insert(3, step)
workplan[orderId][wpId].insert(4, personnel)
workplan[orderId][wpId].insert(5, quantity)
workplan[orderId][wpId].insert(6, procTime)
workplan[orderId][wpId].insert(7, partsNeeded)
#pop-up message that inform the user that he should insert the directory where he stores the workplans
folder_path=raw_input('insert the path to the folder containing the required files:')
print folder_path
os.chdir(folder_path)
#create a list that hold the already inserted orders
alreadyInserted=[]
#use of the KE tool object to connect to database
cnxn=ImportDatabase.ConnectionData(seekName='ServerData', implicitExt='txt', number_of_cursors=6)
cursor=cnxn.getCursors()
#loop that searches the files in the given directory
for fileName in os.listdir("."):
print fileName
#using the xlrd python library, we open the documents
xls_workbook = xlrd.open_workbook(fileName)
#define Main the first sheet - sheet with the name 'Workplan'
Main= xls_workbook.sheet_by_name('Workplan')
workplan={}
#SQL query to extract data from orders table
check_order= cursor[0].execute("""
select Order_id, ProjectName, Customer, Order_date, Due_date, ProjectManager, Status
from orders
""")
#check if rowcount is 0, if it is move on - otherwise go to the else part
if check_order.rowcount==0:
#call the method giving as argument the document
dataExtraction(fileName)
for i in range(4,Main.nrows):
orderId=Main.cell(4,OrderColumn).value
projectName=Main.cell(4,ProjectColumn).value
#Another SQL query to input data this time in the database in orders table
add_order= ("INSERT INTO orders(`id`, `Order_id`, `ProjectName`, `Customer`, `Order_date`, `Due_date`, `ProjectManager`, `Status`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
cursor[0].execute("SELECT @@IDENTITY AS ID")
row = cursor[0].fetchone()
order_ref = row.ID
status= 'accepted'
#the following data inserted to the the database based on the structure of the query above
cursor[0].execute(add_order, (order_ref, orderId, projectName, workplan[orderId][projectName][0], workplan[orderId][projectName][1], workplan[orderId][projectName][2], workplan[orderId][projectName][3], status))
cursor[0].commit()
#SQL query to input data in the database in sequence table
add_sequence= ("INSERT INTO sequence(`seq_id`, `WP_id`, `Order_id`, `PartCode`, `PartName`, `Operation_Name`, `ProcessingTime`, `step`, `PersonnelCode`, `Quantity`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ")
cursor[1].execute("SELECT MAX(seq_id)+1 AS ID from sequence")
seq_ref = row.ID
#loop used to insert the required data based on the structure of the above query
for i in range(4,Main.nrows):
wpId=Main.cell(i,WPColumn).value
cursor[1].execute(add_sequence, (seq_ref, wpId, orderId, workplan[orderId][wpId][0], workplan[orderId][wpId][1], workplan[orderId][wpId][2], workplan[orderId][wpId][6], workplan[orderId][wpId][3], workplan[orderId][wpId][4], workplan[orderId][wpId][5]))
cursor[1].commit()
seq_ref+=1
add_prerequisites=("INSERT INTO prerequisites(`pre_id`, `Order_id`, `WP_id`, `PartCode`, `PartsNeeded`) VALUES (?, ?, ?, ?, ?) ")
cursor[2].execute("SELECT MAX(pre_id)+1 AS ID from prerequisites")
pre_ref = row.ID
for i in range(4,Main.nrows):
wpId=Main.cell(i,WPColumn).value
cursor[2].execute(add_prerequisites, (pre_ref, orderId, wpId, workplan[orderId][wpId][0], workplan[orderId][wpId][7]))
cursor[2].commit()
else:
#follows the logic of the if part
check_order= cursor[3].execute("""
select Order_id, ProjectName, Customer, Order_date, Due_date, ProjectManager, Status
from orders
""")
for j in range(check_order.rowcount):
#get the next line
ind1=check_order.fetchone()
dataExtraction(fileName)
for i in range(4,Main.nrows):
orderId=Main.cell(4,OrderColumn).value
projectName=Main.cell(4,ProjectColumn).value
#check the existence of orderId
if not orderId in ind1.Order_id:
add_order= ("INSERT INTO orders(`id`, `Order_id`, `ProjectName`, `Customer`, `Order_date`, `Due_date`, `ProjectManager`, `Status`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
cursor[3].execute("SELECT MAX(id)+1 AS ID from orders")
row = cursor[3].fetchone()
order_ref = row.ID
status= 'accepted'
cursor[3].execute(add_order, (order_ref, orderId, projectName, workplan[orderId][projectName][0], workplan[orderId][projectName][1], workplan[orderId][projectName][2], workplan[orderId][projectName][3], status))
cursor[3].commit()
add_sequence= ("INSERT INTO sequence(`seq_id`, `WP_id`, `Order_id`, `PartCode`, `PartName`, `Operation_Name`, `ProcessingTime`, `step`, `PersonnelCode`, `Quantity`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ")
cursor[4].execute("SELECT MAX(seq_id)+1 AS ID from sequence")
row = cursor[4].fetchone()
seq_ref = row.ID
for i in range(4,Main.nrows):
wpId=Main.cell(i,WPColumn).value
cursor[4].execute(add_sequence, (seq_ref, wpId, orderId, workplan[orderId][wpId][0], workplan[orderId][wpId][1], workplan[orderId][wpId][2], workplan[orderId][wpId][6], workplan[orderId][wpId][3], workplan[orderId][wpId][4], workplan[orderId][wpId][5]))
cursor[4].commit()
seq_ref+=1
add_prerequisites=("INSERT INTO prerequisites(`pre_id`, `Order_id`, `WP_id`, `PartCode`, `PartsNeeded`) VALUES (?, ?, ?, ?, ?) ")
cursor[5].execute("SELECT MAX(pre_id)+1 AS ID from prerequisites")
row = cursor[5].fetchone()
pre_ref = row.ID
for i in range(4,Main.nrows):
wpId=Main.cell(i,WPColumn).value
cursor[5].execute(add_prerequisites, (pre_ref, orderId, wpId, workplan[orderId][wpId][0],workplan[orderId][wpId][7]))
cursor[5].commit()
pre_ref +=1
else:
continue
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment