package bankOpertion;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import run.CustomerArrivalList;
import entity.Counter;
import entity.Time;
import entity.User;
public class Operation {
//柜台列表
private ArrayList<Counter> counterList=new ArrayList<Counter>();
//用户列表
private ArrayList<User> userList =new ArrayList<User>();
//当前等待队列最前端的用户的编号
private int currentId;
//当前时间
private Time currentTime=new Time("00:00");
public static Map<Integer, User> map=new HashMap<Integer, User>();
//初始化数据
public void initial(){
counterList.add(new Counter(1,new Time("9:00"),new Time("12:00")));
counterList.add(new Counter(2,new Time("10:00"),new Time("15:00")));
counterList.add(new Counter(3,new Time("10:00"),new Time("16:00")));
int userNum=CustomerArrivalList.customerNO.length;
if(CustomerArrivalList.processTime.length<userNum)
userNum=CustomerArrivalList.processTime.length;
if(CustomerArrivalList.arrivalTime.length<userNum)
userNum=CustomerArrivalList.arrivalTime.length;
for(int i=0;i<userNum;i++){
userList.add(new User(CustomerArrivalList.customerNO[i],
new Time(CustomerArrivalList.arrivalTime[i]),
CustomerArrivalList.processTime[i]));
}
}
public void management(){
//由于状态不变而中间跳过的时间
int timeJump=0;
currentTime=userList.get(0).getArrivalTime();
currentId=userList.get(0).getCustomerNo();
int nextCounter=-1;
for(Counter c:counterList){
if(!c.isWorking()){
if(!currentTime.isEarlyThan(c.getStartTime())){
c.setWorking(true);
}
}
}
while(!checkEnd()){
// for(Counter c: counterList){
// System.out.println(c.getCounterNo()+"\t"+c.isBusy()+"\t"+c.isWorking());
// }
nextCounter=checkBusy();
if(nextCounter!=-1){
userList.get(currentId).setCounterNo(nextCounter);
userList.get(currentId).setStartTime(currentTime);
userList.get(currentId).setWaitingTime(currentTime.diff
(userList.get(currentId).getArrivalTime()));
counterList.get(nextCounter).setUserId(currentId);
// System.out.println(counterList.get(nextCounter).getUserId()+"asd");
counterList.get(nextCounter).setBusy(true);
}
currentId++;
timeJump=jump();
if(timeJump!=0){
currentTime.addTo(timeJump);
for(Counter c:counterList){
if(!c.isWorking()){
if(currentTime.equals(c.getStartTime())){
c.setWorking(true);
}
}else if(c.isBusy()){
c.setLeftTime(c.getLeftTime()-timeJump);
if(c.getLeftTime()<=0){
c.setBusy(false);
if(!currentTime.isEarlyThan(c.getEndTime())){
c.setWorking(false);
}
userList.get(c.getUserId()).setEndTime(currentTime);
c.setUserId(-1);
}
}
}
}
// for(Counter c: counterList){
// System.out.println(c.getCounterNo()+"\t"+c.isBusy()+"\t"+c.isWorking());
// }
}
// System.out.println(map.size());
}
//柜台用户状态都不变,找下一个状态变化的点,并跳过一段时间
public int jump(){
Time nextTime=new Time("23:59");
if(checkBusy()==-1){
for(Counter c:counterList){
//下一个柜台的开启时间
if(currentTime.isEarlyThan(c.getStartTime())&&
c.getStartTime().isEarlyThan(nextTime)){
nextTime=c.getStartTime();
}
//下一个柜台办完业务的时间
if(currentTime.isEarlyThan(c.getLeftTime(),nextTime)&&
currentTime.isEarlyThan(c.getLeftTime(),c.getEndTime())){
nextTime=currentTime.add(c.getLeftTime());
}
}
return currentTime.diff(nextTime);
}else{
return 0;
}
}
//检查有没有空闲的柜台,若有,返回该柜台的编号,否则返回-1
public int checkBusy(){
for(Counter c:counterList){
if(c.isWorking()&&!c.isBusy()){
// System.out.println(counterList.indexOf(c));
return counterList.indexOf(c);
}
}
return -1;
}
//检查是否所有的柜台都准备下班了
public boolean checkEnd(){
for(Counter c:counterList){
if(c.isWorking()||currentTime.isEarlyThan(c.getStartTime())){
return false;
}
}
return true;
}
}