工序任务指流水线式的工作场景,下一组工人的工件就是上一组工人的成品,一个活做完自己的部分就往下传,直到活完成为止。
为了编程方便简化了各个工序的工时,把它们都当成一样的了。
代码:
package com.sitinspring.autotask.domain;

import com.sitinspring.autotask.util.IdUtil;


/** *//**
* 任务类
*
* @date: 2008-2-25
*/

public class Task implements Comparable
{
private String id;

private String name;

// 完成需消耗的工时数
private int manHour;

// 已经完成的工时数
private int completed;

// 接受任务者
private Worker worker;


public Task(String name, int manHour)
{
id = IdUtil.generateId();
this.name = name;
this.manHour = manHour;
this.completed = 0;
}

// 任务是否完成

public boolean isCompleted()
{
return completed >= manHour;
}

// 添加完成度

public void addCompleted(int n)
{
completed += n;


if (isCompleted())
{
completed = manHour;


if (worker != null)
{
System.out.println("任务"+this+"处理完毕!");
}
}
}


public int compareTo(Object obj)
{
Task another = (Task) obj;
return (another.manHour) - this.manHour;
}


public String toString()
{
//return "任务名:" + name ;//+ " 工人名:" + worker.getName() + " 完成度:" + completed* 100 / manHour + "%";
return name;
}

public String getCompletedRatio()
{
return " 完成度:" + completed * 100 / manHour + "%";
}


public int getCompleted()
{
return completed;
}


public void setCompleted(int completed)
{
this.completed = completed;
}


public int getManHour()
{
return manHour;
}


public void setManHour(int manHour)
{
this.manHour = manHour;
}


public String getName()
{
return name;
}


public void setName(String name)
{
this.name = name;
}


public String getId()
{
return id;
}


public Worker getWorker()
{
return worker;
}


public void setWorker(Worker worker)
{
this.worker = worker;
}

}
package com.sitinspring.autotask.domain;

import java.util.LinkedList;
import java.util.List;


/** *//**
* 任务库类
*
* @author sitinspring
*
*/

public class TaskLibrary
{
private List<Task> tasks;
private String name;


public TaskLibrary(String name)
{
this.name=name;
tasks = new LinkedList<Task>();
}

// 添加单个任务

public synchronized void addTask(Task task)
{
tasks.add(task);
printTasks();
notifyAll();
}

// 添加多个任务

public synchronized void addTasks(List<Task> moreTasks)
{
tasks.addAll(moreTasks);
printTasks();
notifyAll();
}

/** *//**
* 打印现有任务
*
*/

public void printTasks()
{

if(tasks==null)
{
System.out.println("无任务");
return;
}
StringBuffer sb=new StringBuffer();

for(Task task:tasks)
{
sb.append(task+",");
}
System.out.println(name+"现有任务:"+sb.toString());
}


public int getTaskSize()
{
return tasks.size();
}

// 工人领受任务

public synchronized Task fetchTask(Worker worker)
{

while (tasks.size() == 0)
{

try
{
System.out.println(name+"中任务告罄");
System.out.println(name+"中工人:" + worker.getName() + "进入闲置状态");
wait();

} catch (InterruptedException ex1)
{
ex1.printStackTrace();
}
}

Task task = tasks.get(0);
System.out.println("工人:" + worker.getName() + "从"+name+"中取得任务:" + task.getName());
tasks.remove(task);
return task;
}


public String getName()
{
return name;
}
}
package com.sitinspring.autotask.domain;

import com.sitinspring.autotask.util.IdUtil;


/** *//**
* 工人类,用于完成一个”活“
* @author sitinspring
*
* @date 2008-2-25
*/

