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

📄 dispatchlist.java

📁 简介: 今天为网友提供的是JAVA源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package com.power.pipeengine.DispatchReport;

/**
 * <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 java.util.*;
import java.io.*;
import com.power.pipeengine.Report.*;
import com.power.pipeengine.Entity.*;
import com.power.util.Message.*;
import com.power.util.urltools.*;
import com.power.pipeengine.DispatchReportMap.*;
import com.power.pipeengine.InputData.*;
import com.power.pipe.*;
import java.text.*;

public class DispatchList {

  private static final DispatchList INSTANCE =
      new DispatchList();

  // Private constructor supresses
  // default public constructor
  private DispatchList() {
  }

  public static DispatchList getInstance() {
    return INSTANCE;
  }

  private Date getMappedStartTime(int bucketID) {
    Vector bucketStartDates = CalendarMap.getInstance().getBucketStartDates();

    return (Date) bucketStartDates.elementAt(bucketID - 1);
  }

  private int getSeqInDay(int bucketID) {
    Vector seqInBucket = CalendarMap.getInstance().getSeqInBucket();

    return ( (Integer) seqInBucket.elementAt(bucketID - 1)).intValue();
  }

  public void createReport() {
    ProductionStartsSchedule startsSchedule = ProductionStartsSchedule.
        getInstance();
    try {
      //WorkingHours.getInstance().readData();
      OrderDetailsManHourMap.getInstance().readData();
      //PeriodDateMap.getInstance().readData();
      ProcessCapabilityTable.getInstance().readData();
      EmployeeAvailability.getInstance().readData();
      EquipmentCapabilityTable.getInstance().readData();
    }
    catch (Exception e) {
      System.out.println("Reading error: " + e.getMessage());
    }
    DataModel.getInstance().getProductDemands().genLastRoutes();

    netOutWIP();

    allocateDetailedOrders();

    groupScheduleByBucket();

    assignEmployee();

    assignStartEndTime();

    setDefaultTime();

    //sortStarts();
    //this.sortStartsByEmployee();
    //assignEquipment();
    //assignEquipment2();
    groupStartsByEmployee();
    assignEquipmentSimple();

    groupScheduleByRoute();
    findNextOperator();
    writeDispatchList();
    writeNextOperator();
    createSummaryReport();

  }

  private String urlAddr = GlobalConfig.getInstance().getLPServerURL() +
      "com.power.pipeengine.LP_ReadWriteFile";

  private void writeDispatchList() {
    //Vector[] startsSchedules = ProductionStartsSchedule.getInstance().getStartsSchedules();
    Vector[] startsSchedules = schedulesGroupedByBucket;
    StringBuffer content = new StringBuffer();
    for (int i = 0; i < startsSchedules.length; i++) {
      Vector allStarts = (Vector) startsSchedules[i];
      if (null == allStarts || allStarts.size() == 0)
        continue;
      for (int j = 0; j < allStarts.size(); j++) {
        StartsSchedule aSchedule = (StartsSchedule) allStarts.elementAt(j);
        content.append(aSchedule.getSchedule());
      }
    }

    URLFileWriter.getInstance().write(urlAddr,
                                      GlobalConfig.getInstance().
                                      getDirectOutputDir() + "dispatchlist.csv",
                                      "WriteModel",
                                      content.toString());

  }

  private void writeNextOperator() {
    Vector[] startsSchedules = schedulesGroupedByBucket;
    int lineNumOffset = getMaxAutoIDInDispatchList();

    StringBuffer content = new StringBuffer();
    for (int i = 0; i < startsSchedules.length; i++) {
      Vector allStarts = (Vector) startsSchedules[i];
      if (null == allStarts || allStarts.size() == 0)
        continue;
      for (int j = 0; j < allStarts.size(); j++) {
        StartsSchedule aSchedule = (StartsSchedule) allStarts.elementAt(j);
        content.append(aSchedule.getNextOperators(lineNumOffset));
      }
    }

    URLFileWriter.getInstance().write(urlAddr,
                                      GlobalConfig.getInstance().
                                      getDirectOutputDir() + "nextop.csv",
                                      "WriteModel",
                                      content.toString());

  }

  int maxIndex = -1;
  public int getMaxAutoIDInDispatchList() {
    if (maxIndex >= 0)
      return maxIndex;

    BufferedReader b = null;
    try {
      b = URLFileReader.getInstance().getReaderForURL(urlAddr,
          "ReadModel",
          GlobalConfig.getInstance().getDirectInputDir() +
          "maxautoidindispatchlist.csv");
    }
    catch (Exception e) {
      MessageArea.getInstance().addMessage(
          "Error opening file: maxautoidindispatchlist.csv\n");
    }

    try {
      String line = b.readLine();
      maxIndex = new Integer(line).intValue();
    }
    catch (Exception e) {
      MessageArea.getInstance().addMessage(
          "Error reading file: maxautoidindispatchlist.csv\n");
    }

    return maxIndex;
  }

  private StartsSchedule getNextSchedule(Vector aVec, int curIdx) {
    if (curIdx >= (aVec.size() - 1)) {
      return null;
    }

    return (StartsSchedule) aVec.elementAt(curIdx + 1);
  }

  private void removeZeroEntries() {
    Vector[] startsSchedules = ProductionStartsSchedule.getInstance().
        getStartsSchedules();

    for (int i = 0; i < startsSchedules.length; i++) {
      Vector starts = (Vector) startsSchedules[i];
      if (null == starts || starts.size() == 0)
        continue;

      for (int j = 0; j < starts.size(); j++) {
        StartsSchedule aSchedule = (StartsSchedule) starts.elementAt(j);
        if (aSchedule.getStartsValue() == 0.0) {
          starts.remove(j);
          j--;
        }
      }
    }
  }

  private Vector splitedStarts = new Vector();
  public Vector getSplitedStarts() {
    return splitedStarts;
  }

  public void netOutWIP() {
    try {
      CashmereWip.getInstance().readData();
    }
    catch (Exception e) {
      System.out.println("Reading error: " + e.getMessage());
    }
    Vector wips = CashmereWip.getInstance().getWIPs();
    for (int i = 0; i < wips.size(); i++) {
      Object[] aWip = (Object[]) wips.elementAt(i);
      String orderID = (String) aWip[0];
      String styleID = (String) aWip[1];
      Integer nextRteID = (Integer) aWip[2];
      Integer qty = (Integer) aWip[3];
      Route r = DataModel.getInstance().getRoutes().getRoute(nextRteID.intValue());
      Vector styles = (Vector) OrderDetailsManHourMap.getInstance().getStyles(
          orderID, styleID);
      if (null == styles)
        continue;
      for (int j = 0; j < styles.size(); j++) {
        Style aStyle = (Style) styles.elementAt(j);
        int rteID = aStyle.getRouteID().intValue();
        if (r.isAPrevRoute(rteID)) {
          aStyle.reduceQty(qty.intValue());
          //System.out.println("Style neted out: " + aStyle.getOrderID() + "\t" +
                             //aStyle.getStyleID());
        }

      }
    }

  }

  public void allocateDetailedOrders() {

    removeZeroEntries();
    Vector[] startsSchedules = ProductionStartsSchedule.getInstance().
        getStartsSchedules();
    Enumeration allOdrs = OrderDetailsManHourMap.getInstance().getAllStyles().
        elements();
    ProductDemands prodDmds = DataModel.getInstance().getProductDemands();

    while (allOdrs.hasMoreElements()) {
      Style aStyle = (Style) allOdrs.nextElement();
      //Vector allStarts = (Vector) startsSchedules[ rteID.intValue() - 1 ];
      Integer rteID = aStyle.getRouteID();
      if (null == startsSchedules[rteID.intValue() - 1])
        continue;
      Enumeration allStarts = startsSchedules[rteID.intValue() - 1].elements();
      Vector allStartsVec = (Vector) startsSchedules[rteID.intValue() - 1];
      if (allStarts == null || allStartsVec.size() == 0) {
        continue;
      }

      Vector tmpVec = new Vector();

      int qty = 0;
      StartsSchedule aSchedule = null;
      //get all until meeting style qty rqmt
      while (allStarts.hasMoreElements()) {
        aSchedule = (StartsSchedule) allStarts.nextElement();
        if (aSchedule.isAssigned())
          continue;
        if (null == aSchedule)
          break;
        tmpVec.add(aSchedule);
        qty += (int) aSchedule.getStartsValue();
        if (qty >= aStyle.getQuantity())
          break;
      }
      if (qty == 0) {
        aStyle.setProcessedQty(0);
        continue;
      }

      if (qty > aStyle.getQuantity()) {
        double extra = (double) (qty - aStyle.getQuantity());
        StartsSchedule tmpSchedule = new StartsSchedule(
            aSchedule.getBucketID(),
            aSchedule.getRouteID(),
            (int) extra);
        tmpSchedule.processStyle( aStyle, (int) extra );
        int index = allStartsVec.indexOf(aSchedule);
        allStartsVec.insertElementAt(tmpSchedule, index + 1);
        //allStartsVec.add( tmpSchedule );
        splitedStarts.add(tmpSchedule);
        tmpSchedule.setParent(aSchedule);
        aSchedule.reviseStarts(aSchedule.getStartsValue() - extra);
        aStyle.setProcessedQty(aStyle.getQuantity());
      }
      else {
        aStyle.setProcessedQty(qty);
      }

      aStyle.setLastStartsBucket(aSchedule.getBucketID());

      for (int j = 0; j < tmpVec.size(); j++) {
        StartsSchedule schedule = (StartsSchedule) tmpVec.elementAt(j);
        schedule.processStyle(aStyle, (int) schedule.getStartsValue());
        schedule.setAssignedStatus(true);
      }

    }
  }

  private Vector[] schedulesGroupedByBucket = new Vector[DataModel.getInstance().
      getCalendar().getTotalNumOfBuckets()];
  private void groupScheduleByBucket() {
    Vector[] startsSchedules = ProductionStartsSchedule.getInstance().
        getStartsSchedules();

    for (int i = 0; i < startsSchedules.length; i++) {
      Vector starts = (Vector) startsSchedules[i];
      if (null == starts || starts.size() == 0)
        continue;

      for (int j = 0; j < starts.size(); j++) {
        StartsSchedule aSchedule = (StartsSchedule) starts.elementAt(j);
        if (null == schedulesGroupedByBucket[aSchedule.getBucketID() - 1]) {
          schedulesGroupedByBucket[aSchedule.getBucketID() - 1] = new Vector();
        }

        Vector schedules = schedulesGroupedByBucket[aSchedule.getBucketID() - 1];
        boolean inserted = false;
        for (int k = 0; k < schedules.size(); k++) {
          StartsSchedule tmpSchedule = (StartsSchedule) schedules.elementAt(k);
          Vector prevRoutes = DataModel.getInstance().getRoutes().getRoute(
              tmpSchedule.getRouteID()).getPrevRoutes();
          if (null == prevRoutes) {
            schedules.add(aSchedule);
            inserted = true;
            break;
          }

          for (int m = 0; m < prevRoutes.size(); m++) {
            Route r = (Route) prevRoutes.elementAt(m);
            if (r.getRouteID() == aSchedule.getRouteID()) {
              schedules.insertElementAt(aSchedule, k);
              inserted = true;
              break;
            }
          }
          if (inserted)
            break;

          prevRoutes = DataModel.getInstance().getRoutes().getRoute(aSchedule.
              getRouteID()).getPrevRoutes();
          if (null == prevRoutes) {
            schedules.insertElementAt(aSchedule, k);
            inserted = true;
            break;
          }

          for (int m = 0; m < prevRoutes.size(); m++) {
            Route r = (Route) prevRoutes.elementAt(m);
            if (r.getRouteID() == tmpSchedule.getRouteID()) {
              schedules.insertElementAt(aSchedule, k + 1);
              inserted = true;
              break;
            }
          }

        }
        if (!inserted) {
          schedulesGroupedByBucket[aSchedule.getBucketID() - 1].add(aSchedule);
        }
      }
    }

  }

  private void setDefaultTime() {
    Vector[] startsSchedules = schedulesGroupedByBucket;
    ProcessCapabilityTable pct = ProcessCapabilityTable.getInstance();

    for (int i = 0; i < startsSchedules.length; i++) {
      Vector starts = (Vector) startsSchedules[i];
      if (null == starts || starts.size() == 0)
        continue;

      for (int j = 0; j < starts.size(); j++) {
        StartsSchedule aSchedule = (StartsSchedule) starts.elementAt(j);

⌨️ 快捷键说明

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