def dbConnectionCheck_Deployment(database, username, password):

    try:
        cursor_test = accessDB.AccessDB(database, username, password)

    except Exception as e:
        print(e)
        print("데이터베이스 접속 실패! 로그인 정보를 다시 입력해주세요.")

    cursor_test.close()

    return database, username, password
def dbConnectionCheck():

    while (1):
        try:
            database = "hansun"  #input("database name : ")
            username = "******"  #input("user name : ")
            password = "******"  #input("password : "******"데이터베이스 접속 실패! 로그인 정보를 다시 입력해주세요.")

        else:
            cursor_test.close()
            print("데이터베이스 접속 성공! ")
            break
    return database, username, password
Exemple #3
0
def initial_assignment(machines):
    cursor = accessDB.AccessDB()
    cursor.execute("""
    declare @THse_CNC_Work_List table (
        [Accunit] [char](3) NULL,
    	[Factory] [char](3) NULL,
  	    [Cnc] [char](6) NULL,
    	[Workdate] [char](8) NULL,
	    [Seq] [char](4) NULL,
	    [Workno] [varchar](20) NULL,
	    [Goodcd] [varchar](8) NULL,
	    [Processcd] [char](2) NULL,
	    [Prodqty] [numeric](18, 0) NULL,
	    [Errqty] [numeric](18, 0) NULL,
	    [Crepno] [char](5) NULL,
	    [Credate] [smalldatetime] NULL,
	    [Modpno] [char](5) NULL,
	    [Moddate] [smalldatetime] NULL)

    insert @THse_CNC_Work_List
    select a.Accunit, a.Factory, a.Cnc, a.Workdate, a.Seq, a.Workno, w.Goodcd, a.Processcd,
           a.Prodqty, a.Errqty, a.Crepno, a.Credate, a.Modpno, a.Moddate
    from THse_Cnc_Machine_Assignment a
    left outer join ( select a.Cnc, a.Workdate, MAX(b.Seq) as Seq
                      from
                      (
                          select a.Cnc, MAX(a.Workdate) as Workdate
                          from THse_Cnc_Machine_Assignment a
                          group by a.Cnc
                      ) a 
                      left outer join THse_Cnc_Machine_Assignment b on a.Cnc = b.Cnc and a.Workdate = b.Workdate
                      group by a.Cnc, a.Workdate ) b on a.Cnc = b.Cnc and a.Workdate = b.Workdate and a.Seq = b.Seq
    left outer join TWorkreport_Han_Eng w on a.Workno = w.Workno
    where b.Cnc is not null
    order by a.Cnc

    select m.MinorNm as [장비명], a.Workno, a.Processcd, w.OrderQty as [작업지시수량], ISNULL(b.Prodqty,0) + ISNULL(b.Errqty,0) as [작업수량], ISNULL(c.Cycletime,0) as [C/T],
        w.DeliveryDate, w.Goodcd,a.Workdate
    from @THse_CNC_Work_List a
    left outer join (    select a.Workno, a.Processcd, SUM(a.Prodqty) as Prodqty, SUM(a.Errqty) as Errqty
                         from TWorkReport_CNC a, @THse_CNC_Work_List b
                         where a.Workdate > '20170101' and a.Workno = b.Workno and a.Processcd = b.Processcd
                         group by a.Workno, a.Processcd    ) b on a.Workno = b.Workno and a.Processcd = b.Processcd
    left outer join (    select ROW_NUMBER() over (partition by a.Goodcd, a.Processcd order by a.Workdate, a.Gubun desc) as _Rank,
                                a.Goodcd, a.Processcd, a.Cycletime
                         from TWorkReport_CNC a, @THse_CNC_Work_List b
                         where a.Goodcd = b.Goodcd ) c on a.Goodcd = c.Goodcd and a.Processcd = c.Processcd and c._Rank = 1
    left outer join TMinor m on a.Cnc = m.MinorCd and m.MinorCd like '293%'
    left outer join TWorkreport_Han_Eng w on a.Workno = w.Workno
    order by m.SortSeq """)

    row = cursor.fetchone()
    while (row):
        cncNo = row[0]
        try:
            cncNo = float((cncNo.split())[0])  # 숫자(-문자) 형식 아닌 spec이 나오면 무시
        except ValueError:
            row = cursor.fetchone()
            continue
        workNo = row[1]
        processcd = row[2].strip()
        orderQty = row[3]
        producedQty = row[4]
        cycleTime = row[5]
        Qty = orderQty - producedQty
        cycle_time = [0, 0, 0]
        if processcd == 'P1':
            cycle_time[0] = int(cycleTime)
        elif processcd == 'P2':
            cycle_time[1] = int(cycleTime)
        elif processcd == 'P3':
            cycle_time[2] = int(cycleTime)
        goodCd = row[7]
        workdate = row[8]

        due_date = row[6]
        due_date_seconds = time.mktime(
            (int(due_date[0:4]), int(due_date[4:6]), int(due_date[6:8]), 12, 0,
             0, 0, 0, 0))  # 정오 기준
        due_date_seconds = int(due_date_seconds)

        newJob = Job(workno=workNo,
                     workdate=workdate,
                     good_num=goodCd,
                     time=cycle_time,
                     quantity=Qty,
                     due=due_date_seconds)
        try:
            (machines[cncNo]).append(newJob)
        except KeyError:
            row = cursor.fetchone()
            print("CNC %d은 후가공 전용 " % (cncNo))
            continue

        row = cursor.fetchone()