public class Worker implements Runnable
{

/** *//**
* 工人ID
*/
private String id;


/** *//**
* 工人名
*/
private String name;


/** *//**
* 当前任务
*/
private Task currTask;


/** *//**
* 未完成工件来源的库
*/
private TaskLibrary srcLib;

/** *//**
* 已完成工件去向的库
*/
private TaskLibrary destLib;

// 工作速度
private int speed;


public Worker(String name, int speed, TaskLibrary srcLib,TaskLibrary destLib)
{
id = IdUtil.generateId();
this.currTask = null;
this.name = name;
this.speed = speed;
this.srcLib = srcLib;
this.destLib=destLib;
doWork();
}

// 开始干活

public void doWork()
{
Thread thread = new Thread(this);
thread.start();
}

// 真正干活

public void run()
{

while (true)
{

if (currTask == null || currTask.isCompleted())
{

if(currTask != null && currTask.isCompleted())
{
System.out.println("工人:" + name + "向"+destLib.getName()+"中放置任务:" + currTask.getName());
currTask.setCompleted(0);
destLib.addTask(currTask);
}
currTask = srcLib.fetchTask(this);
currTask.setWorker(this);
}


try
{
Thread.sleep(1000);// 暂停一秒,模拟现实中的加工过程
System.out.println("工人"+name+"正在处理任务" + currTask + "完成度"
+ currTask.getCompletedRatio() + ".");
currTask.addCompleted(speed);

} catch (Exception ex)
{
ex.printStackTrace();
}
}
}


public String getName()
{
return name;
}


public void setName(String name)
{
this.name = name;
}


public String getId()
{
return id;
}
}
执行过程:
package com.sitinspring.autotask;

import java.util.LinkedList;
import java.util.List;

import com.sitinspring.autotask.domain.Task;
import com.sitinspring.autotask.domain.TaskLibrary;
import com.sitinspring.autotask.domain.Worker;



