A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何苦似梦离 中级黑马   /  2014-2-23 14:10  /  863 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

其他部分代码都是一样的,唯独这个窗口服务这个类的代码改了一下,我把三个服务函数,集中成了一个,提高了可复用性,下面看代码
  1. package cn.apple.bank;

  2. import java.util.Random;
  3. import java.util.concurrent.Executors;

  4. public class WindowsServices
  5. {
  6.         //窗口类型
  7.         private  WindowType windowtype = WindowType.COMMON;
  8.         //服务类型
  9.         private  ServiceType servicetype = ServiceType.COMMON;
  10.         private int windowID;
  11.        
  12.         WindowsServices(int windowID,WindowType windowtype,ServiceType servicetype)
  13.         {
  14.                 this.windowID = windowID;
  15.                 this.windowtype = windowtype;
  16.                 this.servicetype = servicetype;
  17.         }
  18.         WindowsServices(int id)
  19.         {
  20.                 this.windowID = id;
  21.         }
  22.        
  23.         public void start()
  24.         {
  25.                 Executors.newSingleThreadExecutor().execute(
  26.                                 new Runnable()
  27.                                 {
  28.                                         @Override
  29.                                         public void run()
  30.                                         {
  31.                                                 while(true)
  32.                                                 {
  33.                                                         Service();
  34.                                                 }
  35.                                                
  36.                                         }

  37.                
  38.                                 });

  39.         }
  40.        

  41.         private void Service()
  42.         {
  43.                 System.out.println(windowID + "号" + windowtype + "窗口正在获取" + servicetype + "任务....");
  44.        
  45.                 Integer number = null;
  46.                 //如果服务类型是什么,就获取什么样的号码
  47.                 switch (servicetype)
  48.                 {
  49.                         case COMMON:
  50.                                 number = NumberMachine.getInstance().getCommonManager().fetchNumber();
  51.                                 break;
  52.                         case EXPRESS:
  53.                                 number = NumberMachine.getInstance().getExpressManager().fetchNumber();
  54.                                 break;
  55.                         case VIP:
  56.                                 number = NumberMachine.getInstance().getVipManager().fetchNumber();
  57.                                 break;
  58.                        
  59.                 }
  60.                 //如果获取成功
  61.                 if(number != null)
  62.                 {
  63.                         System.out.println(windowID + "号" + windowtype + "窗口正在给"+number+"号"+servicetype+"客服服务");
  64.                         long beginTime = System.currentTimeMillis();
  65.                        
  66.                         int maxRandom = 0;
  67.                         switch (windowtype)
  68.                         {
  69.                                 case COMMON:
  70.                                         maxRandom = ConstantsTime.MAX_SERVER_TIME - ConstantsTime.MIN_SERVER_TIME;
  71.                                         break;
  72.                                 case EXPRESS:
  73.                                         maxRandom = ConstantsTime.MAX_SERVER_TIME ;
  74.                                         break;
  75.                                 case VIP:
  76.                                         maxRandom = ConstantsTime.MAX_SERVER_TIME - ConstantsTime.MIN_SERVER_TIME;
  77.                                         break;

  78.                         }
  79.                         int serviceTime = new Random().nextInt(maxRandom)+1 + ConstantsTime.MIN_SERVER_TIME;
  80.                        
  81.                         try
  82.                         {
  83.                                
  84.                                 Thread.sleep(serviceTime);
  85.                                 long endTime = System.currentTimeMillis();
  86.                                 System.out.println(windowID + "号" + windowtype + "窗口正在给"+number+"号"+servicetype+
  87.                                                 "客服服务用了:"+(endTime - beginTime) / 1000 +"秒");
  88.                         } catch (InterruptedException e)
  89.                         {
  90.                                 // TODO Auto-generated catch block
  91.                                 e.printStackTrace();
  92.                         }
  93.                 }
  94.                 else
  95.                 {
  96.                         //获取任务失败,我们马上判断窗口,和服务类型,如果是VIP窗口服务的是VIP,那么马上开始获取普通任务
  97.                         //否则就休息一秒
  98.                         if(servicetype == ServiceType.EXPRESS || servicetype == servicetype.VIP)
  99.                         {
  100.                                 System.out.println(windowID + "号" + windowtype + "窗口没有获取到"+servicetype+"任务");
  101.                         }
  102.                         else
  103.                         {
  104.                                 System.out.println(windowID + "号" + windowtype + "窗口没有获取到"+servicetype+"任务休息1秒");
  105.                                
  106.                                 try
  107.                                 {
  108.                                         Thread.sleep(1000);
  109.                                 } catch (InterruptedException e)
  110.                                 {
  111.                                         // TODO Auto-generated catch block
  112.                                         e.printStackTrace();
  113.                                 }
  114.                         }
  115.                        
  116.                        
  117.                         //如果服务窗口是VIP或者快速,服务类型是普通,那么改回所属服务,不然就让VIP,或者快速窗口去服务普通窗口
  118.                         if(windowtype  ==  WindowType.VIP && servicetype == ServiceType.COMMON)
  119.                         {
  120.                                 servicetype = ServiceType.VIP;
  121.                         }
  122.                         else if(windowtype  ==  WindowType.EXPRESS && servicetype == ServiceType.COMMON)
  123.                         {
  124.                                 servicetype = ServiceType.EXPRESS;
  125.                         }
  126.                         else
  127.                         {
  128.                                 switch (windowtype)
  129.                                 {
  130.                                         case EXPRESS:
  131.                                                 servicetype =  servicetype.COMMON;
  132.                                                 Service();
  133.                                                 break;
  134.                                         case VIP:
  135.                                                 servicetype =  servicetype.COMMON;
  136.                                                 Service();
  137.                                                 break;
  138.                                 }
  139.                         }
  140.                        
  141.                
  142.                        
  143.                
  144.                 }
  145.         }
  146. }
复制代码
欢迎高手指出不足

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马