Exemple #4
0
def make_job_pool(job_pool, start, end):
    cursor1 = accessDB.AccessDB()
    cursor2 = accessDB.AccessDB()
    deli_start = copy.deepcopy(start)
    deli_end = copy.deepcopy(end)
    cursor1.execute("""
              select a.Workno, g.GoodNo, i.GoodNo as 'RawMaterialNo', g.GoodCd, i.GoodCd as 'RawMaterialCd',
            a.OrderQty, a.DeliveryDate, 
            --case when i.Class3 = '061038' then '단조' else 'HEX' end as Gubun,
            case when m3.minorNm = 'Forging' then 0
			when m3.minorNm = 'Hex Bar' then 1
			when m3.minorNm = 'Round Bar' then 2
			when m3.MinorNm = 'Square Bar' then 3
			when m3.MinorNm = 'VALVE 선작업' then 4 end as RawMaterialGubun,
            --    소재사이즈
            ISNULL(i.Size, 0) as RawMaterialSize,
            --    LOK FITTING 유무
            case when g.Class3 = '061001' then 'Y' else 'N' end as LOKFITTINGYN,
            --    LOK FITTING  일때 반제품 품번 사이즈에 따른 기계배정
            case when g.Class3 = '061001' and ((LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),3) = '-1-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),3) = '-2-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),3) = '-3-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),4) = '-2M-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),4) = '-3M-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),4) = '-4M-')) then 'Y' else 'N' end as LOKFITTINGSIZEYN
     from TWorkreport_Han_Eng a
     inner join TGood g on a.Goodcd = g.GoodCd
     inner join TGood i on a.Raw_Materialcd = i.GoodCd
     left outer join TMinor m3 on i.Class3 = m3.MinorCd
     left outer join TMinor m4 on g.Class4 = m4.MinorCd
     where DeliveryDate between """ + deli_start + """ and """ + deli_end + """
       and PmsYn = 'N'
       and ContractYn = '1'
       --    단조    Hex Bar    Round Bar    Square Bar    VALVE 선작업
       and i.Class3 in ('061038', '061039', '061040', '061048', '061126')
     order by i.Class3, i.GoodNo, i.Size

        """)
    row = cursor1.fetchone()
    while row:
        workno = row[0]
        GoodNo = row[1]
        rawMaterialNo = row[2]
        rawMaterialCd = row[4]
        due_date = row[6]

        due_date_seconds = time.mktime(
            (int(due_date[0:4]), int(due_date[4:6]), int(due_date[6:8]), 12, 0,
             0, 0, 0, 0))  # 정오 기준
        due_date_seconds = int(due_date_seconds)
        GoodCd = row[3]
        cycle_time = []
        rawMaterialSize = float(row[8])
        '''try:
            spec = float((row[8].split('-'))[0])  # 숫자(-문자) 형식 아닌 spec이 나오면 무시
        except ValueError:
            row = cursor1.fetchone()
            continue 
        '''
        Qty = row[5]
        Gubun = row[7]

        if row[9] == 'Y':
            LOKFITTING = 1
        elif row[9] == 'N':
            LOKFITTING = 0

        if row[10] == 'Y':
            LOKFITTINGSIZE = 1
        elif row[10] == 'N':
            LOKFITTINGSIZE = 0

        search_cycle_time(cursor2, cycle_time, GoodCd, Gubun, deli_start,
                          deli_end)

        if sum(cycle_time) * Qty > 60 * 60 * 24 * 4 or sum(
                cycle_time) == 0:  #CNC 공정 만으로 4일 이상 걸리는 작업, 사이클 타임 0 인 작업 제외
            row = cursor1.fetchone()
            continue

        newJob = Job(workno=workno,
                     goodNo=GoodNo,
                     goodCd=GoodCd,
                     time=cycle_time,
                     type=Gubun,
                     quantity=Qty,
                     due=due_date_seconds,
                     rawNo=rawMaterialNo,
                     rawCd=rawMaterialCd,
                     size=rawMaterialSize,
                     LOKFITTING=LOKFITTING,
                     LOKFITTINGSIZE=LOKFITTINGSIZE)

        job_pool.append(newJob)
        row = cursor1.fetchone()

    total_number = len(job_pool)
    print("the total # of job : %d" % (total_number))

    return total_number