public class Test
{

public static void main(String[] args)
{
TaskLibrary firstLib=new TaskLibrary("第一料场(锯木)");
List<Task> tasks=new LinkedList<Task>();
tasks.add(new Task("1.欧式古典家具",14));
tasks.add(new Task("2.现代家具",10));
tasks.add(new Task("3.组装家具",9));
tasks.add(new Task("4.明代家具",17));
tasks.add(new Task("5.办公桌",8));
tasks.add(new Task("6.电脑桌",6));
tasks.add(new Task("7.公司摆架",5));
tasks.add(new Task("8.老板桌",11));
// 向锯木料场添加任务
firstLib.addTasks(tasks);
// 其余三个料场没有任务,等工人把上一个工序的活放过来才有
TaskLibrary secondLib=new TaskLibrary("第二料场(刨木)");
TaskLibrary thirdLib=new TaskLibrary("第三料场(组装)");
TaskLibrary fouthLib=new TaskLibrary("第四料场(喷漆)");
// 打印四个料场当前任务
firstLib.printTasks();
secondLib.printTasks();
thirdLib.printTasks();
fouthLib.printTasks();
// 启动工人线程,开始干活
new Worker("王进喜",1,firstLib,secondLib);
new Worker("时传详",2,firstLib,secondLib);
new Worker("张秉贵",3,secondLib,thirdLib);
new Worker("徐虎",4,secondLib,thirdLib);
new Worker("陈永贵",2,thirdLib,fouthLib);
}
}
执行情况:
第一料场(锯木)现有任务:1.欧式古典家具,2.现代家具,3.组装家具,4.明代家具,5.办公桌,6.电脑桌,7.公司摆架,8.老板桌,
第一料场(锯木)现有任务:1.欧式古典家具,2.现代家具,3.组装家具,4.明代家具,5.办公桌,6.电脑桌,7.公司摆架,8.老板桌,
第二料场(刨木)现有任务:
第三料场(组装)现有任务:
第四料场(喷漆)现有任务:
工人:王进喜从第一料场(锯木)中取得任务:1.欧式古典家具
工人:时传详从第一料场(锯木)中取得任务:2.现代家具
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
第三料场(组装)中任务告罄
第三料场(组装)中工人:陈永贵进入闲置状态
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:0%.
工人时传详正在处理任务2.现代家具完成度 完成度:0%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:7%.
工人时传详正在处理任务2.现代家具完成度 完成度:20%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:14%.
工人时传详正在处理任务2.现代家具完成度 完成度:40%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:21%.
工人时传详正在处理任务2.现代家具完成度 完成度:60%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:28%.
工人时传详正在处理任务2.现代家具完成度 完成度:80%.
任务2.现代家具处理完毕!
工人:时传详向第二料场(刨木)中放置任务:2.现代家具
第二料场(刨木)现有任务:2.现代家具,
工人:张秉贵从第二料场(刨木)中取得任务:2.现代家具
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
工人:时传详从第一料场(锯木)中取得任务:3.组装家具
工人张秉贵正在处理任务2.现代家具完成度 完成度:0%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:35%.
工人时传详正在处理任务3.组装家具完成度 完成度:0%.
工人张秉贵正在处理任务2.现代家具完成度 完成度:30%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:42%.
工人时传详正在处理任务3.组装家具完成度 完成度:22%.
工人张秉贵正在处理任务2.现代家具完成度 完成度:60%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:50%.
工人时传详正在处理任务3.组装家具完成度 完成度:44%.
工人张秉贵正在处理任务2.现代家具完成度 完成度:90%.
任务2.现代家具处理完毕!
工人:张秉贵向第三料场(组装)中放置任务:2.现代家具
第三料场(组装)现有任务:2.现代家具,
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
工人:陈永贵从第三料场(组装)中取得任务:2.现代家具
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:57%.
工人时传详正在处理任务3.组装家具完成度 完成度:66%.
工人陈永贵正在处理任务2.现代家具完成度 完成度:0%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:64%.
工人时传详正在处理任务3.组装家具完成度 完成度:88%.
任务3.组装家具处理完毕!
工人:时传详向第二料场(刨木)中放置任务:3.组装家具
第二料场(刨木)现有任务:3.组装家具,
工人:徐虎从第二料场(刨木)中取得任务:3.组装家具
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
工人:时传详从第一料场(锯木)中取得任务:4.明代家具
工人陈永贵正在处理任务2.现代家具完成度 完成度:20%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:71%.
工人徐虎正在处理任务3.组装家具完成度 完成度:0%.
工人时传详正在处理任务4.明代家具完成度 完成度:0%.
工人陈永贵正在处理任务2.现代家具完成度 完成度:40%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:78%.
工人徐虎正在处理任务3.组装家具完成度 完成度:44%.
工人时传详正在处理任务4.明代家具完成度 完成度:11%.
工人陈永贵正在处理任务2.现代家具完成度 完成度:60%.
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:85%.
工人徐虎正在处理任务3.组装家具完成度 完成度:88%.
任务3.组装家具处理完毕!
工人:徐虎向第三料场(组装)中放置任务:3.组装家具
第三料场(组装)现有任务:3.组装家具,
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
工人时传详正在处理任务4.明代家具完成度 完成度:23%.
工人陈永贵正在处理任务2.现代家具完成度 完成度:80%.
任务2.现代家具处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:2.现代家具
第四料场(喷漆)现有任务:2.现代家具,
工人:陈永贵从第三料场(组装)中取得任务:3.组装家具
工人王进喜正在处理任务1.欧式古典家具完成度 完成度:92%.
任务1.欧式古典家具处理完毕!
工人:王进喜向第二料场(刨木)中放置任务:1.欧式古典家具
第二料场(刨木)现有任务:1.欧式古典家具,
工人:张秉贵从第二料场(刨木)中取得任务:1.欧式古典家具
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
工人:王进喜从第一料场(锯木)中取得任务:5.办公桌
工人时传详正在处理任务4.明代家具完成度 完成度:35%.
工人陈永贵正在处理任务3.组装家具完成度 完成度:0%.
工人张秉贵正在处理任务1.欧式古典家具完成度 完成度:0%.
工人王进喜正在处理任务5.办公桌完成度 完成度:0%.
工人时传详正在处理任务4.明代家具完成度 完成度:47%.
工人陈永贵正在处理任务3.组装家具完成度 完成度:22%.
工人张秉贵正在处理任务1.欧式古典家具完成度 完成度:21%.
工人王进喜正在处理任务5.办公桌完成度 完成度:12%.
工人时传详正在处理任务4.明代家具完成度 完成度:58%.
工人陈永贵正在处理任务3.组装家具完成度 完成度:44%.
工人张秉贵正在处理任务1.欧式古典家具完成度 完成度:42%.
工人王进喜正在处理任务5.办公桌完成度 完成度:25%.
工人时传详正在处理任务4.明代家具完成度 完成度:70%.
工人陈永贵正在处理任务3.组装家具完成度 完成度:66%.
工人张秉贵正在处理任务1.欧式古典家具完成度 完成度:64%.
工人王进喜正在处理任务5.办公桌完成度 完成度:37%.
工人时传详正在处理任务4.明代家具完成度 完成度:82%.
工人陈永贵正在处理任务3.组装家具完成度 完成度:88%.
任务3.组装家具处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:3.组装家具
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,
第三料场(组装)中任务告罄
第三料场(组装)中工人:陈永贵进入闲置状态
工人张秉贵正在处理任务1.欧式古典家具完成度 完成度:85%.
任务1.欧式古典家具处理完毕!
工人:张秉贵向第三料场(组装)中放置任务:1.欧式古典家具
第三料场(组装)现有任务:1.欧式古典家具,
工人:陈永贵从第三料场(组装)中取得任务:1.欧式古典家具
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
工人王进喜正在处理任务5.办公桌完成度 完成度:50%.
工人时传详正在处理任务4.明代家具完成度 完成度:94%.
任务4.明代家具处理完毕!
工人:时传详向第二料场(刨木)中放置任务:4.明代家具
第二料场(刨木)现有任务:4.明代家具,
工人:徐虎从第二料场(刨木)中取得任务:4.明代家具
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
工人:时传详从第一料场(锯木)中取得任务:6.电脑桌
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:0%.
工人王进喜正在处理任务5.办公桌完成度 完成度:62%.
工人徐虎正在处理任务4.明代家具完成度 完成度:0%.
工人时传详正在处理任务6.电脑桌完成度 完成度:0%.
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:14%.
工人王进喜正在处理任务5.办公桌完成度 完成度:75%.
工人徐虎正在处理任务4.明代家具完成度 完成度:23%.
工人时传详正在处理任务6.电脑桌完成度 完成度:33%.
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:28%.
工人王进喜正在处理任务5.办公桌完成度 完成度:87%.
任务5.办公桌处理完毕!
工人:王进喜向第二料场(刨木)中放置任务:5.办公桌
第二料场(刨木)现有任务:5.办公桌,
工人:王进喜从第一料场(锯木)中取得任务:7.公司摆架
工人徐虎正在处理任务4.明代家具完成度 完成度:47%.
工人时传详正在处理任务6.电脑桌完成度 完成度:66%.
任务6.电脑桌处理完毕!
工人:时传详向第二料场(刨木)中放置任务:6.电脑桌
第二料场(刨木)现有任务:5.办公桌,6.电脑桌,
工人:时传详从第一料场(锯木)中取得任务:8.老板桌
工人:张秉贵从第二料场(刨木)中取得任务:5.办公桌
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:42%.
工人王进喜正在处理任务7.公司摆架完成度 完成度:0%.
工人徐虎正在处理任务4.明代家具完成度 完成度:70%.
工人时传详正在处理任务8.老板桌完成度 完成度:0%.
工人张秉贵正在处理任务5.办公桌完成度 完成度:0%.
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:57%.
工人王进喜正在处理任务7.公司摆架完成度 完成度:20%.
工人徐虎正在处理任务4.明代家具完成度 完成度:94%.
任务4.明代家具处理完毕!
工人:徐虎向第三料场(组装)中放置任务:4.明代家具
第三料场(组装)现有任务:4.明代家具,
工人:徐虎从第二料场(刨木)中取得任务:6.电脑桌
工人时传详正在处理任务8.老板桌完成度 完成度:18%.
工人张秉贵正在处理任务5.办公桌完成度 完成度:37%.
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:71%.
工人王进喜正在处理任务7.公司摆架完成度 完成度:40%.
工人徐虎正在处理任务6.电脑桌完成度 完成度:0%.
工人时传详正在处理任务8.老板桌完成度 完成度:36%.
工人张秉贵正在处理任务5.办公桌完成度 完成度:75%.
任务5.办公桌处理完毕!
工人:张秉贵向第三料场(组装)中放置任务:5.办公桌
第三料场(组装)现有任务:4.明代家具,5.办公桌,
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
工人陈永贵正在处理任务1.欧式古典家具完成度 完成度:85%.
任务1.欧式古典家具处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:1.欧式古典家具
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,1.欧式古典家具,
工人:陈永贵从第三料场(组装)中取得任务:4.明代家具
工人王进喜正在处理任务7.公司摆架完成度 完成度:60%.
工人徐虎正在处理任务6.电脑桌完成度 完成度:66%.
任务6.电脑桌处理完毕!
工人:徐虎向第三料场(组装)中放置任务:6.电脑桌
第三料场(组装)现有任务:5.办公桌,6.电脑桌,
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
工人时传详正在处理任务8.老板桌完成度 完成度:54%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:0%.
工人王进喜正在处理任务7.公司摆架完成度 完成度:80%.
任务7.公司摆架处理完毕!
工人:王进喜向第二料场(刨木)中放置任务:7.公司摆架
第二料场(刨木)现有任务:7.公司摆架,
工人:张秉贵从第二料场(刨木)中取得任务:7.公司摆架
第一料场(锯木)中任务告罄
第一料场(锯木)中工人:王进喜进入闲置状态
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
工人时传详正在处理任务8.老板桌完成度 完成度:72%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:11%.
工人张秉贵正在处理任务7.公司摆架完成度 完成度:0%.
工人时传详正在处理任务8.老板桌完成度 完成度:90%.
任务8.老板桌处理完毕!
工人:时传详向第二料场(刨木)中放置任务:8.老板桌
第二料场(刨木)现有任务:8.老板桌,
工人:徐虎从第二料场(刨木)中取得任务:8.老板桌
第一料场(锯木)中任务告罄
第一料场(锯木)中工人:时传详进入闲置状态
工人陈永贵正在处理任务4.明代家具完成度 完成度:23%.
工人张秉贵正在处理任务7.公司摆架完成度 完成度:60%.
任务7.公司摆架处理完毕!
工人:张秉贵向第三料场(组装)中放置任务:7.公司摆架
第三料场(组装)现有任务:5.办公桌,6.电脑桌,7.公司摆架,
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:张秉贵进入闲置状态
工人徐虎正在处理任务8.老板桌完成度 完成度:0%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:35%.
工人徐虎正在处理任务8.老板桌完成度 完成度:36%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:47%.
工人徐虎正在处理任务8.老板桌完成度 完成度:72%.
任务8.老板桌处理完毕!
工人:徐虎向第三料场(组装)中放置任务:8.老板桌
第三料场(组装)现有任务:5.办公桌,6.电脑桌,7.公司摆架,8.老板桌,
第二料场(刨木)中任务告罄
第二料场(刨木)中工人:徐虎进入闲置状态
工人陈永贵正在处理任务4.明代家具完成度 完成度:58%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:70%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:82%.
工人陈永贵正在处理任务4.明代家具完成度 完成度:94%.
任务4.明代家具处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:4.明代家具
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,1.欧式古典家具,4.明代家具,
工人:陈永贵从第三料场(组装)中取得任务:5.办公桌
工人陈永贵正在处理任务5.办公桌完成度 完成度:0%.
工人陈永贵正在处理任务5.办公桌完成度 完成度:25%.
工人陈永贵正在处理任务5.办公桌完成度 完成度:50%.
工人陈永贵正在处理任务5.办公桌完成度 完成度:75%.
任务5.办公桌处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:5.办公桌
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,1.欧式古典家具,4.明代家具,5.办公桌,
工人:陈永贵从第三料场(组装)中取得任务:6.电脑桌
工人陈永贵正在处理任务6.电脑桌完成度 完成度:0%.
工人陈永贵正在处理任务6.电脑桌完成度 完成度:33%.
工人陈永贵正在处理任务6.电脑桌完成度 完成度:66%.
任务6.电脑桌处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:6.电脑桌
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,1.欧式古典家具,4.明代家具,5.办公桌,6.电脑桌,
工人:陈永贵从第三料场(组装)中取得任务:7.公司摆架
工人陈永贵正在处理任务7.公司摆架完成度 完成度:0%.
工人陈永贵正在处理任务7.公司摆架完成度 完成度:40%.
工人陈永贵正在处理任务7.公司摆架完成度 完成度:80%.
任务7.公司摆架处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:7.公司摆架
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,1.欧式古典家具,4.明代家具,5.办公桌,6.电脑桌,7.公司摆架,
工人:陈永贵从第三料场(组装)中取得任务:8.老板桌
工人陈永贵正在处理任务8.老板桌完成度 完成度:0%.
工人陈永贵正在处理任务8.老板桌完成度 完成度:18%.
工人陈永贵正在处理任务8.老板桌完成度 完成度:36%.
工人陈永贵正在处理任务8.老板桌完成度 完成度:54%.
工人陈永贵正在处理任务8.老板桌完成度 完成度:72%.
工人陈永贵正在处理任务8.老板桌完成度 完成度:90%.
任务8.老板桌处理完毕!
工人:陈永贵向第四料场(喷漆)中放置任务:8.老板桌
第四料场(喷漆)现有任务:2.现代家具,3.组装家具,1.欧式古典家具,4.明代家具,5.办公桌,6.电脑桌,7.公司摆架,8.老板桌,
第三料场(组装)中任务告罄
第三料场(组装)中工人:陈永贵进入闲置状态

代码下载:
http://www.blogjava.net/Files/junglesong/AutoTaskAdv20080225224755.rar