窗口服务类ServiceWindow

package com.mth.bank;

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/*
 * 服务窗口
 * 
 * */
public class ServiceWindow {
	// 窗口的类型 三种 用枚举
	private CustomerType type = CustomerType.COMMON;// 默认是普通窗口
	private int windowId = 1;// 窗口号

	public void setType(CustomerType type) {
		this.type = type;
	}

	public CustomerType getType() {
		return type;
	}

	public void setWindowId(int windowId) {
		this.windowId = windowId;
	}

	public void start() {
		// 线程
		ExecutorService ser = Executors.newSingleThreadExecutor();
		ser.execute(new Runnable() {

			@Override
			public void run() {

				while (true) {
					switch (type) {
					case COMMON:
						commonService();
						break;
					case EXPRESS:
						expressService();
						break;
					case VIP:
						vipService();
						break;
					}
				}
			}

		});

	}

	private void commonService() {
		String windowName = "第" + windowId + "号" + type + "窗口";
		// 获取普通用户集合队列中的第一个元素
		Integer number = NumberMachine.getInstance().getCommManager()
				.fetchServiceNumber();
		System.out.println(windowName + "正在获取任务");
		if (number != null) {// 开始服务
			System.out.println(windowName + "正在为,第" + number + "个普通客户服务!");
			long beginTime = System.currentTimeMillis();
			int maxRandom = Constants.MAX_SERVICE_TIME
					- Constants.MIN_SERVICE_TIME;
			// (0-9000)+1000=1000~10000 (1秒到10秒)
			int serviceTime = new Random().nextInt(maxRandom) + 1
					+ Constants.MIN_SERVICE_TIME;
			try {
				Thread.sleep(serviceTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			long endTime = System.currentTimeMillis();
			long elapsedTime = (endTime - beginTime) / 1000;// 单位是秒
			System.out.println(windowName + "为第" + number + "个" + type
					+ "客户完成服务,耗时" + elapsedTime + "秒");
		} else {
			// 普通用户队列中没有排队的 那么就休息一秒

			System.out.println(windowName + "没有取到普通任务 ,先休息1秒");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

	private void expressService() {
		String windowName = "第" + windowId + "号" + type + "窗口";
		// 获取普通用户集合队列中的第一个元素
		Integer number = NumberMachine.getInstance().getExpressManager()
				.fetchServiceNumber();
		System.out.println(windowName + "正在获取任务");
		if (number != null) {// 开始服务
			System.out.println(windowName + "正在为,第" + number + "快速客户服务!");
			long beginTime = System.currentTimeMillis();
			int maxRandom = Constants.MAX_SERVICE_TIME
					- Constants.MIN_SERVICE_TIME;
			// (0-9000)+1000=1000~10000 (1秒到10秒)
			int serviceTime = new Random().nextInt(maxRandom) + 1
					+ Constants.MIN_SERVICE_TIME;
			try {
				Thread.sleep(serviceTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			long endTime = System.currentTimeMillis();
			long elapsedTime = (endTime - beginTime) / 1000;// 单位是秒
			System.out.println(windowName + "为第" + number + "个" + type
					+ "客户完成服务,耗时" + elapsedTime + "秒");
		} else {
			System.out.println(windowName + "没有取到快速任务");
			commonService();

		}
	}

	private void vipService() {
		String windowName = "第" + windowId + "号" + type + "窗口";
		// 获取普通用户集合队列中的第一个元素
		Integer number = NumberMachine.getInstance().getVipManager()
				.fetchServiceNumber();
		System.out.println(windowName + "正在获取任务");
		if (number != null) {// 开始服务
			System.out.println(windowName + "正在为,第" + number + "VIP客户服务!");
			long beginTime = System.currentTimeMillis();
			int maxRandom = Constants.MAX_SERVICE_TIME
					- Constants.MIN_SERVICE_TIME;
			// (0-9000)+1000=1000~10000 (1秒到10秒)
			int serviceTime = new Random().nextInt(maxRandom) + 1
					+ Constants.MIN_SERVICE_TIME;
			try {
				Thread.sleep(serviceTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			long endTime = System.currentTimeMillis();
			long elapsedTime = (endTime - beginTime) / 1000;// 单位是秒
			System.out.println(windowName + "为第" + number + "个" + type
					+ "客户完成服务,耗时" + elapsedTime + "秒");
		} else {

			System.out.println(windowName + "没有取到VIP任务");
			commonService();

		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值