⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processcapability.java

📁 今天为网友提供的是JAVA源码
💻 JAVA
字号:
package com.power.pipeengine.DispatchReportMap;

/**
 * <p>Title: PIPE Engine</p>
 * <p>Description: Global Planning Optimization Engine</p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: Paraster, Inc.</p>
 * @author unascribed
 * @version 1.0
 */
import com.power.pipeengine.InputData.*;
import com.power.pipeengine.DispatchReport.*;
import java.util.*;

public class ProcessCapability {
    private int employeeID;
    private Hashtable capTable = new Hashtable();

    private double[] capInBuckets;
    private double[] usedCapInBuckets = new double[DataModel.getInstance().getCalendar().getTotalNumOfBuckets()];


    private int[] assignedPeriods = new int[DataModel.getInstance().getCalendar().getTotalNumOfBuckets()];

    boolean assigned = false;

    double assignedPercentage = 0;

    int assignedPID = 0;

    //stores capacity used by date
    Hashtable usedCap = new Hashtable();

    public ProcessCapability( int employID ) {
        employeeID = employID;

        //initialize usedCap
        Calendar cal = Calendar.getInstance();
        Double zero = new Double(0);
        for( int i=0; i<60; i++ ) {
          Date aDate = cal.getTime();
          usedCap.put( aDate.toString(), zero );
          cal.add(Calendar.DAY_OF_MONTH, 1);
        }
    }

    public void addCapability( Integer pid, Double capIdx ) {
        capTable.put( pid, capIdx );
    }

    public double getAssignedPercentage() {
      return assignedPercentage;
    }

    public double getAvailPercentage() {
      return 1 - assignedPercentage;
    }

    public void setAssignedPercentage( double percent ) {
      if( employeeID == 1320 ) {
        System.out.println( "zhangyin assigned percent" + percent);
      }
      assignedPercentage = percent;
      if( assignedPercentage >= 1 ) {
        assigned = true;
      }
    }

    public void setAssignedPID( int pid ) {
      assignedPID = pid;
    }

    public int getAssignedPID() {
      return assignedPID;
    }

    public void turnOffBucket( int bucketID ) {
        capInBuckets[bucketID-1] = 0;
    }

    public Hashtable getCapTable() {
      return capTable;
    }


    public int getEmployeeID() {
        return employeeID;
    }

    public void setAssigned() {
      if( employeeID == 1320 ) {
        System.out.println( "zhangyin assigned");
      }
      assigned = true;
    }

    public boolean isAssigned() {
      return assigned;
    }

    public double getCapability( int procID ) {
      if( employeeID < 0 ) {
        return 1.0;
      }
        return ((Double) capTable.get( new Integer( procID ) )).doubleValue();
    }

    public boolean mayAssignToBucket( int bucketID ) {
        if( assignedPeriods[bucketID-1] >= bucketID ) {
            return false;
        }

        return true;
    }

    public boolean mayAssignToSchedule( StartsSchedule aSchedule ) {
        int pid = aSchedule.getProcessID();
        Double capIdx = (Double) capTable.get( new Integer( pid ) );
        if( null == capIdx ) return false;
        double requiredHoursForOneItem = aSchedule.getStandardProcessingTime() /
            capIdx.doubleValue() / 60.0;

        int bucketID = aSchedule.getBucketID();

        if( capInBuckets[aSchedule.getBucketID()-1] * 60 < 2 ) {
            return false;
        }
        boolean isLastBucketInDate = PeriodDateMap.getInstance().isLastBucketInDate(
                PeriodDateMap.getInstance().getDateBucketBelongsTo( bucketID),
                bucketID );

        //should be able to process half piece
        double capInNextTwoBuckets = capInBuckets[aSchedule.getBucketID()-1];
        if( !isLastBucketInDate &&  aSchedule.getBucketID() < capInBuckets.length ) {
            capInNextTwoBuckets += capInBuckets[aSchedule.getBucketID()];
        }

        if( isLastBucketInDate && aSchedule.getStandardProcessingTime() >= 120 &&
            capInBuckets[aSchedule.getBucketID()-1] >= 1.95 ) {
            capInNextTwoBuckets += capInBuckets[aSchedule.getBucketID()];
        }

        if( ( requiredHoursForOneItem <= capInNextTwoBuckets ) ) {
            return true;
        }

        if( isLastBucketInDate &&
        ( requiredHoursForOneItem - capInBuckets[aSchedule.getBucketID()-1] ) < 1.5 ) {
            return true;
        }


        return false;
    }

