调度员,工人及任务的OO分析过程
作者:duketian 日期:2007-10-09 17:04:08
日常编码中,我们常需要为各种业务进行建模,为工厂中的任务调度建模就很有意思的,它的主要流程是基本是这样:
1.调度员将工件图纸交付给工人,这是任务的下达.
2.工人工作,完成工件,这是任务的进行过程.
3.工件完成后,工人将图纸和工件返还给调度员,或者到了确定的时间后由调度员去取.这是任务的完成.
4.重复上述三个步骤.
在这个流程中,还存在一些特征:
1.工人可以有多项任务,但他在一个时间只能做一个活,具体做那个由任务的优先级确定.
2.任务完成后要让调度员知道,现实中是工人来找调度员或者调度员找工人来实现的.一般来说调度员找工人的情况居多.
从上述情况分析,我们需要任务,工人,调度员三个类来完成建模,另外为了方便任务的存储和管理,还需要一个任务串类来辅助.
首先看任务类,除了Id,name这样的常规属性外,它应该具有下面的成员:
1.完成所需要的总工时数.
2.已经完成的工时数,它和总工时数的比值就是完成比例.
3.优先级.
4.任务接受者,也就是工人.
5.任务发布者,也就是调度员.
它还应该具有一个重要函数,这个函数应该是定时被执行的,执行时先增加已经完成的工时数,然后看是否完成,是则把自己从任务接受者的待完成任务链表中删除,再添加到任务发布者的已完成任务链表中去.
具体代码如下:
其次再来看任务串类,它用于管理多个任务,自然它必定具有一个链表成员,类中大部分函数都是围绕这个成员设计的,另外考虑到工人需要取得最优先的任务,链表需要按任务的优先级排序,然后做一个函数用于取得最开头的任务即优先级最高的任务.isCompleted函数用于判断所有任务是否完成.
代码如下:
接下来是工人类,它有一个任务串成员用于存储待完成任务,由于它需要定时执行任务,因此需要实现Runnable接口,在run函数中处理任务,另外再做一个doWork()让线程工作起来.工作时首先取得待完成任务链表中的优先级最高的任务,执行任务中的addCompleted方法,如果待完成任务一直没完的话就不断的执行,直到所有任务完成为止.至于任务完成后的从自己的待完成任务链表中删除及添加到调度员的已完成任务链表中的工作由任务自己完成,工人无需管理,具体请看Task类的addCompleted方法.
run函数中,sleep的1000毫秒当一个小时看,这里工人基本是当24小时的班,即机器不闲着人三班倒,如果是日常的八小时任务则可以先取一下当前时间是否在工作时间内,是则继续干,如果不是应该加入继续休眠sleep的代码.
工人类代码如下:
执行输出如下:
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:10% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:18% 还需处理3个.
正在处理的任务任务名:任务9 工人名:老熟练工人三 完成度:71% 还需处理3个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:20% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:37% 还需处理3个.
正在处理的任务任务名:任务9 工人名:老熟练工人三 完成度:100% 还需处理2个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:30% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:56% 还需处理3个.
正在处理的任务任务名:任务7 工人名:老熟练工人三 完成度:33% 还需处理2个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:40% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:75% 还需处理3个.
正在处理的任务任务名:任务7 工人名:老熟练工人三 完成度:66% 还需处理2个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:50% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:93% 还需处理3个.
正在处理的任务任务名:任务7 工人名:老熟练工人三 完成度:100% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:60% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:100% 还需处理2个.
正在处理的任务任务名:任务8 工人名:老熟练工人三 完成度:38% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:70% 还需处理3个.
正在处理的任务任务名:任务4 工人名:熟练工人二 完成度:60% 还需处理2个.
正在处理的任务任务名:任务8 工人名:老熟练工人三 完成度:76% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:80% 还需处理3个.
正在处理的任务任务名:任务4 工人名:熟练工人二 完成度:100% 还需处理1个.
正在处理的任务任务名:任务8 工人名:老熟练工人三 完成度:100% 还需处理0个.
工人老熟练工人三的全部任务处理完毕!
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:90% 还需处理3个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:10% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:100% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:20% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:22% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:30% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:44% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:40% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:66% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:50% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:88% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:60% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:100% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:70% 还需处理1个.
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:25% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:80% 还需处理1个.
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:50% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:90% 还需处理1个.
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:75% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:100% 还需处理0个.
工人熟练工人二的全部任务处理完毕!
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:100% 还需处理0个.
工人普通工人一的全部任务处理完毕!
代码下载:
http://www.blogjava.net/Files/sitinspring/TaskManagement20071005131809.rar
1.调度员将工件图纸交付给工人,这是任务的下达.
2.工人工作,完成工件,这是任务的进行过程.
3.工件完成后,工人将图纸和工件返还给调度员,或者到了确定的时间后由调度员去取.这是任务的完成.
4.重复上述三个步骤.
在这个流程中,还存在一些特征:
1.工人可以有多项任务,但他在一个时间只能做一个活,具体做那个由任务的优先级确定.
2.任务完成后要让调度员知道,现实中是工人来找调度员或者调度员找工人来实现的.一般来说调度员找工人的情况居多.
从上述情况分析,我们需要任务,工人,调度员三个类来完成建模,另外为了方便任务的存储和管理,还需要一个任务串类来辅助.
首先看任务类,除了Id,name这样的常规属性外,它应该具有下面的成员:
1.完成所需要的总工时数.
2.已经完成的工时数,它和总工时数的比值就是完成比例.
3.优先级.
4.任务接受者,也就是工人.
5.任务发布者,也就是调度员.
它还应该具有一个重要函数,这个函数应该是定时被执行的,执行时先增加已经完成的工时数,然后看是否完成,是则把自己从任务接受者的待完成任务链表中删除,再添加到任务发布者的已完成任务链表中去.
具体代码如下:
1 | package com.sitinspring.taskmanagement.domain;
import com.sitinspring.taskmanagement.util.IdUtil;
public class Task implements Comparable {
private String id;
private String name;
// 完成需消耗的工时数
private int manHour;
// 已经完成的工时数
private int completed;
// 优先级
private int priority;
// 接受任务者
private Worker worker;
// 发布任务者
private Attemper attemper;
public Task(String name, int manHour) {
this(name, manHour, 0);
}
public Task(String name, int manHour, int priority) {
id = IdUtil.generateId();
this.name = name;
this.manHour = manHour;
this.priority = priority;
this.completed = 0;
}
// 任务是否完成
public boolean isCompleted() {
return completed >= manHour;
}
// 添加完成度
public void addCompleted(int n) {
completed += n;
if (isCompleted()) {
completed = manHour;
if (worker != null) {
// 完成后让工人把自己从任务列表中删除
worker.removeTask(this);
}
if (attemper != null) {
// 完成后把任务添加到调度员(任务发送者)的完成任务链表
attemper.addCompletedTask(this);
}
}
}
public int compareTo(Object obj) {
Task another = (Task) obj;
return (another.priority) - this.priority;
}
public String toString() {
return "任务名:" + name + " 工人名:" + worker.getName() + " 完成度:" + 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 int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
public Worker getWorker() {
return worker;
}
public void setWorker(Worker worker) {
this.worker = worker;
}
public Attemper getAttemper() {
return attemper;
}
public void setAttemper(Attemper attemper) {
this.attemper = attemper;
}
}
|
其次再来看任务串类,它用于管理多个任务,自然它必定具有一个链表成员,类中大部分函数都是围绕这个成员设计的,另外考虑到工人需要取得最优先的任务,链表需要按任务的优先级排序,然后做一个函数用于取得最开头的任务即优先级最高的任务.isCompleted函数用于判断所有任务是否完成.
代码如下:
1 | com.sitinspring.taskmanagement.domain;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class TaskBunch{
// 任务链表
private List<Task> tasks;
public TaskBunch(){
tasks=new LinkedList<Task>();
}
// 取得最优先任务
public Task getTopTask(){
return tasks.get(0);
}
// 取得任务个数
public int getSize(){
return tasks.size();
}
// 判断是否完成
public boolean isCompleted(){
for(Task task:tasks){
if(task.isCompleted()==false){
return false;
}
}
return true;
}
// 添加任务
public void addTask(Task task){
tasks.add(task);
Collections.sort(tasks);
}
// 删除任务
public void removeTask(Task task){
tasks.remove(task);
}
}
|
接下来是工人类,它有一个任务串成员用于存储待完成任务,由于它需要定时执行任务,因此需要实现Runnable接口,在run函数中处理任务,另外再做一个doWork()让线程工作起来.工作时首先取得待完成任务链表中的优先级最高的任务,执行任务中的addCompleted方法,如果待完成任务一直没完的话就不断的执行,直到所有任务完成为止.至于任务完成后的从自己的待完成任务链表中删除及添加到调度员的已完成任务链表中的工作由任务自己完成,工人无需管理,具体请看Task类的addCompleted方法.
run函数中,sleep的1000毫秒当一个小时看,这里工人基本是当24小时的班,即机器不闲着人三班倒,如果是日常的八小时任务则可以先取一下当前时间是否在工作时间内,是则继续干,如果不是应该加入继续休眠sleep的代码.
工人类代码如下:
1 | package com.sitinspring.taskmanagement.domain;
import com.sitinspring.taskmanagement.util.IdUtil;
public class Worker implements Runnable{
private String id;
private String name;
// 任务列表
private TaskBunch taskBunch;
// 工作速度
private int speed;
public Worker(String name,int speed){
id=IdUtil.generateId();
this.name=name;
this.speed=speed;
taskBunch=new TaskBunch();
}
// 添加任务
public void addTask(Task task){
task.setWorker(this);
taskBunch.addTask(task);
}
// 删除任务
public void removeTask(Task task){
taskBunch.removeTask(task);
}
// 开始干活
public void doWork(){
Thread thread=new Thread(this);
thread.start();
}
// 真正干活
public void run(){
while(!taskBunch.isCompleted()){
try{
Thread.sleep(1000);
Task task=taskBunch.getTopTask();
task.addCompleted(speed);
System.out.println("正在处理的任务"+task+" 还需处理"+taskBunch.getSize()+"个.");
}
catch(Exception ex){
ex.printStackTrace();
}
}
System.out.println("工人"+name+"的全部任务处理完毕!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
}
最后是调度员类,它的主要任务是生成任务以及管理已经完成的任务,代码比较简单:
package com.sitinspring.taskmanagement.domain;
import com.sitinspring.taskmanagement.util.IdUtil;
public class Attemper{
private String id;
private String name;
private TaskBunch completedTasks;
public Attemper(String name){
id=IdUtil.generateId();
this.name=name;
completedTasks=new TaskBunch();
}
public Task generateTask(String name,int manHour,int priority){
Task task=new Task(name,manHour,priority);
task.setAttemper(this);
return task;
}
public void addCompletedTask(Task task){
completedTasks.addTask(task);
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
具体示例执行过程如下:
Attemper Attemper=new Attemper("调度员");
Worker commonWorker=new Worker("普通工人一",2);
commonWorker.addTask(Attemper.generateTask("任务1",8,1));
commonWorker.addTask(Attemper.generateTask("任务2",9,2));
commonWorker.addTask(Attemper.generateTask("任务3",20,3));
commonWorker.doWork();
Worker skilledWorker=new Worker("熟练工人二",3);
skilledWorker.addTask(Attemper.generateTask("任务4",5,2));
skilledWorker.addTask(Attemper.generateTask("任务5",30,2));
skilledWorker.addTask(Attemper.generateTask("任务6",16,3));
skilledWorker.doWork();
Worker oldSkilledWorker=new Worker("老熟练工人三",5);
oldSkilledWorker.addTask(Attemper.generateTask("任务7",15,2));
oldSkilledWorker.addTask(Attemper.generateTask("任务8",13,2));
oldSkilledWorker.addTask(Attemper.generateTask("任务9",7,3));
oldSkilledWorker.doWork();
|
执行输出如下:
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:10% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:18% 还需处理3个.
正在处理的任务任务名:任务9 工人名:老熟练工人三 完成度:71% 还需处理3个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:20% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:37% 还需处理3个.
正在处理的任务任务名:任务9 工人名:老熟练工人三 完成度:100% 还需处理2个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:30% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:56% 还需处理3个.
正在处理的任务任务名:任务7 工人名:老熟练工人三 完成度:33% 还需处理2个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:40% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:75% 还需处理3个.
正在处理的任务任务名:任务7 工人名:老熟练工人三 完成度:66% 还需处理2个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:50% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:93% 还需处理3个.
正在处理的任务任务名:任务7 工人名:老熟练工人三 完成度:100% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:60% 还需处理3个.
正在处理的任务任务名:任务6 工人名:熟练工人二 完成度:100% 还需处理2个.
正在处理的任务任务名:任务8 工人名:老熟练工人三 完成度:38% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:70% 还需处理3个.
正在处理的任务任务名:任务4 工人名:熟练工人二 完成度:60% 还需处理2个.
正在处理的任务任务名:任务8 工人名:老熟练工人三 完成度:76% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:80% 还需处理3个.
正在处理的任务任务名:任务4 工人名:熟练工人二 完成度:100% 还需处理1个.
正在处理的任务任务名:任务8 工人名:老熟练工人三 完成度:100% 还需处理0个.
工人老熟练工人三的全部任务处理完毕!
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:90% 还需处理3个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:10% 还需处理1个.
正在处理的任务任务名:任务3 工人名:普通工人一 完成度:100% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:20% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:22% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:30% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:44% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:40% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:66% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:50% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:88% 还需处理2个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:60% 还需处理1个.
正在处理的任务任务名:任务2 工人名:普通工人一 完成度:100% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:70% 还需处理1个.
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:25% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:80% 还需处理1个.
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:50% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:90% 还需处理1个.
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:75% 还需处理1个.
正在处理的任务任务名:任务5 工人名:熟练工人二 完成度:100% 还需处理0个.
工人熟练工人二的全部任务处理完毕!
正在处理的任务任务名:任务1 工人名:普通工人一 完成度:100% 还需处理0个.
工人普通工人一的全部任务处理完毕!
代码下载:
http://www.blogjava.net/Files/sitinspring/TaskManagement20071005131809.rar
平均得分
(0 次评分)
评论: 13 | 查看次数: 1490
- 共有 13 条评论
- 共有 13 条评论
发表评论
订阅
上一篇
|

文章来自:
标签: 
Cheap Warhammer gold
Warhammer Online gold
WAR Gold
Buy Warhammer Gold
Warhammer Online Gold
Warhammer Gold for sale
Warhammer Accounts
Buy Warhammer Accounts
Cheap Warhammer Accounts
Warhammer Power leveling
WAR Power leveling
Warhammer Online Power Leveling
Warhammer CD Key
WAR CD Key
Warhammer Online CD Key
Warhammer Game Time Card
Cheap Warhammer gold
Warhammer Online gold
WAR Gold
Buy Warhammer Gold
Warhammer Online Gold
Warhammer Gold for sale
Warhammer Accounts
Buy Warhammer Accounts
Cheap Warhammer Accounts
Warhammer Power leveling
WAR Power leveling
Warhammer Online Power Leveling
Warhammer CD Key
WAR CD Key
Warhammer Online CD Key
Warhammer Game Time Card
gxxxxlllgjgfy
留学澳洲
英国留学
留学英国
wow gold
wow gold
wow gold
wow account
留学澳大利亚
马来西亚留学
新西兰签证
日本签证
留学美国
留学澳洲
留学澳洲
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
gxxxxlllgjgfy
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
股票软件
股票软件
大智慧
大智慧
全教振
全教振
留学中介
出国留学
留学
英国留学
洗涤设备
洗涤机械
进口轴承
进口轴承
NSK轴承
NSK轴承
SKF轴承
SKF轴承
FX
FX
TIMKEN轴承
TIMKEN轴承
FAG轴承
FAG轴承
中高年 転職
中高年 転職
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
补偿导线
铂铑热电偶
OMEGA测温线
电子签名
数字签名
电子签章
电子印章
IT外包
阴茎增大
乐泰
乐泰胶
loctite
芳香疗法
广东藏獒
五金工具
进口五金工具
五金工具代理
深圳室内环境检测
反应锅
不锈钢反应锅
列管冷凝器
螺旋板换热器
清洗
清洗公司
管道清洗
空调清洗
中央空调清洗
锅炉清洗
化学清洗
中央空调风管清洗
艾力达
万艾可
西力士
冰淇淋加盟
意大利冰淇淋
冰淇淋连锁
韩国冰淇淋
冰淇淋专卖店
脑黄金冰淇淋
皮炎
湿疹
荨麻疹
Носки согревающие
Оздоровительное изделие
Халат купальный
Изделие из ангоры
Майка из ангоры
注册英国公司
英国公司注册
英国公司注册
美国公司注册
BVI公司注册
注册BVI公司
通信仪表
以太网测试仪
2M误码仪
SDH测试仪
ADSL测试仪
信令仪
PCM测试仪
电池测量仪
传输分析仪
切换设备
远动信号测试
太阳能路灯
上海华宇物流公司
上海华宇物流
华宇物流公司
华宇物流
论文发表
上海翻译公司
上海翻译
英语培训
英语口语
神经性皮炎
皮炎
湿疹
荨麻疹
慢性荨麻疹
藏獒
液压缸
油缸
破碎机
北京旅游
北京旅行社
条码机
条码打印机
条形码打印机
阴茎增大
伟哥
发酵罐
冰淇淋
加盟店
冷饮店
冰淇淋机
冰淇淋粉
冰激凌
大豆床上用品
保健内衣
羊绒内衣
大豆纤维面料
团购礼品
移民
投资移民
商业移民
技术移民
美国移民
澳洲移民
德国移民
英国移民
加拿大移民
热电偶插头
测温线
热电阻
硅碳棒
除湿机
抽湿机
工业除湿机
空气净化器
空气净化机
吸塑机
纸管机
无缝管
合金管
无缝管
无缝钢管
高血压
无线网桥
无线监控
产品设计
men spa beijing
men massage beijing
pearl jewelry
Beijing Tour
china Tour
beijing Tour
china Tour
beijing Tour
China Necklace Wholesale
China Bracelet Wholesale
China Ring wholesale
China gemstone beads wholesale
China Jewelry Accessories wholesale
China Semiprecious beads wholesale
replica handbag
replica tiffany
replica watches
louis vuitton replica
chanel replica
gucci replica
Chinese language
Chinese learn
learning Chinese
learn mandarin
ecosway
gasifier
coal gas
coal gasification
pro dj cases
beijing tour
beijing tours
beijing travel
beijing tours
china tour
beijing
china tours
china travel
beijing china
china beijing
beijing hotel
beijing hotels
China Flights
carved fireplace
stone bathtub
marble fountain
marble bench
marble fireplace
marble sculpture
marble columns
marble lions
marble doorway
marble gazebo
marble pillar
marble fireplace surround
marble statue
marble bathtub
chloe_hb159@hotmail.com
chloe@21cnmanager.com
buy wow gold
cheapest wow gold
world of warcraft gold
sell world of warcraft gold
buy wow account
buy world of warcraft account
wow power leveling
world of warcraft powerleveling
Wow Honor Points Leveling
Wow Pvp Honor Leveling
wow profession leveling
wow skill leveling
Wow Reputation Leveling
World Of Warcraft Reputation Leveling
Wow Honor Leveling
World Of Warcraft Honor Leveling
Wow Cd Key
wow Game Time Card
Wow gold for sale
wow gold fast delivery
wow accounts
buy wow account character
cheap wow power leveling
world of warcraft powerleveling
World Of Warcraft Cd Key
World Of Warcraft Time Card
Buy Lotro Gold | Lord Of The Rings Online Gold
Lotro Accounts | Buy Lotro Accounts
Lord Of The Rings Online Power Leveling | Lord Of The Rings Online PowerLeveling
Lotro Cd Key | Lord Time Card
Lotro Gold | Lotro Gold Instant Delivery
lord of the rings online accounts | lord of the rings online accounts for sale
Lotro Power Leveling | Lotro Powerleveling
Lord Of The Rings Online Cd Key | Lord Of The Rings Online Time Card
l2 adena | lineage2 adena
lineage 2 accounts | l2 accounts
lineage 2 power leveling
lineage 2 powerleveling
l2 power leveling | lineage 2 Cd key
L2 Cd Key | lineage 2 time card
l2 game time card
World of Warcraft Gold
Lineage 2 Adena
L2 Adena
Lineage2 Adena
Lineage 2 Adena for sale
Lineage 2 Accounts
L2 Accounts
Lineage 2 Accounts
Lineage 2 Power Leveling
Lineage 2 CD Key
Cheap WoW Gold
Buy WoW Gold
WoW Accounts
WoW Power Leveling
World of Warcraft Power Leveling
WoW CD Key
WOW Gold Europe
WoW EU Gold
WoW Accounts For Sale
World of Warcraft CD Key
LoTRO Gold
Lord of the Rings Online Gold
Buy Lotro Gold
Sell LoTRO Gold
LoTRO CD Key
LoTRO Europe Gold
Cheap LoTRO Accounts
Lord of the Rings Online Power Leveling
Lord of the Rings online CD Key
Cheap Lotro Gold
Cheap Lineage 2 Adena
Buy Lineage 2 Adena
World of Warcraft Gold
Cheap WoW Gold
World of Warcraft Europe Gold
WoW Gold Europe
LoTR Gold
LoTRO EU Gold
Lord of the Rings Online EU Gold
buy wow gold
cheapest wow gold
world of warcraft gold
sell world of warcraft gold
buy wow account
buy world of warcraft account
wow power leveling
world of warcraft powerleveling
Wow Honor Points Leveling
Wow Pvp Honor Leveling
wow profession leveling
wow skill leveling
Wow Reputation Leveling
World Of Warcraft Reputation Leveling
Wow Honor Leveling
World Of Warcraft Honor Leveling
Wow Cd Key
wow Game Time Card
Wow gold for sale
wow gold fast delivery
wow accounts
buy wow account character
cheap wow power leveling
world of warcraft powerleveling
World Of Warcraft Cd Key
World Of Warcraft Time Card
Buy Lotro Gold | Lord Of The Rings Online Gold
Lotro Accounts
| Buy Lotro Accounts
Lord Of The Rings Online Power Leveling | Lord Of The Rings Online PowerLeveling
Lotro Cd Key | Lord Time Card
Lotro Gold | Lotro Gold Instant Delivery
lord of the rings online accounts | lord of the rings online accounts for sale
Lotro Power Leveling | Lotro Powerleveling
Lord Of The Rings Online Cd Key | Lord Of The Rings Online Time Card
cheap wow gold
buy wow gold
l2 adena
lineage2 adena
lineage 2 accounts
l2 accounts
lineage 2 power leveling
lineage 2 powerleveling l2 power leveling
lineage 2 Cd key
L2 Cd Key
lineage 2 time card
l2 game time card
l2 adena
wow gold
world of warcraft gold
lotro gold
lord of the rings online gold
sijiawmy8
上海搬家公司
上海搬场公司
搬场公司
搬家公司
上海搬家
上海搬场
sijiawmy8
上海物流
上海物流公司
物流公司
上海货运
上海货运公司
货运公司
sijiawmy8
飞机票
国际机票
上海机票
特价机票
打折机票