def make_job_pool(job_pool,
                  start,
                  end,
                  database,
                  username,
                  password,
                  cut=1000000000,
                  partition_size=1000000000):
    cursor_job = accessDB.AccessDB(database, username, password)
    cursor_cycletime = accessDB.AccessDB(database, username, password)
    deli_start = copy.deepcopy(start)
    deli_end = copy.deepcopy(end)
    no_cycle_time = []
    print("작업 지시서 정보 받아오는 중...")

    cursor_job.execute(
        """ select a.Workno, g.GoodNo,  g.GoodCd, i.GoodCd as 'RawMaterialCd',
            a.OrderQty , a.DeliveryDate, 
            --case when i.Class3 = '061038' then '단조' else 'HEX' end as Gubun,
            case when m3.minorNm = 'Forging' then 0
			when m3.minorNm = 'Hex Bar' then 1
			when m3.minorNm = 'Round Bar' then 2
			when m3.MinorNm = 'Square Bar' then 3
			when m3.MinorNm = 'VALVE 선작업' then 4 end as RawMaterialGubun,
            --    소재사이즈
            ISNULL(i.Size, 0) as RawMaterialSize,
            --    LOK FITTING 유무
            case when g.Class3 = '061001' then 'Y' else 'N' end as LOKFITTINGYN, --LOK FITTING
            --    LOK FITTING  일때 반제품 품번 사이즈에 따른 기계배정
            case when g.Class3 = '061001' and ((LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),3) = '-1-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),3) = '-2-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),3) = '-3-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),4) = '-2M-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),4) = '-3M-') or
                                               (LEFT(REPLACE(g.GoodNo, RTRIM(m4.MinorNm),''),4) = '-4M-')) then 'Y' else 'N' end as LOKFITTINGSIZEYN, a.CloseDate, a.Credate, a.Moddate
     from TWorkreport_Han_Eng a
     inner join TGood g on a.Goodcd = g.GoodCd
     inner join TGood i on a.Raw_Materialcd = i.GoodCd
     left outer join TMinor m3 on i.Class3 = m3.MinorCd
     left outer join TMinor m4 on g.Class4 = m4.MinorCd

     where DeliveryDate between '20180711' and '20180718'
        and PmsYn = 'N'
        and ContractYn = '1' 

       --    단조    Hex Bar    Round Bar    Square Bar    VALVE 선작업
       and i.Class3 in ('061038', '061039', '061040', '061048', '061126')
	   --and ( tc.Processcd = 'P1' or tc.Processcd = 'P2' or tc.Processcd = 'P3')
	 order by DeliveryDate""")
    row = cursor_job.fetchone()

    while row:
        workno = row[0]
        GoodNo = (row[1]).replace(" ", "")
        GoodCd = row[3]
        Gubun = row[7]
        rawMaterialNo = row[2]
        rawMaterialCd = row[4]
        due_date = row[6]
        due_date_seconds = time.mktime(
            (int(due_date[0:4]), int(due_date[4:6]), int(due_date[6:8]), 10, 0,
             0, 0, 0, 0))  # 오후4시 기준
        due_date_seconds = int(due_date_seconds)
        Qty = row[5]
        if Qty > 5000: continue

        rawMaterialSize = float(row[8])

        cycle_time = search_cycle_time(cursor_cycletime, GoodCd)
        '''sum(cycle_time) * Qty > 60 * 60 * 24 * 4 or '''

        if len(cycle_time) == 0:
            no_cycle_time.append([workno, GoodCd, GoodNo])
            if Gubun == 0 or Gubun == 3 or Gubun == 4:
                cycle_time = [150, 150, 150]
            elif Gubun == 1 or Gubun == 2:
                cycle_time = [150, 150]
        '''try:
            spec = float((row[8].split('-'))[0])  # 숫자(-문자) 형식 아닌 spec이 나오면 무시
        except ValueError:
            row = cursor1.fetchone()
            continue 
        '''

        LOKFITTING = 0
        if row[9] == 'Y':  #LOK인지 아닌지 구분
            LOKFITTING = 1

        LOKFITTINGSIZE = 0
        if row[10] == 'Y':  #LOK중에서 1,2,3, 2m,3m,4m인지 확인
            LOKFITTINGSIZE = 1

        if Qty > cut:
            while Qty > 0:
                if Qty < cut:
                    qty_part = Qty
                else:
                    qty_part = min(partition_size, Qty)
                Qty -= qty_part
                newJob = Job(workno=workno,
                             goodNo=GoodNo,
                             goodCd=GoodCd,
                             time=cycle_time,
                             type=Gubun,
                             quantity=qty_part,
                             due=due_date_seconds,
                             rawNo=rawMaterialNo,
                             rawCd=rawMaterialCd,
                             size=rawMaterialSize,
                             LOKFITTING=LOKFITTING,
                             LOKFITTINGSIZE=LOKFITTINGSIZE,
                             seperation=True)
                job_pool.append(newJob)

        else:
            newJob = Job(workno=workno,
                         goodNo=GoodNo,
                         goodCd=GoodCd,
                         time=cycle_time,
                         type=Gubun,
                         quantity=Qty,
                         due=due_date_seconds,
                         rawNo=rawMaterialNo,
                         rawCd=rawMaterialCd,
                         size=rawMaterialSize,
                         LOKFITTING=LOKFITTING,
                         LOKFITTINGSIZE=LOKFITTINGSIZE)
            job_pool.append(newJob)

        row = cursor_job.fetchone()

    total_number = len(job_pool)
    print("the total # of jobs: %d" % (total_number))
    print("the total # of no cycle time : %d" % len(no_cycle_time))
    print("---------------------------------------------------------")
    for n in no_cycle_time:
        print(n[0], n[1], n[2])

    print("---------------------------------------------------------")
    return total_number, no_cycle_time