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

📄 productionstartsschedule.java

📁 全球著名IT公司ILog的APS高级排产优化引擎
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.power.pipeengine.Report;

import java.util.*;
import java.io.*;

import com.power.pipeengine.Variable.*;
import com.power.pipeengine.Constraint.*;
import com.power.pipeengine.InputData.*;
import com.power.pipeengine.LPModel.*;
import com.power.pipeengine.Entity.*;
import com.power.pipeengine.*;
import com.power.pipe.*;
import com.power.pipeengine.DispatchReport.*;
import com.power.pipeengine.DispatchReportMap.*;

public class ProductionStartsSchedule extends Report
{
    static ResourceBundle res = ResourceBundle.getBundle("com.power.pipeengine.Res",
                                                          EngineConfig.getInstance().getLocale() );
    private static final ProductionStartsSchedule INSTANCE =
                              new ProductionStartsSchedule();

   // Private constructor supresses
   // default public constructor
    private ProductionStartsSchedule( ) {
		_fileName = "ProductionStartsSchedule";
		//initFileWriter();
    }

    public static ProductionStartsSchedule getInstance( ) {
        return INSTANCE;
    }

    private StringBuffer content = new StringBuffer();
    private Vector[] routeArray = new Vector[DataModel.getInstance().getRoutes().getNumberOfRoutes()];
    //private Vector schedule = new Vector();

    public Vector[] getStartsSchedules() {
        return routeArray;
    }

	public void createReport() throws IOException {
		DataModel dataModel = DataModel.getInstance();
		Vector buckets = dataModel.getCalendar().getBuckets();
		Routes routes = dataModel.getRoutes();
		StartsVariable startsVar = StartsVariable.getInstance();
		OutsVariable outsVar = OutsVariable.getInstance();
		Solution sol = Solution.getInstance();
		RouteProducts rteProds = dataModel.getRouteProducts();

		Enumeration allRoutes = routes.getRoutes().elements();
		String separator = GlobalConfig.getInstance().getSeparator();
        double precision = EngineConfig.getInstance().PRECISION;

		while( allRoutes.hasMoreElements() ) {
			Route r = (Route) allRoutes.nextElement();
			Product p = r.getProduct();

			for( int i=0; i<buckets.size(); i++ ) {
				Bucket b = (Bucket) buckets.elementAt( i );
				String start = startsVar.getVariable( r, p, b );

				double startValue =  sol.getValue( start );
				//skip if no start
				if( startValue <= precision ) continue;

				/*String lineOut =    b.getBucketID() + separator +
									b.getFormatedDate() + separator +
									r.getRouteID() + separator +
									r.getProductID() + separator +
									r.getFacility().getDescription() + separator +
									startValue + "\n";*/
                StartsSchedule aSchedule = new StartsSchedule( b.getBucketID(),
                        r.getRouteID(),
                        startValue );
                //schedule.add( aSchedule );
                if( null == routeArray[ r.getRouteID() - 1 ] ) {
                    routeArray[ r.getRouteID() - 1 ]  = new Vector();
                }
                //routeArray[  r.getRouteID() - 1 ].add( aSchedule );
                insertByBucket( routeArray[  r.getRouteID() - 1 ], aSchedule );
			}
		}

		//_myFileWriter.close();
		//super.flush( content.toString() );
        content = null;
        System.gc();
        groupToIntegers();
	}

    private void insertByBucket( Vector vec, StartsSchedule aSchedule ) {
        if( vec.size() == 0 ) {
            vec.add( aSchedule );
            return;
        }

        for( int i=0; i<vec.size(); i++ ) {
            StartsSchedule tmpSched = (StartsSchedule) vec.elementAt( i );
            if( aSchedule.getBucketID() < tmpSched.getBucketID() ) {
              vec.insertElementAt( aSchedule, i );
                return;
            }
        }

        vec.add( aSchedule );
    }

    public void reset() {
        content = new StringBuffer();
    }

    public void groupToIntegers() {
        ResourceUses rscUses = DataModel.getInstance().getResourceUses();
        Enumeration allDmds = DataModel.getInstance().getProductDemands().getAllDemands().elements();

        try{
          WorkingHours.getInstance().readData();
          PeriodDateMap.getInstance().readData();
        } catch( Exception e) {
          System.out.println( "Reading error: " + e.getMessage() );
        }
        while( allDmds.hasMoreElements() ) {
            ProductDemand aDmd = (ProductDemand) allDmds.nextElement();
            Vector routes = aDmd.getProducingRoutes();
            //System.out.println( "debug 2" );

            for( int i=routes.size()-1; i>=0; i-- ) {
              //System.out.println( "debug 3" );
               Route rte = (Route) routes.elementAt( i );
               //System.out.println( "debug 4" );
                Vector rteArray = routeArray[ rte.getRouteID() - 1 ];
                //System.out.println( "debug 5" );
                if( null == rteArray ) continue;
            double decimal = 0;
            StartsSchedule lastSchedule = null;
            int lastIndex = 0;
            Vector rscUseVec = rscUses.getResourceUse( rte.getRouteID() );
            ResourceUse rscUse= null;
            Resource rsc = null;
            if( null != rscUseVec ) {
                rscUse = (ResourceUse) rscUseVec.elementAt( 0 );
                rsc = rscUse.getResource();
            }
            for( int j=0; j<rteArray.size(); j++ ) {
                StartsSchedule aSchedule = (StartsSchedule) rteArray.elementAt( j );
                double starts = aSchedule.getStartsValue();
                decimal += aSchedule.getStartsValue() - Math.floor( aSchedule.getStartsValue());
                aSchedule.integrizeStarts();
                //System.out.println( "debug 8" );
                if( null != rscUseVec && aSchedule.getStartsValue() != 0 ) {
                  rsc.consumeCapacity(aSchedule.getBucketID(),
                                      aSchedule.getStartsValue() / rscUse.getUPH());
                }
                //if( starts == Math.floor( starts ) ) continue;
                //System.out.println( "debug 9" );

                if( null == lastSchedule ) {
                    lastSchedule = aSchedule;
                    lastIndex = j;
                } else {
                  //System.out.println( "debug 10" );
                    if( decimal >= .85 ) {
                        if( null != rscUseVec ) {
                          for (int k = lastIndex; k <= j; k++) {
                            //System.out.println( "debug 10.1" );
                            lastSchedule = (StartsSchedule) rteArray.elementAt(k);
                            if (!mayAdjustStarts(lastSchedule.getRouteID(),
                                                 lastSchedule.getBucketID())){
                              continue;
                            }
                            //System.out.println( "debug 10.2" );

                            boolean lastBucketInDate = PeriodDateMap.getInstance().
                                isLastBucketInDate(
                                PeriodDateMap.getInstance().getDateBucketBelongsTo(
                                lastSchedule.getBucketID()),
                                lastSchedule.getBucketID());
                            //System.out.println( "debug 10.3" );

                            if (rsc.getResourceHours(lastSchedule.getBucketID()) * 1.05 >=
                                1.0 / rscUse.getUPH()
                                || lastBucketInDate) {
                              if (rsc.getResourceHours(lastSchedule.getBucketID()) < -2.0)
                                continue;
                              lastSchedule.augmentStarts();
                              rsc.consumeCapacity(lastSchedule.getBucketID(),
                                                  1.0 / rscUse.getUPH());
                              decimal -= 1.0;
                              lastIndex = j;
                              break;
                            }
                            }

⌨️ 快捷键说明

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