📄 equipmentcapability.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 EquipmentCapability { private String equipmentID; private double[] capInBuckets; private double[] usedCapInBuckets = new double[DataModel.getInstance().getCalendar().getTotalNumOfBuckets()]; private Vector timeWindows = new Vector(); private int assignedToEmployee = -100; public EquipmentCapability( String anID ) { equipmentID = anID; Calendar cal = Calendar.getInstance(); Date first = PeriodDateMap.getInstance().getFirstBucketDate(); Date last = PeriodDateMap.getInstance().getLastBucketDate(); cal.setTime( first ); cal.set( Calendar.HOUR_OF_DAY, (int) WorkingHours.getInstance().getAMStartTime() ); first = cal.getTime(); cal.setTime( last ); cal.set( Calendar.HOUR_OF_DAY, 23 ); last = cal.getTime(); insertAWindow( first, first ); insertAWindow( last, last ); } public String getEquipmentID() { return equipmentID; } public int getAssignedEmployee() { return assignedToEmployee; } public void setAssignedEmployee( int anID ) { assignedToEmployee = anID; } public void turnOffBucket( int bucketID ) { capInBuckets[bucketID-1] = 0; } public double mayAssignToSchedule( StartsSchedule aSchedule ) { if( assignedToEmployee >= 0 ) { if( aSchedule.getEmployee() != assignedToEmployee ) return -1; } int pid = aSchedule.getProcessID(); double requiredHours = aSchedule.getDurationInMinutes() / 60.0; double capInNextTwoBuckets = capInBuckets[aSchedule.getBucketID()-1]; if( aSchedule.getBucketID() < capInBuckets.length ) { capInNextTwoBuckets += capInBuckets[aSchedule.getBucketID()]; } if( usedCapInBuckets[aSchedule.getBucketID()-1] * 60 > aSchedule.getActualStartTime() ) { return -1; } //if lunch or dinner time, consider exra capacity double wastedCap = aSchedule.getActualStartTime() / 60.0 - usedCapInBuckets[aSchedule.getBucketID()-1]; capInNextTwoBuckets -= wastedCap; if( ( requiredHours <= capInNextTwoBuckets ) ) { return wastedCap; } return -1; } public void assignToSchedule( StartsSchedule aSchedule ) { int pid = aSchedule.getProcessID(); boolean useNextBucket = false; double requiredHours = aSchedule.getDurationInMinutes() / 60.0; double wastedCap = aSchedule.getActualStartTime()/60.0 - usedCapInBuckets[aSchedule.getBucketID()-1]; if( wastedCap < 0 ) wastedCap = 0; if( requiredHours + wastedCap > capInBuckets[aSchedule.getBucketID()-1] ) { useNextBucket = true; } int bucketID = aSchedule.getBucketID(); if( useNextBucket == false ) { //usedCapInBuckets[aSchedule.getBucketID()-1] += requiredHours; usedCapInBuckets[aSchedule.getBucketID()-1] = requiredHours + aSchedule.getActualStartTime()/60.0; capInBuckets[aSchedule.getBucketID()-1] -= ( requiredHours + wastedCap ); } else { double advancedHours = requiredHours - capInBuckets[aSchedule.getBucketID()-1] + wastedCap; usedCapInBuckets[aSchedule.getBucketID()-1] += (wastedCap + capInBuckets[aSchedule.getBucketID()-1]); capInBuckets[aSchedule.getBucketID()-1] = 0; usedCapInBuckets[aSchedule.getBucketID()] += advancedHours; capInBuckets[aSchedule.getBucketID()] -= advancedHours; } aSchedule.setEquipment( equipmentID ); insertAWindow( aSchedule.getStartTime(), aSchedule.getEndTime() ); assignedToEmployee = aSchedule.getEmployee(); } public void setCapInBuckets( double[] aDblArray ) { capInBuckets = aDblArray; } public void insertAWindow( Date from, Date to ) { TimeWindow tw1 = new TimeWindow( from, to ); for( int i=0; i<timeWindows.size(); i++ ) { TimeWindow tw2 = (TimeWindow) timeWindows.elementAt( i ); if( from.before( tw2.getFromTime() ) ) { timeWindows.insertElementAt( tw1, i ); return; } } timeWindows.add( tw1 ); } public boolean ableToInsertWindow( Date from, Date to ) { for( int i=0; i<timeWindows.size(); i++ ) { TimeWindow tw1 = (TimeWindow) timeWindows.elementAt( i ); TimeWindow tw2 = null; if( i+1 < timeWindows.size() ) { tw2 = (TimeWindow) timeWindows.elementAt( i+1 ); } else { return false; } if( !tw1.getToTime().after( from ) && !tw2.getFromTime().before( to ) ) { return true; } } return false; } public void print() { System.out.println( "Equipment ID = " + equipmentID ); for(int i=0; i<timeWindows.size(); i++ ) { TimeWindow tw = (TimeWindow) timeWindows.elementAt( i ); tw.print(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -