📄 dispatchlist.java
字号:
Enumeration distinctStyles = OrderDetailsManHourMap.getInstance().
getDistinctStyles().elements();
StringBuffer content = new StringBuffer();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Hashtable orders = new Hashtable();
int onTimeStyles = 0;
int orderQty = 0;
int plannedQty = 0;
Integer one = new Integer(1);
Integer zero = new Integer(0);
Calendar cal = Calendar.getInstance();
Date currentTime = cal.getTime();
String timeStr = sdf.format(currentTime);
while (distinctStyles.hasMoreElements()) {
Style aStyle = (Style) distinctStyles.nextElement();
orders.put(aStyle.getOrderID(), one);
orderQty += aStyle.getQuantity();
Vector starts = startsByRoute[aStyle.getRouteID().intValue() - 1];
Date dueDate = aStyle.getDueDate();
int cumStartsUpToDueDate = 0;
int cumStarts = 0;
int lastStartBucket = 1;
StartsSchedule aSchedule = null;
if (! (null == starts || starts.size() == 0)) {
for (int i = 0; i < starts.size(); i++) {
aSchedule = (StartsSchedule) starts.elementAt(i);
if (null == aSchedule.getOrderID())
continue;
Date startDate = PeriodDateMap.getInstance().getDateBucketBelongsTo(
aSchedule.getBucketID());
if (aSchedule.getOrderID().equals(aStyle.getOrderID()) &&
aSchedule.getStyleID().equals(aStyle.getStyleID()) &&
aSchedule.getProcessID() == aStyle.getProcessID()) {
if (!startDate.after(dueDate)) {
cumStartsUpToDueDate += aSchedule.getQuantity();
}
if (aSchedule.getBucketID() > lastStartBucket) {
lastStartBucket = aSchedule.getBucketID();
}
cumStarts += aSchedule.getQuantity();
}
}
}
plannedQty += cumStartsUpToDueDate;
//if( cumStartsUpToDueDate < aStyle.getQuantity() ) {
if (cumStarts == aStyle.getQuantity()) {
Date date = PeriodDateMap.getInstance().getDateBucketBelongsTo(
lastStartBucket);
content.append(aStyle.getOrderID() + ",");
content.append(aStyle.getStyleID() + ",");
content.append(aStyle.getQuantity() + ",");
content.append(sdf.format(dueDate) + ",");
content.append(cumStartsUpToDueDate + ",");
content.append(sdf.format(date) + ",");
int earliness = (int) ( (date.getTime() - dueDate.getTime()) / 1000 /
60 / 60 / 24);
content.append(earliness + ",");
content.append(timeStr + "\n");
if (earliness <= 0) {
onTimeStyles++;
}
else {
orders.put(aStyle.getOrderID(), zero);
}
}
else {
content.append(aStyle.getOrderID() + ",");
content.append(aStyle.getStyleID() + ",");
content.append(aStyle.getQuantity() + ",");
content.append(sdf.format(dueDate) + ",");
content.append(cumStartsUpToDueDate + ",");
content.append(sdf.format(catchUpDate) + ",");
int earliness = (int) ( (catchUpDate.getTime() - dueDate.getTime()) /
1000 / 60 / 60 / 24);
content.append(earliness + ",");
content.append(timeStr + "\n");
orders.put(aStyle.getOrderID(), zero);
}
//}
}
URLFileWriter.getInstance().write(urlAddr,
GlobalConfig.getInstance().
getDirectOutputDir() + "plandetails.csv",
"WriteModel",
content.toString());
Enumeration allOrders = orders.elements();
int numOnTimeOrders = 0;
while (allOrders.hasMoreElements()) {
if (one == allOrders.nextElement()) {
numOnTimeOrders++;
}
}
content = null;
content = new StringBuffer();
content.append(orders.size() + ",");
content.append(numOnTimeOrders + ",");
content.append(OrderDetailsManHourMap.getInstance().getDistinctStyles().
size() + ",");
content.append(onTimeStyles + ",");
content.append(orderQty + ",");
content.append(plannedQty + ",");
content.append( (totalMinutes / 60) + ",");
content.append("0,");
content.append("0,");
content.append(timeStr + "\n");
URLFileWriter.getInstance().write(urlAddr,
GlobalConfig.getInstance().
getDirectOutputDir() + "plansummary.csv",
"WriteModel",
content.toString());
}
Hashtable startsByOrder = new Hashtable();
private void findNextOperator() {
Vector[] startsSchedules = schedulesGroupedByBucket;
StringBuffer tmpBuf = new StringBuffer();
int lineNumber = 1;
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);
aSchedule.setLineNumber(lineNumber);
aSchedule.initPrevRoutes();
lineNumber++;
String orderID = aSchedule.getOrderID();
//the following should not happen
if (null == orderID) {
//System.out.println( aSchedule.getSchedule());
continue;
}
Hashtable styles = (Hashtable) startsByOrder.get(orderID);
if (null == styles) {
styles = new Hashtable();
startsByOrder.put(orderID, styles);
}
Vector startsVec = (Vector) styles.get(aSchedule.getStyleID());
if (null == startsVec) {
startsVec = new Vector();
styles.put(aSchedule.getStyleID(), startsVec);
}
//insert in ascending order of pid
boolean defined = false;
int pid = aSchedule.getProcessID();
Vector pidVec = null;
for (int t = 0; t < startsVec.size(); t++) {
Vector aVec = (Vector) startsVec.elementAt(t);
StartsSchedule tmpSched = (StartsSchedule) aVec.elementAt(0);
if (pid == tmpSched.getProcessID()) {
defined = true;
pidVec = aVec;
break;
}
}
boolean inserted = false;
if (!defined) {
pidVec = new Vector();
for (int t = 0; t < startsVec.size(); t++) {
Vector aVec = (Vector) startsVec.elementAt(t);
StartsSchedule tmpSched = (StartsSchedule) aVec.elementAt(0);
if (pid < tmpSched.getProcessID()) {
startsVec.insertElementAt(pidVec, t);
inserted = true;
break;
}
}
if (!inserted) {
startsVec.add(pidVec);
}
}
//insert in asending order of start time
inserted = false;
for (int k = 0; k < pidVec.size(); k++) {
StartsSchedule tmpSchedule = (StartsSchedule) pidVec.elementAt(k);
if (aSchedule.getStartTime().before(tmpSchedule.getStartTime())) {
pidVec.insertElementAt(aSchedule, k);
inserted = true;
break;
}
}
if (!inserted) {
pidVec.add(aSchedule);
}
}
}
//adjust capacity
//adjustCapacity();
//find next operators
Enumeration orderKeys = startsByOrder.keys();
while (orderKeys.hasMoreElements()) {
String order = (String) orderKeys.nextElement();
if (null == order)
continue;
Hashtable styles = (Hashtable) startsByOrder.get(order);
if (null == styles)
continue;
Enumeration styleKeys = styles.keys();
while (styleKeys.hasMoreElements()) {
String style = (String) styleKeys.nextElement();
Vector tmpVec = (Vector) styles.get(style);
if (null == tmpVec)
continue;
for (int m = 0; m < tmpVec.size(); m++) {
Vector vecm = (Vector) tmpVec.elementAt(m);
if (null == vecm || vecm.size() == 0)
continue;
StartsSchedule tmpSched = null;
int pidNext = -1;
tmpSched = (StartsSchedule) vecm.elementAt(0);
pidNext = tmpSched.getNextPID();
if (pidNext < 0)
continue;
Vector vecmNext = null;
int nextPID = -1;
for (int mm = 0; mm < tmpVec.size(); mm++) {
if (mm == m)
continue;
vecmNext = (Vector) tmpVec.elementAt(mm);
if (null == vecmNext || vecmNext.size() == 0)
continue;
StartsSchedule tmpSched1 = (StartsSchedule) vecmNext.elementAt(0);
if (tmpSched1.getProcessID() == pidNext) {
nextPID = tmpSched1.getProcessID();
break;
}
}
if (nextPID < 0) {
System.out.println("could not find next pid for: " +
tmpSched.getOrderID() +
", " + tmpSched.getStyleID() + "\tpid = " +
tmpSched.getProcessID());
continue;
}
if (null == vecmNext || vecmNext.size() == 0)
continue;
for (int n = 0; n < vecm.size(); n++) {
StartsSchedule aSchedule = (StartsSchedule) vecm.elementAt(n);
//tmpBuf.append( "A," );
//tmpBuf.append( aSchedule.getScheduleTest() );
if (null == aSchedule)
continue;
int qty = aSchedule.getQuantity();
for (int mNext = 0; mNext < vecmNext.size(); mNext++) {
StartsSchedule schedNext = (StartsSchedule) vecmNext.elementAt(
mNext);
if (null == schedNext)
continue;
//if( schedNext.getStartTime().before( aSchedule.getEndTime() ) ) continue;
if (aSchedule.getEndTime().getTime() - 2 * 60 * 1000 >
schedNext.getStartTime().getTime())
continue;
//int qtyNext = schedNext.getRemainingCap();
int qtyNext = schedNext.getRemainingCap(aSchedule.getRouteID());
if (qtyNext == 0)
continue;
if (qty == 0)
break;
if (qtyNext < qty) {
//schedNext.updateUsage( qtyNext );
schedNext.updateUsage(aSchedule.getRouteID(), qtyNext);
aSchedule.addNextOperator(schedNext.getEmployee(),
qtyNext,
schedNext.getProcessID());
aSchedule.addNextOpLineNumber(schedNext.getLineNumber());
qty -= qtyNext;
//tmpBuf.append( "B," );
//tmpBuf.append( schedNext.getScheduleTest() );
}
else {
//schedNext.updateUsage( qty );
schedNext.updateUsage(aSchedule.getRouteID(), qty);
aSchedule.addNextOperator(schedNext.getEmployee(),
qty,
schedNext.getProcessID());
aSchedule.addNextOpLineNumber(schedNext.getLineNumber());
qty = 0;
//tmpBuf.append( "B," );
//tmpBuf.append( schedNext.getScheduleTest() );
break;
}
}
}
}
}
}
/*URLFileWriter.getInstance().write( urlAddr,
GlobalConfig.getInstance().getDirectOutputDir() + "test.csv",
"WriteModel",
tmpBuf.toString() );*/
}
private void adjustCapacity() {
Enumeration orderKeys = startsByOrder.keys();
while (orderKeys.hasMoreElements()) {
String order = (String) orderKeys.nextElement();
if (null == order)
continue;
Hashtable styles = (Hashtable) startsByOrder.get(order);
if (null == styles)
continue;
Enumeration styleKeys = styles.keys();
while (styleKeys.hasMoreElements()) {
String style = (String) styleKeys.nextElement();
Vector tmpVec = (Vector) styles.get(style);
if (null == tmpVec)
continue;
for (int m = 0; m < tmpVec.size(); m++) {
Vector vecm = (Vector) tmpVec.elementAt(m);
if (null == vecm)
continue;
StartsSchedule tmpSched = null;
int pid = -1;
tmpSched = (StartsSchedule) vecm.elementAt(0);
pid = tmpSched.getProcessID();
if (pid < 0)
continue;
Vector vecmNext = null;
int nextPID = -1;
int cnt = 0;
for (int mm = 0; mm < tmpVec.size(); mm++) {
if (mm == m)
continue;
vecmNext = (Vector) tmpVec.elementAt(mm);
if (null == vecmNext)
continue;
StartsSchedule tmpSched1 = (StartsSchedule) vecmNext.elementAt(0);
if (tmpSched1.getNextPID() == pid) {
nextPID = tmpSched1.getProcessID();
cnt++;
}
}
if (cnt > 1) {
for (int kk = 0; kk < vecm.size(); kk++) {
tmpSched = (StartsSchedule) vecm.elementAt(kk);
tmpSched.setAdjustedCap(cnt);
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -