給一個大概思路吧。java實現??梢陨晕⒖枷?。packagecom.ui;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.HashMap;importjava.util.HashSet;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;publicclassOrderStatusService{/***映射關系列表*/publicstaticListmapperList=newArrayList();static{/***初始化判斷項、訂單動作到狀態的映射,這里只為演示,實際中映射關系最好保存在配置文件中或者數據庫中,一般在應用啟動的時候,從配置文件或者數據庫加載,保存一份即可。**/OrderStatusMapperm1=newOrderStatusMapper();m1.addJudgementItems(1,2,4,6)//先吃后付and自動接單and有打印機and打印成功.addAction2statusItem(1,6)//下單動作:進行中.addAction2statusItem(7,4);//結賬動作:已完成OrderStatusMapperm2=newOrderStatusMapper();m2.addJudgementItems(3,5).addAction2statusItem(2,1).addAction2statusItem(4,3);mapperList.add(m1);mapperList.add(m2);}/***是否是相等的set*@paramsource*@paramdest*@return*/publicbooleanisEqualSet(Setsource,Setdest){if(null==source||null==dest){returnfalse;}if(source.size()!=dest.size()){returnfalse;}for(Iteratorit=source.iterator();it.hasNext();){if(!dest.contains(it.next())){returnfalse;}}returntrue;}publicstaticvoidmain(String[]args){Orderorder=newOrder();order.setOrderAction(1);//下單order.setJudgementItems(newHashSet(Arrays.asList(1,2,4,6)));//先吃后付and自動接單and有打印機and打印成功//獲取訂單下一個狀態System.out.println(newOrderStatusService().getNextOrderStatus(order));//結果為6(進行中)}/***獲取下一個訂單狀態*@paramcurOrder*@return*/publicIntegergetNextOrderStatus(OrdercurOrder){for(OrderStatusMappermapper:mapperList){if(isEqualSet(curOrder.getJudgementItems(),mapper.getJudgementItems())&&null!=curOrder.getOrderAction()){returnmapper.getAction2statusMap().get(curOrder.getOrderAction());}}returnnull;}}/***訂單類型,訂單動作到狀態的映射。**/classOrderStatusMapper{/***判斷項*/privateSetjudgementItems=newHashSet();/***訂單動作到狀態關系*/privateMapaction2statusMap=newHashMap();/***下一個訂單狀態*/privateIntegernextStatus;publicSetgetJudgementItems(){returnjudgementItems;}publicOrderStatusMapperaddJudgementItems(Integer...items){if(null==items||items.length<=0){returnthis;}for(Integercur:items){this.judgementItems.add(cur);}returnthis;}publicMapgetAction2statusMap(){returnaction2statusMap;}publicOrderStatusMapperaddAction2statusItem(Integeraction,Integerstatus){if(null==action||null==status){returnthis;}this.action2statusMap.put(action,status);returnthis;}publicIntegergetNextStatus(){returnnextStatus;}publicOrderStatusMappersetNextStatus(IntegernextStatus){this.nextStatus=nextStatus;returnthis;}}classOrder{/***判斷項目*1:商家開啟先食后付;*2:自動接單;*3:不自動接單*4:有打印機*5:沒有打印機*6:打印成功*7:打印不成功*8:自動清臺*9:不自動清臺*/privateSetjudgementItems;/***訂單動作*1:下單*2:接單*3:拒單*4:顧客取消單*5:顧客支付*6:清臺*7:結賬*/privateIntegerorderAction;/***訂單狀態*1:待確認*2:待處理*3:拒絕*4:完成*5:取消*6:進行中*7:超時*8:申請退款*/privateIntegerorderStatus;publicSetgetJudgementItems(){returnjudgementItems;}publicvoidsetJudgementItems(SetjudgementItems){this.judgementItems=judgementItems;}publicIntegergetOrderAction(){returnorderAction;}publicvoidsetOrderAction(IntegerorderAction){this.orderAction=orderAction;}publicIntegergetOrderStatus(){returnorderStatus;}publicvoidsetOrderStatus(IntegerorderStatus){this.orderStatus=orderStatus;}}