    public int assignToSchedule( StartsSchedule aSchedule ) {
        int pid = aSchedule.getProcessID();
        Double capIdx = (Double) capTable.get( new Integer( pid ) );
        boolean useNextBucket = false;

        int qtyToProcess = (int) Math.floor( capInBuckets[aSchedule.getBucketID()-1] * 60
                * capIdx.doubleValue()
                / aSchedule.getStandardProcessingTime() );

    if( qtyToProcess == 0 &&
        aSchedule.getBucketID() == DataModel.getInstance().getCalendar().getTotalNumOfBuckets() ) {
      return -10000;
    }

        if( qtyToProcess == 0 ) {
            qtyToProcess = (int) Math.floor(
                    ( capInBuckets[aSchedule.getBucketID()-1] + capInBuckets[aSchedule.getBucketID()] ) * 60
                * capIdx.doubleValue()
                / aSchedule.getStandardProcessingTime() );
            useNextBucket = true;
        }

        if( qtyToProcess == 0 && capInBuckets[aSchedule.getBucketID()] == 0 ) {
            qtyToProcess = 1;
        }

        qtyToProcess = Math.min( qtyToProcess, aSchedule.getQuantity() );
        double requiredHours = qtyToProcess *
            aSchedule.getStandardProcessingTime() /
            capIdx.doubleValue() / 60.0;

        int bucketID = aSchedule.getBucketID();

        boolean isLastBucketInDate = PeriodDateMap.getInstance().isLastBucketInDate(
                PeriodDateMap.getInstance().getDateBucketBelongsTo( bucketID),
                bucketID );

        aSchedule.setActualStartTime( (int) Math.ceil( 60*usedCapInBuckets[bucketID-1]) ); //in minutes
        if( useNextBucket == false ) {
            usedCapInBuckets[aSchedule.getBucketID()-1] += requiredHours;
            capInBuckets[aSchedule.getBucketID()-1] -= requiredHours;
            if( capInBuckets[aSchedule.getBucketID()-1] < 0 ) {
                capInBuckets[aSchedule.getBucketID()-1] = 0;
            }
        } else {
           double advancedHours = requiredHours - capInBuckets[aSchedule.getBucketID()-1];
            usedCapInBuckets[aSchedule.getBucketID()-1] += capInBuckets[aSchedule.getBucketID()-1];
            capInBuckets[aSchedule.getBucketID()-1] = 0;
            usedCapInBuckets[aSchedule.getBucketID()] += advancedHours;
            capInBuckets[aSchedule.getBucketID()] -= advancedHours;
            if( capInBuckets[aSchedule.getBucketID()] < 0 ) {
                capInBuckets[aSchedule.getBucketID()] = 0;
            }

            if( useNextBucket && isLastBucketInDate ) {
                aSchedule.setNextDayCapUseFlag( true );
                aSchedule.setNextDayCapUsed( advancedHours );
            }
        }

        aSchedule.setDuration( (int) Math.ceil( requiredHours * 60) );
        aSchedule.setEmployee( employeeID, capIdx.doubleValue() );

        ProcessCapabilityTable.getInstance().resortRouteCap( pid, this );
        return aSchedule.getQuantity() - qtyToProcess; //leftover order
    }

    public void setCapInBuckets( double[] aDblArray ) {
        capInBuckets = aDblArray;
    }

    public void print( int pid ) {
        System.out.println( pid + "," + employeeID + "," + getCapability( pid) );
    }

    boolean assignedTest = false;

    double assignedPercentageTest = 0;

    int assignedPIDTest = 0;

    public void initTestParameters() {
      assignedTest = assigned;
      assignedPercentageTest = assignedPercentage;
      assignedPIDTest = assignedPID;
    }
    public double getAssignedPercentageTest() {
      return assignedPercentageTest;
    }

    public double getAvailPercentageTest() {
      return 1 - assignedPercentageTest;
    }

    public void setAssignedPercentageTest( double percent ) {
      assignedPercentageTest = percent;
      if( assignedPercentageTest >= 1 ) {
        assignedTest = true;
      }
    }

    public void setAssignedPIDTest( int pid ) {
      assignedPIDTest = pid;
    }

    public int getAssignedPIDTest() {
      return assignedPIDTest;
    }

    public void setAssignedTest() {
      assignedTest = true;
    }

    public boolean isAssignedTest() {
      return assignedTest;
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -