国产自产第一-国产自产对白一区-国产自产精品-国产自产区44页-国产自产在线-国产自产自拍-国产自产自拍视频-国产自精品

金喜正规买球

工作流的實現(在Ruby on Rails環境下)

轉帖|其它|編輯:郝浩|2009-02-09 11:33:47.000|閱讀 3515 次

概述:工作流是企業開發中不可或缺的一個重要組件。有了工作流,客戶需求的實現速度將大大提高,同時兼顧到開發效率,靈活性。Java領域已經有了多個穩定的工作流,成了Java占領企業級開發的有力助手。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

  工作流是企業開發中不可或缺的一個重要組件。有了工作流,客戶需求的實現速度將大大提高,同時兼顧到開發效率,靈活性。Java領域已經有了多個穩定的工作流,成了Java占領企業級開發的有力助手。但在ROR領域,目前還沒有出色的工作流出現。RubyForge上有一些工作流的項目,但仔細看下,都是針對Java工作流的移植,而且達不到可以實用的程度。面對這個現狀,我在2006年自己開發了一個小型Ruby工作流,雖然代碼量小,但是實用性卻不錯,對于一些真實的使用案例能夠輕松勝任,也有力的支撐著我繼續向ROR道路前行。

  下面介紹我的工作流是怎么實現的。

  用VC寫一個工作流設計器,這個小軟件功能比較簡單,包含一些簡單符號的繪圖及拖拽,比如開始、結束、狀態、流轉。對于每個狀態可以設置權限,對于每個流轉可以設置條件。我在工作流領域研究的不是很深,開發這個設計器就以實用性為原則,沒有實現的特別復雜。在能夠實現用戶需求的基礎上怎么簡單怎么做。

點擊查看大圖

文件保存為xml格式

Xml代碼
<?xml version="1.0" encoding="gb2312" ?> 
<workflow> 
    <start right="" leave="" enter="@form.a2 = @user.truename&#x0D;&#x0A;@form.c2 = @user.department.name" x1="97" y1="156" x2="247" y2="279" /> 
    <end right="行政歸檔" x1="969" y1="148" x2="1129" y2="285" enter="" /> 
    <state name="部門經理審批" right="領導" enter="" leave="" x1="343" y1="179" x2="453" y2="253" /> 
    <state name="總經理審批" right="經理審批" enter="" leave="" x1="566" y1="34" x2="668" y2="98" /> 
    <state name="行政審批" right="行政審批" enter="" leave="" x1="717" y1="191" x2="870" y2="244" /> 
    <trasit name="" condition="" from="開始" to="部門經理審批" /> 
    <trasit name="大于等于3天" condition="@form.b5!=nil &amp;&amp; @form.b5 &gt;=3" from="部門經理審批" to="總經理審批" /> 
    <trasit name="" condition="@form.b5 == nil || @form.b5 &lt;3" from="部門經理審批" to="行政審批" /> 
    <trasit name="" condition="" from="總經理審批" to="行政審批" /> 
    <trasit name="" condition="" from="行政審批" to="結束" /> 
</workflow> 

<?xml version="1.0" encoding="gb2312" ?>
<workflow>
    <start right="" leave="" enter="@form.a2 = @user.truename&#x0D;&#x0A;@form.c2 = @user.department.name" x1="97" y1="156" x2="247" y2="279" />
    <end right="行政歸檔" x1="969" y1="148" x2="1129" y2="285" enter="" />
    <state name="部門經理審批" right="領導" enter="" leave="" x1="343" y1="179" x2="453" y2="253" />
    <state name="總經理審批" right="經理審批" enter="" leave="" x1="566" y1="34" x2="668" y2="98" />
    <state name="行政審批" right="行政審批" enter="" leave="" x1="717" y1="191" x2="870" y2="244" />
    <trasit name="" condition="" from="開始" to="部門經理審批" />
    <trasit name="大于等于3天" condition="@form.b5!=nil &amp;&amp; @form.b5 &gt;=3" from="部門經理審批" to="總經理審批" />
    <trasit name="" condition="@form.b5 == nil || @form.b5 &lt;3" from="部門經理審批" to="行政審批" />
    <trasit name="" condition="" from="總經理審批" to="行政審批" />
    <trasit name="" condition="" from="行政審批" to="結束" />
</workflow>

  然后將這個文件發布到系統上,由Ruby來解析這個工作流,解析工作流的Ruby代碼(放在lib目錄下)如下:

Ruby代碼
#Flow.rb  
 
require 'rexml/document' 
require "State" 
require "Trasit" 
require "Flow" 
require "pp" 
 
include REXML  
 
class Flow   
  attr_accessor :name, :publish_time 
  attr_reader :trasits, :states 
  def initialize(name, xmlstr, publish_time)  
    @publish_time = publish_time  
    @name = name  
      
    #存放所有狀態,包括開始狀態和結束,開始狀態放在第一個,結束狀態放在最后  
    @states = Array.new 
    @trasits = Array.new 
      
    #載入XML文檔  
    doc = Document.new(xmlstr)  
      
    #開始解析doc文檔  
    root = doc.root  
      
    #解析開始狀態節點  
    root.elements.each("start") {|element|  
      start = State.start  
      start.name = "開始" 
      start.enter = element.attributes["enter"].gbk  
      start.leave = element.attributes["leave"].gbk  
      start.right = element.attributes["right"].gbk  
      start.x1 = element.attributes["x1"].to_i  
      start.x2 = element.attributes["x2"].to_i  
      start.y1 = element.attributes["y1"].to_i  
      start.y2 = element.attributes["y2"].to_i  
      @states << start  
      break 
    }  
      
    #解析所有狀態節點  
    root.elements.each("state") {|element|  
      state = State.new 
      state.name = element.attributes["name"].gbk  
      state.right = element.attributes["right"].gbk  
      state.enter = element.attributes["enter"].gbk  
      state.leave = element.attributes["leave"].gbk  
      state.x1 = element.attributes["x1"].to_i  
      state.x2 = element.attributes["x2"].to_i  
      state.y1 = element.attributes["y1"].to_i  
      state.y2 = element.attributes["y2"].to_i  
      @states << state  
    }  
      
    #解析結束狀態節點  
    root.elements.each("end") {|element|  
      end_node = State.new 
      end_node.name = "結束" 
      end_node.right = element.attributes["right"].gbk  
      end_node.enter = element.attributes["enter"].gbk  
      end_node.x1 = element.attributes["x1"].to_i  
      end_node.x2 = element.attributes["x2"].to_i  
      end_node.y1 = element.attributes["y1"].to_i  
      end_node.y2 = element.attributes["y2"].to_i  
        
      @states << end_node  
    }  
    #解析所有流轉  
    root.elements.each("trasit") {|element|  
      from_name = element.attributes["from"].gbk  
      to_name = element.attributes["to"].gbk  
          
      for state in @states 
        if state.name == from_name  
          from_node = state  
        end 
        if state.name == to_name  
          to_node = state  
        end 
      end         
          
      trasit = Trasit.new(from_node, to_node)  
      trasit.name = element.attributes["name"].gbk  
      trasit.condition = element.attributes["condition"].gbk  
          
      from_node.trasits << trasit  
      to_node.guest_trasits << trasit  
      @trasits << trasit    
    }  
  end 
    
  def start  
    @states[0]  
  end 
    
  def get_state(name)  
    for state in @states 
      return state if state.name == name  
    end 
    nil 
  end 
    
end 

#Flow.rb

require 'rexml/document'
require "State"
require "Trasit"
require "Flow"
require "pp"[SPAN]

include REXML

class Flow
  attr_accessor :name, :publish_time
  attr_reader :trasits, :states
  def initialize(name, xmlstr, publish_time)
    @publish_time = publish_time
    @name = name
   
    #存放所有狀態,包括開始狀態和結束,開始狀態放在第一個,結束狀態放在最后
    @states = Array.new
    @trasits = Array.new
   
    #載入XML文檔
    doc = Document.new(xmlstr)
   
    #開始解析doc文檔
    root = doc.root
   
    #解析開始狀態節點
    root.elements.each("start") {|element|
      start = State.start
      start.name = "開始"
      start.enter = element.attributes["enter"].gbk
      start.leave = element.attributes["leave"].gbk
      start.right = element.attributes["right"].gbk
      start.x1 = element.attributes["x1"].to_i
      start.x2 = element.attributes["x2"].to_i
      start.y1 = element.attributes["y1"].to_i
      start.y2 = element.attributes["y2"].to_i
      @states << start
      break
    }
   
    #解析所有狀態節點
    root.elements.each("state") {|element|
      state = State.new
      state.name = element.attributes["name"].gbk
      state.right = element.attributes["right"].gbk
      state.enter = element.attributes["enter"].gbk
      state.leave = element.attributes["leave"].gbk
      state.x1 = element.attributes["x1"].to_i
      state.x2 = element.attributes["x2"].to_i
      state.y1 = element.attributes["y1"].to_i
      state.y2 = element.attributes["y2"].to_i
      @states << state
    }
   
    #解析結束狀態節點
    root.elements.each("end") {|element|
      end_node = State.new
      end_node.name = "結束"
      end_node.right = element.attributes["right"].gbk
      end_node.enter = element.attributes["enter"].gbk
      end_node.x1 = element.attributes["x1"].to_i
      end_node.x2 = element.attributes["x2"].to_i
      end_node.y1 = element.attributes["y1"].to_i
      end_node.y2 = element.attributes["y2"].to_i
     
      @states << end_node
    }
    #解析所有流轉
    root.elements.each("trasit") {|element|
      from_name = element.attributes["from"].gbk
      to_name = element.attributes["to"].gbk
    
      for state in @states
        if state.name == from_name
          from_node = state
        end
        if state.name == to_name
          to_node = state
        end
      end    
    
      trasit = Trasit.new(from_node, to_node)
      trasit.name = element.attributes["name"].gbk
      trasit.condition = element.attributes["condition"].gbk
    
      from_node.trasits << trasit
      to_node.guest_trasits << trasit
      @trasits << trasit 
    }
  end
 
  def start
    @states[0]
  end
 
  def get_state(name)
    for state in @states
      return state if state.name == name
    end
    nil
  end
 
end[SPAN]

Ruby代碼
#FlowMeta.rb  
 
$LOAD_PATH.unshift(File.dirname(__FILE__))  
 
require "Flow" 
require "EncodeUtil" 
 
class FlowMeta  
  class << self 
    def LoadAllFlows()  
      YtLog.info "loading all workflow..." 
      $Workflows.clear  
      flows = YtwgWorkflow.find(:all)  
      for flow in flows  
        #LoadWorkFlow(flow.name, flow.content.sub!('<?xml version="1.0" encoding="gb2312" ?>', ''))  
        LoadWorkFlow(flow.name, flow.content, flow.publish_time)  
      end 
    end 
          
    def LoadWorkFlow(name, str, publish_time=Time.new)  
      YtLog.info name  
      $Workflows[name] = Flow.new(name, str, publish_time)  
    end 
          
    def Remove(name)  
      $Workflows.delete(name)  
    end 
  end 
end 

#FlowMeta.rb

$LOAD_PATH.unshift(File.dirname(__FILE__))

require "Flow"
require "EncodeUtil"

class FlowMeta
  class << self
    def LoadAllFlows()
      YtLog.info "loading all workflow..."
      $Workflows.clear
      flows = YtwgWorkflow.find(:all)
      for flow in flows
        #LoadWorkFlow(flow.name, flow.content.sub!('<?xml version="1.0" encoding="gb2312" ?>', ''))
        LoadWorkFlow(flow.name, flow.content, flow.publish_time)
      end
    end
  
    def LoadWorkFlow(name, str, publish_time=Time.new)
      YtLog.info name
      $Workflows[name] = Flow.new(name, str, publish_time)
    end
  
    def Remove(name)
      $Workflows.delete(name)
    end
  end
end

Ruby代碼
#State.rb  
 
##工作流中的狀態  
 
require "Trasit" 
class State  
  attr_accessor :name, :leave, :enter, :right, :trasits, :guest_trasits 
  attr_accessor :x1, :x2, :y1, :y2 
  def initialize  
    #從此狀態出發的流轉  
    @trasits = Array.new 
      
    #從其他狀態到此狀態的流轉  
    @guest_trasits = Array.new 
  end 
      
  def trasits  
    @trasits 
  end 
      
  def add_trasit(trasit)  
    @trasits << trasit  
  end 
    
  def add_guest_trasit(trasit)  
    @guest_trasits << trasit  
  end 
      
  class << self 
    def start  
      start = State.new 
      start.name = "開始" 
      start  
    end 
  end 
end 

#State.rb

##工作流中的狀態

require "Trasit"
class State
  attr_accessor :name, :leave, :enter, :right, :trasits, :guest_trasits
  attr_accessor :x1, :x2, :y1, :y2
  def initialize
    #從此狀態出發的流轉
    @trasits = Array.new
   
    #從其他狀態到此狀態的流轉
    @guest_trasits = Array.new
  end
 
  def trasits
    @trasits
  end
 
  def add_trasit(trasit)
    @trasits << trasit
  end
 
  def add_guest_trasit(trasit)
    @guest_trasits << trasit
  end
 
  class << self
    def start
      start = State.new
      start.name = "開始"
      start
    end
  end
end

Ruby代碼
#Trasit.rb  
 
class Trasit  
    attr_accessor :condition, :name, :from, :to 
      
    #新建流轉類,from,to均為State類對象  
    def initialize(from, to)  
        @from = from  
        @to = to  
    end 
end 

#Trasit.rb

class Trasit
 attr_accessor :condition, :name, :from, :to
 
 #新建流轉類,from,to均為State類對象
 def initialize(from, to)
  @from = from
  @to = to
 end
end

  OK,解析工作流的任務就算完成了,250行Ruby代碼,一個小型的,可定制化程度高的工作流引擎就算是完成了。下面我們就看怎么使用這個工作流了。

  工作流引擎完成以后下面自然而然就會想到用戶在每個流程點上看到的表單界面從何而來?對于這個功能,我專門寫了表單設計器和表單解析引擎,表單解析引擎可將xml格式的表單翻譯為html格式的表單。這個表單組件更為復雜,超出了本討論的范圍,暫且先不說了。[SPAN]

  下面說一下數據庫表,為了使用這個工作流引擎需要建立3張表:

Sql代碼
//工作流表  
CREATE TABLE `ytwg_workflow` (  
  `id` int(11) NOT NULL auto_increment,  
  `name` varchar(100) default NULL,          //工作流名稱  
  `content` longtext,                                   //工作流內容,設計器保存的xml文件  
  `publish_time` datetime default NULL,     //發布時間  
  `formtable` varchar(30) default NULL,      //表單數據存放的表格,每個工作流建立后會單獨建立數據庫表,存放表單數據  
  `position` int(11) default NULL,                 //排序位置  
  `reserved1` varchar(100) default NULL,      
  `reserved2` varchar(100) default NULL,  
  `reserved3` varchar(100) default NULL,  
  `reserved4` varchar(100) default NULL,  
  `reserved5` varchar(100) default NULL,  
  `reserved6` varchar(100) default NULL,  
  PRIMARY KEY  (`id`)  
)   
 
//工作流狀態表單界面表  
CREATE TABLE `ytwg_stateinterface` (  
  `id` int(11) NOT NULL auto_increment,  
  `flowid` int(11) default NULL,                     //工作流id  
  `name` varchar(100) default NULL,            //狀態名稱  
  `content` longtext,                                     //表單,表單設計器保存的xml文件  
  `publish_time` datetime default NULL,       //發布時間  
  `reserved1` varchar(100) default NULL,       
  `reserved2` varchar(100) default NULL,  
  `reserved3` varchar(100) default NULL,  
  `reserved4` varchar(100) default NULL,  
  `reserved5` varchar(100) default NULL,  
  `reserved6` varchar(100) default NULL,  
  PRIMARY KEY  (`id`)  
)   
 
//表單處理記錄表  
CREATE TABLE `ytwg_formhistory` (  
  `id` int(11) NOT NULL auto_increment,  
  `userid` int(11) default NULL,                    //用戶id  
  `flowid` int(11) default NULL,                     //工作流id  
  `formid` int(11) default NULL,                     //表單id  
  `process_time` datetime default NULL,      //處理時間  
  PRIMARY KEY  (`id`)  
)  

//工作流表
CREATE TABLE `ytwg_workflow` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(100) default NULL,          //工作流名稱
  `content` longtext,                                   //工作流內容,設計器保存的xml文件
  `publish_time` datetime default NULL,     //發布時間
  `formtable` varchar(30) default NULL,      //表單數據存放的表格,每個工作流建立后會單獨建立數據庫表,存放表單數據
  `position` int(11) default NULL,                 //排序位置
  `reserved1` varchar(100) default NULL,   
  `reserved2` varchar(100) default NULL,
  `reserved3` varchar(100) default NULL,
  `reserved4` varchar(100) default NULL,
  `reserved5` varchar(100) default NULL,
  `reserved6` varchar(100) default NULL,
  PRIMARY KEY  (`id`)
)

//工作流狀態表單界面表
CREATE TABLE `ytwg_stateinterface` (
  `id` int(11) NOT NULL auto_increment,
  `flowid` int(11) default NULL,                     //工作流id
  `name` varchar(100) default NULL,            //狀態名稱
  `content` longtext,                                     //表單,表單設計器保存的xml文件
  `publish_time` datetime default NULL,       //發布時間
  `reserved1` varchar(100) default NULL,    
  `reserved2` varchar(100) default NULL,
  `reserved3` varchar(100) default NULL,
  `reserved4` varchar(100) default NULL,
  `reserved5` varchar(100) default NULL,
  `reserved6` varchar(100) default NULL,
  PRIMARY KEY  (`id`)
)

//表單處理記錄表
CREATE TABLE `ytwg_formhistory` (
  `id` int(11) NOT NULL auto_increment,
  `userid` int(11) default NULL,                    //用戶id
  `flowid` int(11) default NULL,                     //工作流id
  `formid` int(11) default NULL,                     //表單id
  `process_time` datetime default NULL,      //處理時間
  PRIMARY KEY  (`id`)
)

  每發布一個工作流后,跟著要為這個工作流動態創建數據庫表,存放表單數據。我是通過向這個工作流發布一個表單模板來動態創建表的。

  下面看如何使用工作流:

Ruby代碼
#發布工作流    
def create  
    stream = params[:ytwg_workflow][:content]  
    content = stream.read  
    name = stream.original_filename[0, stream.original_filename.index(".")]  
    if YtwgWorkflow.find(:all, :conditions=>"name='#{name}'").size > 0  
      flash[:error] = "存在同名工作流,上傳失敗" 
      render :action => 'new' 
      return 
    end 
      
    @ytwg_workflow = YtwgWorkflow.new()  
    @ytwg_workflow.name = name  
    begin 
      @ytwg_workflow.content = content  
    rescue 
      flash[:error] = "上傳文件非法" 
      render :action => 'new' 
    end 
    @ytwg_workflow.publish_time = Time.new 
    if @ytwg_workflow.save  
      FlowMeta.LoadWorkFlow(@ytwg_workflow.name, @ytwg_workflow.content.sub!('<?xml version="1.0" encoding="gb2312" ?>', ''))  
      flash[:notice] = '添加工作流成功' 
      redirect_to :action => 'list' 
    else 
      flash[:error] = "添加工作流失敗" 
      render :action => 'new' 
    end 
  end 
 
  #上傳表定義模板,根據這個表單動態生成數據庫表  
  def upload_formtable  
    stream = params[:content]  
    content = stream.read  
    helper = XMLHelper.new 
    helper.ReadFromString(content)  
    formtable = helper.tables[0]  
    if !formtable  
      flash[:notice] = "上傳文件格式錯誤" 
      redirect_to :action=>"listinterface" 
      return 
    end 
    conn = ActiveRecord::Base.connection  
    conn.create_table "ytwg_#{formtable.GetTableID}", :primary_key=>:id do |t|  
      t.column "userid", :integer         #流程發起人的id  
      t.column "flowid", :integer         #工作流的id  
      Integer(0).upto(formtable.GetRowCount()-1) do |row|  
        next if formtable.IsEmptyRow(row)  
        Integer(0).upto(formtable.GetColumnCount()-1) do |col|  
          next if formtable.IsEmptyCol(col)  
          cell = formtable.GetCell(row, col)  
          next if !cell.IsStore || !cell.IsEffective  
          next if formtable.GetCellDBFieldName(row, col).downcase == "id" 
               
          t.column "_state", :string, :limit=>30  
          t.column "_madetime", :datetime 
          t.column "_lastprocesstime", :datetime 
          if cell.GetDataType == 1    #CCell.CtNumeric  
            t.column formtable.GetCellDBFieldName(row, col).downcase, :float 
          elsif cell.GetDataType == 0    #CCell.CtText                 
            if cell.IsCheckWidth()  
              t.column formtable.GetCellDBFieldName(row, col).downcase, :string, {:limit=>cell.GetTextWidth}  
            else 
              t.column formtable.GetCellDBFieldName(row, col).downcase, :string, {:limit=>100}  
            end       
          elsif cell.GetDataType == 3 #CCell.CtDate  
            t.column formtable.GetCellDBFieldName(row, col).downcase, :datetime 
          end              
        end 
      end 
    end 
      
    flow = YtwgWorkflow.find(params[:id])  
    flow.formtable = formtable.GetTableID  
    flow.save  
      
    flash[:notice] = "建表成功" 
    redirect_to :action=>"listinterface" 
  end 
 
  #上傳狀態節點的表單界面  
  def uploadinterface  
    stream = params[:content]  
    content = stream.read  
      
    interfaces = YtwgStateinterface.find(:all, :conditions=>"flowid = #{params[:id]} and name = '#{params[:name]}'")  
    if interfaces.size > 0  
      interface = interfaces[0]  
      interface.publish_time = Time.new 
    else 
      interface = YtwgStateinterface.new 
      interface.flowid = params[:id]  
      interface.name = params[:name]  
      interface.publish_time = Time.new 
    end 
    interface.content = content  #EncodeUtil.change("UTF-8", "GB2312", content)  
    interface.save  
    flash[:notice] = "上傳狀態界面成功" 
    redirect_to :action=>"listinterface" 
  end 
 
  #用戶點擊某一工作流連接后,查看自己已經發起的工作流。  
  def show_form  
    @flow = YtwgWorkflow.find(params[:flowid])  
    YtwgForm.set_table_name("ytwg_" + @flow.formtable)  
    YtwgForm.reset_column_information()   
    form = YtwgForm.find(params[:formid])  
       
    interfaces = YtwgStateinterface.find(:all, :conditions=>"flowid=#{params[:flowid]} and name='#{form._state.split(',')[0]}'")  
    if interfaces.size > 0  
      helper = XMLHelper.new 
      helper.ReadFromString(interfaces[0].content)  
      @style = helper.StyleToHTML(helper.tables[0])  
      @html = helper.TableToEditHTML(helper.tables[0], helper.dictionFactory,   
        {:record=>form, :encoding=>"gb2312"})  
      @historys = YtwgFormhistory.find(:all, :conditions=>"flowid=#{params[:flowid]} and formid = #{params[:formid]}")  
    else 
      render :text=>"沒有上傳工作流界面" 
    end 
  end 
 
  #用戶發起或者審批一個表單  
  def write_form  
    @flow = YtwgWorkflow.find(params[:flowid])  
    YtwgForm.set_table_name("ytwg_" + @flow.formtable)  
    YtwgForm.reset_column_information()   
 
    if params[:formid]  
      form_record = YtwgForm.find(params[:formid])  
      state_name = form_record._state  
    else 
      form_record = YtwgForm.new 
      form_record._state = '開始' 
      state_name = form_record._state  
    end 
      
    states = []  
    for state in form_record._state.split(',')  
      states << state if checkright(state)  
    end 
    if states.size > 0  
      state_name = states[0]  
    else 
      state_name = '開始' 
    end 
 
    process = FlowProcess.new($Workflows[@flow.name], form_record, state_name)  
    process.user = session[:user]  
    process.signal_enter  
      
    interfaces = YtwgStateinterface.find(:all, :conditions=>"flowid=#{@flow.id} and name = '#{state_name}'")  
    if interfaces.size ==0  
      render :text=>"沒有上傳開始界面" 
      return 
    end 
    @start_interface = interfaces[0]  
    helper = XMLHelper.new 
    helper.ReadFromString(@start_interface.content)  
    @style = helper.StyleToHTML(helper.tables[0])  
    @html = helper.TableToEditHTML(helper.tables[0], helper.dictionFactory,   
      {:record=>form_record,:encoding=>"gb2312", :script=>helper.script})  
    @historys = YtwgFormhistory.find(:all, :conditions=>"flowid=#{params[:flowid]} and formid = #{params[:formid]}") if params[:formid]  
  end 
 
  #用戶寫完一個表單后點擊提交  
  def update_form  
    @flow = YtwgWorkflow.find(params[:id])  
    YtwgForm.set_table_name("ytwg_" + @flow.formtable)  
    YtwgForm.reset_column_information()   
    if params[:formid]  
      form = YtwgForm.find(params[:formid])  
      form.update_attributes(params[@flow.formtable])  
        
      states = []  
      for state in form._state.split(',')  
        states << state if check_state_right(@flow.name, state)  
      end 
      state_name = states[0]  
    else 
      form = YtwgForm.new(params[@flow.formtable])  
      form._madetime = Time.new 
      form._state = '開始' 
      state_name = form._state  
      form.userid = session[:user].id  
      form.flowid = @flow.id  
    end 
 
    form._lastprocesstime = Time.new      
    process = FlowProcess.new($Workflows[@flow.name], form, state_name)  
    process.user = session[:user]  
    process.signal_leave  
      
    history = YtwgFormhistory.new 
    history.userid = session[:user].id  
    history.flowid = @flow.id  
    history.formid = form.id  
    history.process_time = Time.new 
    history.save  
    redirect_to :action=>'myform', :id=>params[:id]  
  end 
 
 #等待我處理的流程  
  def show_waiting_form  
    @forms = get_wait_form(params[:id])  
    render :layout=>false 
  end 
 
 #獲得某一種單據中等待當前登陸者審批的  
  def get_wait_form(flowid)  
    forms = []  
    flow = YtwgWorkflow.find(flowid)  
    if !flow.formtable || flow.formtable.size==0  
      return forms  
    end 
    YtwgForm.set_table_name("ytwg_" + flow.formtable)  
    YtwgForm.reset_column_information()   
    for state in $Workflows[flow.name].states  
      next if state.name == "結束" 
        
      conditions = []  
      conditions << "_state='#{state.name}'" 
        
      #如果可以從多個狀態轉移到這個狀態,則等待所有狀態都執行完此狀態才可以執行  
      if state.guest_trasits.size == 1      #只可以從一個狀態轉到這里  
        conditions << " _state like '%,#{state.name}'" 
        conditions << "_state like '#{state.name},%'" 
      end 
 
      if state.right == "領導" 
        all_forms = YtwgForm.find(:all, :conditions=>conditions.join(' or '), :order=>"id desc")  
        for form in all_forms  
          forms << form if YtwgUser.find(form.userid).department.leader_id == session[:user].id rescue nil 
        end 
      else 
        for right in state.right.split(',')  
          if checkright(right)  
            forms += YtwgForm.find(:all, :conditions=>conditions.join(' or '), :order=>"id desc")  
          end 
        end 
      end 
    end 
    forms.uniq!  
    return forms  
  end 

#發布工作流 
def create
    stream = params[:ytwg_workflow][:content]
    content = stream.read
    name = stream.original_filename[0, stream.original_filename.index(".")]
    if YtwgWorkflow.find(:all, :conditions=>"name='#{name}'").size > 0
      flash[:error] = "存在同名工作流,上傳失敗"
      render :action => 'new'
      return
    end
   
    @ytwg_workflow = YtwgWorkflow.new()
    @ytwg_workflow.name = name
    begin
      @ytwg_workflow.content = content
    rescue
      flash[:error] = "上傳文件非法"
      render :action => 'new'
    end
    @ytwg_workflow.publish_time = Time.new
    if @ytwg_workflow.save
      FlowMeta.LoadWorkFlow(@ytwg_workflow.name, @ytwg_workflow.content.sub!('<?xml version="1.0" encoding="gb2312" ?>', ''))
      flash[:notice] = '添加工作流成功'
      redirect_to :action => 'list'
    else
      flash[:error] = "添加工作流失敗"
      render :action => 'new'
    end
  end

  #上傳表定義模板,根據這個表單動態生成數據庫表
  def upload_formtable
    stream = params[:content]
    content = stream.read
    helper = XMLHelper.new
    helper.ReadFromString(content)
    formtable = helper.tables[0]
    if !formtable
      flash[:notice] = "上傳文件格式錯誤"
      redirect_to :action=>"listinterface"
      return
    end
    conn = ActiveRecord::Base.connection
    conn.create_table "ytwg_#{formtable.GetTableID}", :primary_key=>:id do |t|
      t.column "userid", :integer         #流程發起人的id
      t.column "flowid", :integer         #工作流的id
      Integer(0).upto(formtable.GetRowCount()-1) do |row|
        next if formtable.IsEmptyRow(row)
        Integer(0).upto(formtable.GetColumnCount()-1) do |col|
          next if formtable.IsEmptyCol(col)
          cell = formtable.GetCell(row, col)
          next if !cell.IsStore || !cell.IsEffective
          next if formtable.GetCellDBFieldName(row, col).downcase == "id"
         
          t.column "_state", :string, :limit=>30
          t.column "_madetime", :datetime
          t.column "_lastprocesstime", :datetime
          if cell.GetDataType == 1    #CCell.CtNumeric
            t.column formtable.GetCellDBFieldName(row, col).downcase, :float
          elsif cell.GetDataType == 0    #CCell.CtText              
            if cell.IsCheckWidth()
              t.column formtable.GetCellDBFieldName(row, col).downcase, :string, {:limit=>cell.GetTextWidth}
            else
              t.column formtable.GetCellDBFieldName(row, col).downcase, :string, {:limit=>100}
            end    
          elsif cell.GetDataType == 3 #CCell.CtDate
            t.column formtable.GetCellDBFieldName(row, col).downcase, :datetime
          end          
        end
      end
    end
   
    flow = YtwgWorkflow.find(params[:id])
    flow.formtable = formtable.GetTableID
    flow.save
   
    flash[:notice] = "建表成功"
    redirect_to :action=>"listinterface"
  end[SPAN]

  #上傳狀態節點的表單界面
  def uploadinterface
    stream = params[:content]
    content = stream.read
   
    interfaces = YtwgStateinterface.find(:all, :conditions=>"flowid = #{params[:id]} and name = '#{params[:name]}'")
    if interfaces.size > 0
      interface = interfaces[0]
      interface.publish_time = Time.new
    else
      interface = YtwgStateinterface.new
      interface.flowid = params[:id]
      interface.name = params[:name]
      interface.publish_time = Time.new
    end
    interface.content = content  #EncodeUtil.change("UTF-8", "GB2312", content)
    interface.save
    flash[:notice] = "上傳狀態界面成功"
    redirect_to :action=>"listinterface"
  end

  #用戶點擊某一工作流連接后,查看自己已經發起的工作流。
  def show_form
    @flow = YtwgWorkflow.find(params[:flowid])
    YtwgForm.set_table_name("ytwg_" + @flow.formtable)
    YtwgForm.reset_column_information()
    form = YtwgForm.find(params[:formid])
    
    interfaces = YtwgStateinterface.find(:all, :conditions=>"flowid=#{params[:flowid]} and name='#{form._state.split(',')[0]}'")
    if interfaces.size > 0
      helper = XMLHelper.new
      helper.ReadFromString(interfaces[0].content)
      @style = helper.StyleToHTML(helper.tables[0])
      @html = helper.TableToEditHTML(helper.tables[0], helper.dictionFactory,
        {:record=>form, :encoding=>"gb2312"})
      @historys = YtwgFormhistory.find(:all, :conditions=>"flowid=#{params[:flowid]} and formid = #{params[:formid]}")
    else
      render :text=>"沒有上傳工作流界面"
    end
  end

  #用戶發起或者審批一個表單
  def write_form
    @flow = YtwgWorkflow.find(params[:flowid])
    YtwgForm.set_table_name("ytwg_" + @flow.formtable)
 &nbsp;  YtwgForm.reset_column_information()

    if params[:formid]
      form_record = YtwgForm.find(params[:formid])
      state_name = form_record._state
    else
      form_record = YtwgForm.new
      form_record._state = '開始'
      state_name = form_record._state
    end
   
    states = []
    for state in form_record._state.split(',')
      states << state if checkright(state)
    end
    if states.size > 0
      state_name = states[0]
    else
      state_name = '開始'
    end

    process = FlowProcess.new($Workflows[@flow.name], form_record, state_name)
    process.user = session[:user]
    process.signal_enter
   
    interfaces = YtwgStateinterface.find(:all, :conditions=>"flowid=#{@flow.id} and name = '#{state_name}'")
    if interfaces.size ==0
      render :text=>"沒有上傳開始界面"
      return
    end
    @start_interface = interfaces[0]
    helper = XMLHelper.new
    helper.ReadFromString(@start_interface.content)
    @style = helper.StyleToHTML(helper.tables[0])
    @html = helper.TableToEditHTML(helper.tables[0], helper.dictionFactory,
      {:record=>form_record,:encoding=>"gb2312", :script=>helper.script})
    @historys = YtwgFormhistory.find(:all, :conditions=>"flowid=#{params[:flowid]} and formid = #{params[:formid]}") if params[:formid]
  end

  #用戶寫完一個表單后點擊提交
  def update_form
    @flow = YtwgWorkflow.find(params[:id])
    YtwgForm.set_table_name("ytwg_" + @flow.formtable)
    YtwgForm.reset_column_information()
    if params[:formid]
      form = YtwgForm.find(params[:formid])
      form.update_attributes(params[@flow.formtable])
     
      states = []
      for state in form._state.split(',')
        states << state if check_state_right(@flow.name, state)
      end
      state_name = states[0]
    else
      form = YtwgForm.new(params[@flow.formtable])
      form._madetime = Time.new
      form._state = '開始'
      state_name = form._state
      form.userid = session[:user].id
      form.flowid = @flow.id
    end

    form._lastprocesstime = Time.new   
    process = FlowProcess.new($Workflows[@flow.name], form, state_name)
    process.user = session[:user]
    process.signal_leave
   
    history = YtwgFormhistory.new
    history.userid = session[:user].id
    history.flowid = @flow.id
    history.formid = form.id
    history.process_time = Time.new
    history.save
    redirect_to :action=>'myform', :id=>params[:id]
  end

 #等待我處理的流程
  def show_waiting_form
    @forms = get_wait_form(params[:id])
    render :layout=>false
  end

 #獲得某一種單據中等待當前登陸者審批的
  def get_wait_form(flowid)
    forms = []
    flow = YtwgWorkflow.find(flowid)
    if !flow.formtable || flow.formtable.size==0
      return forms
    end
    YtwgForm.set_table_name("ytwg_" + flow.formtable)
    YtwgForm.reset_column_information()
    for state in $Workflows[flow.name].states
      next if state.name == "結束"
     
      conditions = []
      conditions << "_state='#{state.name}'"
     
      #如果可以從多個狀態轉移到這個狀態,則等待所有狀態都執行完此狀態才可以執行
      if state.guest_trasits.size == 1      #只可以從一個狀態轉到這里
        conditions << " _state like '%,#{state.name}'"
        conditions << "_state like '#{state.name},%'"
      end

      if state.right == "領導"
        all_forms = YtwgForm.find(:all, :conditions=>conditions.join(' or '), :order=>"id desc")
        for form in all_forms
          forms << form if YtwgUser.find(form.userid).department.leader_id == session[:user].id rescue nil
        end
      else
        for right in state.right.split(',')
          if checkright(right)
            forms += YtwgForm.find(:all, :conditions=>conditions.join(' or '), :order=>"id desc")
          end
        end
      end
    end
    forms.uniq!
    return forms
  end

有了上面這些最核心的函數后,如何使用這個工作流基本就算明白了。除此之外還有許多附加的小功能需要去實現,比如導出Excel,導出PDF,在網頁上展示工作流的流程圖(我用VML實現)。以下是請假登記表的表單顯示界面:

點擊查看大圖

  這個工作流的應用現狀:

  目前這個工作流還沒有商用,只有一個應用場景。前幾個月我們公司買了一套金和OA,在銷售員滿嘴跑火車的吹噓下我們經理花9800買了,后來實施的時候發現金和的工作流根本無法使用。一個簡單的請假申請單都無法實現自定義表單和流程,無奈之下我基于我的工作流組件,快速開發了一套OA,幾天之后就上線,然后邊用邊完善,一個月以后就很少再動了。目前公司對這套OA還是比較滿意的。雖然我的OA比國內的優秀OA產品還有很大差距,但是這套工作流組件至少還是能夠勝任大多數場合,對于尚不能滿足的場合還可以靈活擴展。


標簽:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn

文章轉載自:JavaEye

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
相關產品
控件
  • 產品功能:工作流
  • 源 碼:非開源
  • 產品編號:10581
  • 當前版本:v3.1 [銷售以商家最新版為準,如需其他版本,請來電咨詢]
  • 開 發 商: ASPOSE 正式授權
  • ">Aspose.Workflow

    提供了一個功能強大的工作流引擎以及一整套符合業界標準的工作流對象

    控件
  • 產品功能:工作流
  • 源 碼:非開源
  • 產品編號:10721
  • 當前版本:v2004 r2 [銷售以商家最新版為準,如需其他版本,請來電咨詢]
  • 開 發 商: Schneider Electric Software, LLC 正式授權
  • ">Skelta Workflow.NET

    建立在.NET、XML以及Web services技術之上的業務流程管理工作流軟件,同時也是世界上第一個可嵌入的工作流引擎

    控件
  • 產品功能:UI界面
  • 源 碼:非開源
  • 產品編號:11483
  • 當前版本:v2.15 [銷售以商家最新版為準,如需其他版本,請來電咨詢]
  • 開 發 商: tmssoftware 正式授權
  • ">TMS Workflow Studio

    一個Delphi/ C ++ Builder VCL框架的業務流程管理(BPM)控件,為你的應用程序添加工作流和BPM功能

    控件
  • 產品功能:工作流
  • 源 碼:非開源
  • 產品編號:11878
  • 當前版本:2014 R2 SP2 [銷售以商家最新版為準,如需其他版本,請來電咨詢]
  • 開 發 商: Schneider Electric Software, LLC 正式授權
  • ">Wonderware Skelta BPM

    全球第一且功能強大的.NET企業級業務流程管理和高級工作流解決方案

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    主站蜘蛛池模板: 日韩一中文字幕 | 岛国精品在线观看 | 婷婷午夜| 国产高清区 | 尤物在线观看视频 | 精品免费囯产一区 | 精品乱码一区二区三区 | 日韩电影限制级 | 日本三级2025 | 91av网址 | 国产在线观看三级 | 精品日韩一区 | 三级在线观看国产中文 | 日韩亚州欧美中 | 免费a一级 | 成人免费观看一区二区 | 日韩v片 | 成人影视 | 玖玖精品电影网 | 国产欧美久 | 国内自拍一区 | 成人在线三级片 | 妊娠孕妇一二三区视频 | 国产a观看免费完整版 | 国产69| 人妖无码 | 中文字幕丝袜 | 成人深夜福利在线观看 | 在线视频福利导航 | 免费看A片的网址 | 尤物视频在线 | 日韩欧美激情综合网 | 国产女主播一区 | 日韩国产午夜在线精品 | 福利姬在线看 | 日本免费不卡一区 | 日韩精品成人视频 | 自拍偷拍网 | 国产午夜高清 | 国产白袜脚足j棉袜 | 日韩三级片一区二区 | 国产欧美婬乱一区二区 | 日韩免费一区 | 欧美日韩精选 | 国产成人无码视频 | av色综合| 美女十八禁网站 | 日韩综合区 | 尤物国产在线 | 日韩综合视频在线观看 | 麻逗传煤永久播放 | 成人福利影视在线观看 | 爆乳女教师一区二区三 | 国产第一页精品 | 国产乱伦网站 | 97超在线视 | 国产精品美女一区 | 91视频成人| 国产第一页草草 | 国产第九页 | 日韩一区免费视频99 | 激情小说视频图片 | 国产传媒视频网站 | 久久这里都是精品 | 日韩免费自拍 | 三级片第一页 | 亚洲国产成人精 | 97超碰在线免费观看 | 日韩中字无码 | 国产va在线播放 | 日韩欧美伦理 | 五月激情天 | 国产小视频91 | 麻豆精品视频在线观看 | 狼友福利免费在线观看 | 福利姬福利导航 | 一夜七次郎首页视频 | 多p在线 | 日韩在线免费观看视频 | 国产精品亚洲精品 | 老司机专属福利院 | 成人午夜无码福利视频 | 成人精品一区二区 | 华人超碰 | 国产乱国产乱 | 欧美性爱网址大全 | 日韩一区精品视频 | 日韩国产在线观看 | 国产精品自拍偷拍 | 日韩新片网站 | 丁香五月激情网 | 97福利影视 | 丁香综合网 | 午夜成人网站在线 | 永久免费A级毛片 | 日韩在线观看不卡 | 国产美女精品在线 | 国产精品亚洲精品性色 | 日韩女优在线观看 | 三级a片在线观看 | 三级精品手机在线 | 男女激情视频网站 | 三级网站免费看 | 日韩亚洲国产中文 | 日韩免费成人网站 | 亚洲涩涩视频 | 日韩精品精品第一区 | 深夜福利在线视频 | 久草福利在线视频 | 国产盗摄视频在线 | 强奸乱伦一区二区三区 | 三级片在线观看 | 日韩一页| 国产超薄黑色丝 | 国产激情网站在线观看 | 国产cd视频在线播放 | 欧美激情日韩国产绯色 | 国产视频麻豆 | 日韩亚洲制服 | 日韩三区无码 | 四房色播五月 | 日韩亚洲欧美精品综合 | 欧美三区在线 | 亚洲性综合| 狼人狠干 | 毛茸茸的熟女 | 成人大片免费观看国产 | 偷牌第5页 | 欧美视频二区三区 | 97资源网中文字幕 | 91久久人人 | 欧美一区在线看 | 一区二区三区强奸乱伦 | 色播五月婷婷 | 亚洲人一区 | 日韩欧美一区二区三 | 国产a天天免费观看 | 三级中文字幕不卡 | 国产成人三级在线 | 亚洲日韩成人影院 | 日韩精品999 | 午夜影视网 | 日韩美女视频在线播放 | 丝袜美腿视频一区 | 福利狼视频 | 超碰超碰超 | 天堂网ww| 欧美专区一区 | 亚洲国产精品成人综合 | 国产一区二区乱伦 | 日韩欧美一中文在 | 夜夜干夜夜爽 | 国产在线精品国自产拍 | 日韩欧美高清在 | 果冻传媒av| 日韩免费高清专区 | 国产在线麻豆 | 国产美女视频一区 | 国产三级无码在线 | 黄色深夜福利小视频 | 午夜成人电影免费观看 | 调教视频网站 | 国产乱视频 | 久久99国| 深夜激情网| 日韩精品三期 | 日韩影片中文字幕 | 欧美性爱视频大全 | 国产三级看看看 | 深夜福利导航在线观看 | 日韩影片欧美在线素人 | 国产又粗又大又爽又黄 | 人妖综合 | 日日操夜夜爽 | 国产福利姬在线观看 | 黑人免费视频 | 天天操天天碰 | 久草福利在线 | 在线观看日本黄色网址 | 午夜性影院 | 亚洲综合精品国产 | 另类潮喷| 国产嫖妓无套在线播放 | 日韩在线视频导航 | 午夜伦理 | 日韩在线高清 | 国产精品一卡 | 欧美多人性爱视频 | 午夜成人AⅤ在线观看 | 日韩精品在线第二页 | 日韩欧美成综合 | 成人熟女网 | 天堂网一区二区 | 日日不卡 | 成人三级网站在线 | 国产情侣酒店自拍视频 | 日韩色情 | 91精品无码 | 成人国产自拍 | 国产激情第二页 | 国产三级午夜理伦三级 | 国产中文第一页 | 国产成年女黄特黄 | 激情另类文学 | 国产95午夜福利 | 精品三级在线 | A片三级三级三级网站 | 日韩高清在线中文字幕 | 成人A级毛片免费网站 | 国产三级片观看 | 三级无码视频 | 天天干夜夜噜 | 日韩高清大片 | 麻豆国产在线 | 97午夜伦理 | 久久黄色小说 | 成人深夜福利视频网站 | 日韩a级片电影 | 老湿试看| av在线一区二区 | 四虎论坛 | 国产精品自拍网站 | 成人做爰黄片免费 | 一区二区视频免费 | 无码爆乳一区二区三区 | 五月丁香在线视频 | 日韩桃色激情综合 | 欧美性爱第1页 | 人妖在线看免费网站 | 日韩美女片 | 国产性爱电影在线观看 | 超碰欧美 | 国产日韩成人在线 | 蜜桃视频中文字幕 | 97蜜桃123| 黄色A片在线 | 日韩在线播放香蕉五码 | 久草福利站 | 国产刺激对白国产情侣 | 熟妇熟女乱 | 日韩精品欧美激情 | 国产美女一区 | 国产ts人妖在线观看 | 日韩乱码人 | 日本xxxx在线观看 | 91在线日本| 日韩成人av影视 | 男女网站在线观看 | 亚洲九九| 人妖操伪娘 | 日产三级在线观看 | 国产自户一区c | 国产首页 | 日韩免费伦理片 | 日韩无码丝袜 | 午夜成人影视在线 | 日韩亚洲国产精品一区 | 狠狠干天天干 | 福利小导航 | 丝袜中出| 久久不卡国产精品 | 午夜啪视频 | 日韩中文字幕在线亚洲 | 爱豆传媒免费播放 | 国产欧美国 | 日韩在线va中文字幕 | 三级网站免费 | 三级精品乱伦高清 | 丁香婷婷五月综合 | 久久网综合网 | 97免费| 日韩精品3 | 亚洲学生妹av| 女同另类之国产女同 | 91天天综合 | 日韩亚洲欧洲中文版 | 日韩视频福利 | 黄色av网站免费 | 天夫干夜夜操 | 五月婷婷六月丁香在线 | 国产美女精品在线 | 国产91精品18 | 国产8区 | 五月婷婷五月婷婷 | 国产成人无码电影在线 | 日日骚av | 日韩欧美黄 | 精品乱码一区二区三区 | 日韩三级伦理 | 日韩精品欧美色 | 偷拍自拍视频在线观看 | 成人午夜婬片免费观看 | 国产精品一二三 | 日韩午夜看片成人精品 | 日韩免费观看 | 日本.www.色| 成人小说综合网 | 欧美狠狠撸 | 日韩无码高清中文字幕 | 国产又粗又大又黄又爽 | 无码精品产品日韩 | 成人香蕉网 | 91在线影院 | 国产免费一区二区三区 | 日韩激情淫片免费看 | 日屄的视频 | 国产高清a| 成人女同在线观看 | 激情少说视频在线播放 | 久久综合888 | 日韩国产变态另类欧美 | 97精品人人 | 日韩av一区二区区 | 成人午夜婬片免费观看 | 日韩成人动漫第一页 | 成人影院| 日韩一区二区三区av | 日韩色情综合网 | 欧美性爱视频网址 | 成人精品午夜无码免费 | 狼人久久伊人 | 国产偷人妻精品一区 | 午夜黄视频 | 91香蕉导航 | 成人三级免费观看 | 婷婷激情综合网 | 伊人涩涩爱 | 91视频精选 | 三级在线网站 | 日干夜干在线视频 | 五月丁香六月天 | 超碰成人人人操 | 国产人妖兮 | 亚洲精品人成 | 深爱激情婷婷综合基地 | 国产传媒京东 | 另类激情图片 | 狠狠干狠狠插狠狠操 | 夜夜操夜夜| 日韩福利在线 | 成人午夜视频在线观看 | 色五月综合网 | 亲子伦一区二区三区 | 日韩午夜伦y448 | 日韩精品福利视频 | 女人脱精光按摩AA片 | 高潮喷水在线 | 午夜无码毛片 | 午夜成人福利视频 | 午夜黄色福利视频 | 日韩精品在线播 | 成人短片 | 玖玖爱资源网 | 日韩女同 | 麻豆黑丝视频 | 福利小视频导航 | 天天操天天干天天爽 | 日本草莓视频 | 三级在线无码观看 | 国产精品自在线拍国产 | 操逼网123| 日韩视频| 黄色网络在线观看 | 亚洲成人AV在线观看 | 玖草在线免费视频 | 岛国免费在线观看 | 日韩精品第五页 | 日韩精品成人在线 | 97亚洲综合影院 | 亚洲精品国产精品国自 | 亚洲日夲三级 | 国产精品成人v | 97在线看 | 日韩动漫一区二区 | 国产不卡影院二区 | 性爱在线观看网站 | 亚洲无码AAA | 极品视频在线 | 日韩成人无码 | 日韩精品网站国产九区 | 色网在线看| 美女视频国产 | 午夜黄色福利视频 | 日韩中文字幕免费视频 | 免费看A片秘免费麻豆 | 日韩欧美aⅴ综合网站 | 日屄视屏| 国产高清精品王 | 国产激情网站在线观看 | 日日操夜夜爽 | 综合久久一 | 日韩操碰 | 午夜在线观看福利 | 激情图片小说在线视频 | 国产99视频在线观看 | 成人片免费 | 日韩一级免费电影 | 极品精品 | 97在线超碰| 日韩午夜在线观看a | 国三级在线 | 国产日屄 | 欧美性网址 | 精品男女在线观看 | 国产老熟女伦老熟妇 | 国产人妖一区 | 天天想夜夜操 | 午夜视频软件 | 中文国产 | 精品一曲 | 日韩中文亚洲精品 | www.97| 国产亚洲无码在线观看 | 福利姬白浆AV导航 | 日韩精品社区 | 精品国产亚洲AV | 精品日韩 | 日韩亚洲综合精品国产 | 玖玖爱网站免费 | 久久综合区| 福利导航在线观看视频 | 三级片在线观看国产 | 国产TS人妖在线视频 | 日韩亚洲专 | 日韩精品视频网 | 国产伦理精品在线 | 中文字幕一级毛片视频 | 免着一級a一片 | 久操视频在线观看 | 日韩超燃电影院免 | 无码影视大全 | 日韩喷水在线观看 | 欧美成网站 | 国产自拍视频网 | 日韩亚洲欧美最大 | 亚洲另类视频图片小说 | 成人亲子乱子伦视频 | 国产电影黄 | 婷婷丁香五月社区亚洲 | 亚洲无码一卡二卡 | 动漫精品无码 | 三级网站免费观看 | 精品人妻二区中文字幕 | 日韩电影h | 日韩高清免 | 日韩视频-熊猫成人网 | 人人摸人人操97 | 中国操逼图| 日韩视频欧美在线 | 亚洲黄色三级 | 国产97视频在线观看 | 岛国三级| 午夜美女网站 | 国产成人a亚洲AV | 国产性爱电影在线观看 | 国产免费自拍 | 日韩AⅤ | 成人免费视频一 | 超碰人人干人人摸 | 久久中文骚妇射 | 91人人爱| 日韩午夜三级 | 97综合| 三级A片免费看 | 国产区在线观看 | 超碰97成人 | 日韩欧美亚洲免费 | 日韩乱码人 | 婷婷五月天综合网 | 三级黄在线播放 | 国产精品三级片免费看 | 怡红院一区二区三区 | 成人自拍视频 | 国产麻豆剧 | 黄色三级网站 | 国产乱伦子| www日本色清 | 日操在线 | 成人日韩欧美在线 | 日韩精品第2页 | 91视频网入口 | 91视频黑丝 | 国产美女网站 | 东京热力无码 | 国内精品福利视频 | 日韩伦理大全 | 日韩精品网址 | 国产真实乱偷精品视频 | 国产三级网站 | 日韩特黄 | 日韩美女成人大片 | 欧美一区三区 | 国产女人自拍 | 国产成人亚洲精品无 | 欧美专区一区 | 成人福利午夜A片 | 日韩第九页 | 国产青榴 | 黄色天堂网 | 美女精品一区 | 爆乳女教师一区二区三 | 日韩视频中文字暮 | 午夜视频一区 | 足交网站在线观看 | 日韩成人动漫第一页 | 国产性欲在线观看 | 国产精品酒店视频 | 日韩成人免费网站 | 玖玖在线视频免费观看 | 国产午夜小视频 | 日韩精品午| 国自产偷拍精品 | 日屄视频在线播放 | 国产秘久久一区二区 | 国产自拍偷拍 | 69国产| 日韩在线成人视频 | 天天操天天干天天日 | 日韩中文字幕在线看 | 日韩国产精品欧美 | 国产成人久久久久久久 | 中文字幕精品日本A∨ | 国产美女裸体网站 | 最新国产三级 | 午夜爽爽影院 | 又粗又大又黄又爽 | 成人无码一区二区三区 | 福利微拍| 在线观看三级 | 91欧美| 三级视频网 | 国产超级乱淫片中文 | 成人免费观看片 | 成人午夜大片一站二站 | 日本中文字幕视频 | 欧美视频一区二区三区 | 欧美毛视频 | 成人福利导航大全在线 | 日韩成人视频网 | 黄色三级视频网站 | 丰满少妇AV | 成人性生 | 成人三级三黄三级三黄 | 午夜福利成人在线观看 | 岛国av无码 | 深夜成人视频 | 日韩欧美精品一区二区 | 午夜福利导航在线 | 日韩在线一区二区三区 | 国产人妖性爱视频 | 国产99区一区二区 | 日韩欧美亚洲区 | 日韩经典三级免费电影 | 午夜伦理网 | 性爱在线网站 | 午夜国产无码 | 国产第一区 | 97超碰人人摸人人操 | 又粗又黄A片三男一女 | 天堂网在线看 | 国产午夜视频在线 | 91小仙女 | 91视频美女 | 三级网站在线播放 | 深夜福利在线视频观看 | 精品人妇一区二区三区 | 日韩制服综合网 | 日韩āv高清在线看片 | 成人免费无码 | 日韩亚洲欧美最大 | 在线能看的黄色网址 | 日韩伦理免费看 | 日韩欧美精品一区二区 | 日韩香蕉网 | 含羞草无码 | 国内自拍视频网 | 精东久久 | 成人精品1区二区视频 | 人人摸人人操人人干 | 日韩欧美三区 | 免着一級a一片 | 三级视频在线播放 | 成人三级在线观看 | 美女91网站| 国产精品国产三级片 | 亚洲男人网 | 日韩欧美精品 | 日韩亚洲欧美无砖专区 | 另类色图| 国产麻豆高清 | 在线日韩成人 | 99中文字幕在线观看 | 国产乱伦视频免费看 | 日本免费www | 国产麻豆精品黑丝自慰 | 国产狼友视频在线观看 | 国产无码在线影院 | 日韩视频在线一区 | 成人午夜高清在线观看 | 日韩午夜看片成人精品 | 午夜影院亚洲 | 国产91呆哥在线视频 | 精品熟妇 | 狠狠干天天干 | 91香蕉白丝| 天天干夜夜爱 | 天天操狠狠 | 日韩欧美在现 | 成人看片在线观看免费 | 三级网址大全 | 成人午夜精品无码区 | 日本女同按摩 | 日日夜夜干 | 成人午夜激情网 | 成人午夜福利视频 | 美女视频黄色 | 日韩午夜小视频 | 日韩影院一级在线 | 欧美日韩www | 日本三级2022 | 尤物网站免费在线观看 | 日韩欧美国产高清在线 | 国产精品黑色丝 | 日韩一区欧美激情 | 国产h在线播放 | 老牛影视国产精品 | 国产无码小说 | 无码电影网 | 欧美日韩国产一区 | 久草福利资源 | 婷婷综合五月 | 精品日韩一区二区 | 国产精品自拍一区 | 成人夜间福利视频 | 欧美性爱第一 | 国产精伦| 成人激情视 | 成人在线三级片 | a免费毛片 | 五月丁香六月婷 | 亚洲砖区区免费 | 国产精品6| 成人精品一区二区在线 | 视频一区二区三区免费 | 国产成年人视频 | 日韩好片| 午夜在线免费 | 性爱在线网站 | 欧美成人在线网站 | 国产激情在线观看 | 国产mv天美传媒 | 波多野结衣一区二区 | 日本中文字幕有码 | 天天干夜夜叫 | 国产区连接精品 | 日韩新片在线观看 | 日韩亚洲国产综合高清 | 激情文学之图片区 | 黄色片网站 | 午夜剧场成人 | 亚洲人一区 | 国产农村成人精品一区 | 国产9999免费视频 | 成人国产免费 | 91偷拍自拍 | julia在线视频 | 韩日成人网站 | 日韩影片欧美在线素人 | 午夜成人激情 | 自拍偷拍13页 | 日韩欧美国产视频 | 97碰碰视频| 午夜福利在线播放 | 国产91线观看 | 国产精品香蕉 | 成人精品福利视频 | 爆乳熟妇一区二区 | 成人国产经典 | 日韩免费特| 亚洲成人AV在线观看 | 成人国产系列 | 人人澡人人爱 | 97色色资源网 | 午夜影视 | 日韩精品导航 | 精品一区二区三区人妻 | 日韩精品一卡2卡 | 国产刺激真实乱对白 | 国产精品三级A | 国产内射毛片 | 中文字幕六区 | 黑人性爱网站 | 午夜福利院 | 成人大全在线观看 | 国产91大片精 | 久久免费看 | 狠狠操夜夜干 | 麻豆传媒中心视频 | 深夜福利网站 | 91视频免费入口 | 日韩无码.com | 永久免费A级毛片 | 日韩国产专区 | 国产日产精品 | 五月丁香六月婷 | 爆乳邻居肉欲中文字慕 | 色哟哟一中文字幕 | 日韩性视频在线播 | 91资源视频 | 日韩亚洲欧美另类 | 三级在线播放试看无 | 国产高清视频一 | 久久精品2025 | 日韩伦理电影在线观看 | 日韩伦理在线免费观看 | 日本成人网址 | 色老板综合| 日韩欧美专区 | 日韩免费在线看 | A片免费毛片| 国产女主播视频 | 日韩在线第一区 | 无码在线播放不卡 | 国产91呆哥在线视频 | 日韩高清无码免费观看 | 深夜成人福利影院 | 三级成人网站在线观看 | 成人一区二区 | 国产a线视频播放 | 三级在线观看免费播放 | 日韩欧美电影网 | 国产资源网 | 欧美性爱在线 | 五月四房色播 | 超碰97免费 | 情侣无码 | 成人A片免费视频 | 蜜桃传媒网址 | 91丝袜国产在线观看 | 日韩免费视频在线观看 | 国产三级三级三级 | 午夜私人影院 | 成人午夜天 | 午夜无码影院 | 日韩免费| 日韩电影中文 | 免费在线视频一区二区 | 国产一卡二卡 | 一区二区传媒在线 | 日产三级在线观看 | 国产乱伦一区 | 美女av毛片 | 久久综合888 | 屁屁影院国产第一页 | 男女午夜精华 | 深夜免费福利 | 成人无码三级在线观看 | 人妖在线不卡 | 日本中文无码字幕 | 麻花原创mv免费观看 | 成人高清无码 | www.日韩一区| 国产二区| 欧美精品午夜 | 97人人艹| 国产勾搭在线 | 国产在线21 | 国产美女网站 | 天天干天| 超碰97在线资源站 | 中文有码人妻 | 伦老熟妇 | 日韩在线精品电影 | 午夜福利啪啪 | 国产第20页 | 国产福利影| 日屄视频在线观看 | 国产精品成人三级 | 尤物成人网站 | 国产人妖专区在视频 | 精品偷拍自拍视频 | 精品午夜福利在线观看 | 成人高清字幕在线播放 | 国产在线21 | 综合自拍偷拍 | 成人三级视频在线播放 | 午夜av瑟 | 日韩影院在线观看 | 日韩免va | 中国三级在线 | 欧美性爱在线观看视频 | 中文字幕观看视频精品 | 国产小视频在线观看 | 性爱主播| 久久惹这里只有精品 | 国产在线无码不卡 | 国内自产视频 | 国产爆乳美女 | 黄色av电影在线观看 | 日韩精品首页 | 日韩欧美中文综合 | 国产盗摄-老牛影视 | www超碰在线| 国产成人免费观看 | 成人国产一区二区 | 日韩欧美亚洲中文乱码 | 正在播放夫妇露脸自拍 | 成人播放日韩在线观看 | 女人脱精光按摩AA片 | 欧美一区二区三区在线 | 亚洲导航深夜福利 | 日韩福利精品网站 | 超碰人人擦 | 激情图片激情小说 | 日韩欧美综合在线观看 | 福利在线视频 | 三级精品免费影视 | 日韩中文字幕欧美亚洲 | 激情文学久久 | 久久国产一区 | 99久热| 国产一级| 日韩无码视频网 | 日韩欧美在线看片 | 国产情侣91在 | 日本人妖视频网站 | 三级成人免费 | 夜间福利视频 | 国产又粗又猛又爽又黄 | 日韩精品一线二线 | 欧美偷拍一区二区三区 | 久久这里只有精品8 | 97超碰成人网| 亚洲小说欧美另类激情 | 自拍偷拍第5页 | 国产精品大全 | 一二区免费视频 | 国产国语对白 | 日韩a级影片 | 国产第一精品 | 黄色av网| 果冻AV | 成人动漫在线观看 | 日韩欧美精品一区免费 | 国产福利小视频 | 国产又粗又猛又色 | 91影院网| 亚洲a片成人| 五月婷婷丁香六月 | 国产盗摄视频在线 | 日韩电影三级 | 国产连续剧 | 国产大片免 | 性在线免费观看 | 91精品秘无码网站 | www.三级 | 成人午夜免费福利 | 微拍福利导航 | www.97cn| 成人精品v视频在线 | 日韩视频―中文字幕 | 自拍偷拍综合网 | 天天干天天弄 | 成人午夜又粗又硬又长 | 在线不卡国产 | 福利在线观看免费不卡 | 福利导航视频在线观看 | 国产视频第二页 | 日韩国产变态另类欧美 | 四虎地址8848 | 国产性交影院 | 欧美成年人网站 | 亚洲性综合网 | 成品片a免费入口 | 午夜福利在线影院 | 国产一区在线观看视频 | 无码熟妇人妻又粗又硬 | 最新午夜成人福利在线 | 在线观看成人午夜视频 | 三级视频兔费看 | 玖玖爱国产视频 | 国产性爱精品 | 国产精品美女www | 又粗又大又黄又爽 | 成人精品国产亚洲 | 狼友视频免费 | 午夜视频一区 | 深夜视频网站 | 久久中文字幕观看 | 日韩精品网站国产九区 | 成人黄色一 | 极品尤物在线播放 | www.91porn| 加勒比综合 | 成人午夜激情影院 | 激情综合小说网 | 日韩高清在线观看视频 | 免费在线视频一区二区 | 国产91蝌蚪| 日韩a优精品在线观看 | 乱伦露脸 | 国产成年人 | 日韩亚洲影院 | 国产偷人妻精品一区 | 国产在线观看啪啪啪 | 午夜福利| 国产第一页在线观看 | 欧美另类交 | 欧美精品日韩一区二区 | 成人免费电影 | 午夜视频福利网 | 日韩精品亚洲 | 成人AV三级 | 深夜福利视频免费观看 | 欧美视频一区二区三区 | 日韩精品午夜专区 | 成人激情视频在线观看 | 欧美成人视频在线观看 | 日韩伦理视频 | 午夜成人精品影院 | 色网综合 | 国产岛国在线观看 | 福利中文字幕最新永久 | 三级片黄色网址 | 日韩成人免费 | 高清無碼麻豆 | 日韩无码中文字幕 | 国产片三级在线观看 | 自拍偷拍第十页 | 国产狼友视频在线观看 | 国产精品高清 | 91视频官网 | 日韩欧美福利电影在线 | 国产va免费精品观看 | 欧美亚洲视频 | 日韩电影精品 | 91香焦视频| 91页游社区| 91综合碰| 麻豆精品 | 欧美不卡一区 | 精品国产乱码久久 | 日屄免费视频 | 国产免费看三级片 | 欧美性爱欧美性爱 | 日逼网站视频 | 99东京热| 成人看片在线 | 免费黄色三级网站 | 国产69永久免费视频 | 日本高清熟妇 | 日韩欧美中文字幕涩涩 | 天天看日韩精品 | 欧美性爱第2页 | 国产精品永久免费 | 国产精品一级爱 | 国产男女交配 | 午夜免费成人网站 | 成人视频日本 | 日韩伦理片在线 | 欧日韩在线 | 老湿机网址 | 久草免费福利资源 | 另类欧美一 | 性爱在线网站 | 国产a在亚洲线播放 | 麻豆传媒入口 | 日韩在线观看精品 | 日韩制服丝袜在线 | 国产精品成人国产乱 | 婷婷五月综合激情 | 成人簧片| 国产a∨免费精品视频 | 日韩精品一页 | 亚洲人成免费 | 人妻人碰| 日韩极品视频在线观看 | 人人操人人搞 | 免费A片网 | 深爱激情婷婷综合基地 | 国产第一夜 | 日韩在线永久免费播放 | 日韩在线视频免费观看 | 国产人妖在线视频 | 香蕉精品福利 | 91性一性一性 | 国产看片资源 | 成人永久免费永久在线 | 东京热www. | 午夜性福利 | 在线天堂视频 | 日韩一二三区的经济 | 东京热黄 | 天天日天天干天天日 | 日韩精品淫途 | 91香蕉亚 | 日韩欧美国产性爱大片 | 91资源站 | www无码天堂| 成人午夜网 | 男女午夜精华 | 亚洲人成乱码精品一区 | 福利视频导航网址 | 成人性爱在线视频 | 成人网站在线视频三级 | 三级视频无码 | 五月丁香六月婷婷综合 | 四房色播婷婷网 | 欧美成人视频 | 东京热大乱w姦在线 | 国产三级午夜理伦三级 | 国产二区自拍 | 欧美三区视频 | 日韩拍拍 | 国产黄色片网站 | 欧美极品性爱网 | 另类图片小说激情 | 日韩免费视频一一二区 | 岛国AV免费看 | 日韩国产综合 | 亚洲另类视频图片小说 | 四房婷婷播激情 | 天天干天天干天天干 | 天堂网二区 | 午夜成人免费网址 | 狼人久久伊人 | 在线黄片com | 蜜桃视频中文字幕 | 日韩高清欧美高清 | 成人欧美一区二区三区 | 本道久久综合 | 成人三级免费观看 | 国产三级片在线免费 | 国摸冰冰 | 毛片A级成人片 | 九一果冻制作厂余丽 | 激情小说图片区 | 国产在线精选 | 国产成人精品在线观看 | 成人快插 | 日韩国产欧美综合在线 | 玉足91 | 三级片在线免费观看 | 丝袜美腿中出 | 日韩在线一区高清在线 | 国产乱人视频 | 四虎新地址 | 三级在线专区 | 国产精品啪啪啪 | 又黄又爽又刺激 | 午夜在线电影院 | 日韩一区二区精品在线 | 日韩欧美国产师生制服 | 成人影院在线入口 | 深夜福利免费在线 | 日韩视频免费播放 | 日韩国产自拍 | 91视频看污片 | 在线一区二区欧美 | 正在播放露脸嫖妓不叫 | 玖玖爱在线免费视频 | 国产区精品视频 | 日韩激情无码一区二区 | 图片在线视频小说成人 | 国产97视频在线观看 | 成人三级片在线观看 | 国产亚洲日韩在线 | 欧美性爱大全 | 亚洲国产日韩在线 | 日韩一区在线免费观看 | 99精品国产一区二区 | 一区二区免费看视频 | 国产91这里都是精品 | 欧美另类交| 国产99热0 | 东京热大交乱在线观看 | 亚洲激情都市 | 狼友在线免费视频 | 日本不卡的中文字幕 | 三级在线免费观看 | 能播放的三级网站 | 日韩一区二区三区电影 | 午夜成人在线免费观看 | 福利视频导航福利 | 哦哦哦好爽国产人妖 | 日韩中文字幕理论在线 | 在线中文国产 | 日韩欧美色图 | 97超碰人人摸人人干 | 日韩系列在线精品播放 | 国产成人在线视频 | 涩涩视频成人 | 国产三级HD三级精品 | 国产精品大片 | 你懂的网 | 三级片国产在线 | 欧美性爱首页 | 专干老熟300部 | 国产乱子伦精品视频潮 | 国产资源大全 | 久久私人影院 | 日韩日日日 | 成人网址在线观看 | 嫖妓自拍播放 | 国产成a人片 | 久久综合久久网 | 日韩高清在线电影 | 日韩精品在线观看一区 | 高清无人区一区 | 日韩综合一区 | www.尤物.com| 日韩欧美中字 | 国产又粗又猛又爽又黄 | 国产精品自拍视频网 | 日韩免费三级网站 | 日韩理论电影在线播放 | 91电影| 日韩欧美国产一区二区 | 久久综合成人 | 黃色成人大片色 | 四房色播婷婷网 | 日韩中文字幕欧美专区 | 日韩亚洲国产精品一区 | 国产精品熟女久 | 成人深爱网 | 日本多毛熟妇撒尿 | 日韩成人大片在线观看 | 三男玩一女三A片 | 韩日在线视频观看 | 丁香网五月 | 亚洲瑟瑟瑟| 成人免费看吃 | 国产乱人妻精品秘入口 | 激情爱爱网站 | 91香蕉污 | 亚洲另类激情小说网 | 色在线视频 | 深夜福利网站在线观看 | 日韩亚洲精品在线观看 | 99热1 | 最新日韩无码 | 国产三级毛片 | 欧美精品一区二 | 四虎论坛 | 三级免费网址 | 韩日一区| 日韩经典欧美精品一区 | 国产免费三级片完整版 | 东京热系列 | 日韩精品在线播放视频 | 成人精品一区二区在线 | 日韩精品极 | 日韩精品在线观看吧 | 日韩免费电影网 | 玖玖爱爱视频 | 日韩一区二精品成人免 | 国产swag在线观看 | 免费黃色三級片在线 | 日韩黄色免费 | 亚洲一骑色网 | 日韩精品中文一区二区 | 欧美人操 | 日韩在线精品蜜柚影院 | 三级精品视频在线播放 | 欧美专区在线 | 日韩制服丝袜中文字幕 | 日韩精品在线视频一区 | 黄色av网站免费观看 | 成人精品国产一区二区 | 国产精品美女www | 国产女同另类 | 日韩精品快射网视频在 | 亚洲日本电影a | 亚洲一卡二卡在线观看 | 日韩伦理手机在 | 乱伦91 | 极品美女在线观看 | 午夜成人免费在线 | 另类日韩| 日韩小u女一区二区三 | 午夜婷婷 | 日韩中文字幕网 | 欧美性爱在线 | 成人午夜免费观看 | 成人免费午夜影院 | 日韩国产在线不 | 日韩天天精品综合 | 国产偷拍自拍视频 | 成人午夜在线影院 | 午夜福利网址 | 日韩在线精品一二三区 | 视频一区二区三区视频 | 成人国产不卡 | 在线偷拍自拍 | 亚洲熟女一区 | 国产欧美一区二区在线 | 九色91| 日韩性视频在线播 | 欧美精品一区在线观看 | 丁香五月综合 | 国产国内在线 | 青青操女人 | 日韩欧美伦理片 | 国产视频999 | 国产麻豆精东果冻传媒 | 国产va观看在线播放 | 91探花福利| 国产免费自拍视频 | 国产不卡小视频 | 国产精品免费精品一区 | 成人三级在线0 | 激情小说亚洲图片:伦 | 国产片入口 | 日韩免费在线观看 | 一级做受| 国产九区 | 日韩性爱在线视频 | 日韩视频高 | 国产高清精品久 | 欧美视频网站 | 91福利网站 | 成人拍拍拍免费 | 福利深夜免费导航 | 日韩v欧美v中文在线 | 国产ts人妖另类专区 | 三级在线看片 | 人人妻人人操人人爽 | 欧美性爱小 | 在线观看三级片国产 | 日韩影院一级在线 | 国产三级电影在线观看 | 日韩亚洲高清 | 日韩老女人| 羞羞网站 | 另类激情文学 | 日韩欧美综合在线观看 | 三级全黄视频 | 91同城| 国产乱子视频 | 国产资源网 | 国产日韩精选 | 91网站免费看 | 国产精品第12页 | 日韩在线观看小视频 | 国内性爱自拍 | 色播五月婷婷 | 国产精品久久久在线 | 日韩国产欧美影院 | 日韩免费大片 | 成人奭片 | 成人97超碰| 亚洲二页 | 麻豆久久 | 国产精品啪啪视频 | 日韩无码中文字幕 | 加勒比一区二区 | 成人精品一区二区秒拍 | 亚洲国产精品电影 | 国产区二区三区 | 一区二区传媒公司 | 91视频污 | 国产夫妻操逼 | 日韩亚洲三级 | 天天操狠狠干 | 日韩性视频在线播 | 国产另类ts人 | 国产精品视频自拍 | 国产手机推荐 | 日韩成人精品免费观看 | 国产经典三级手机观看 | 成人福利在线观看免费 | 日韩一区二区三区不卡 | 精品欧美一区二区三区 | 欧美精品网站在线观看 | 日韩欧美在线观看免费 | 欧美极品性爱 | 国产电影三级在线观看 | 日韩亚洲欧美国产另类 | 一区二区三区伦理片 | 日韩精品第30页 | 九九九九精品视频 | 嫩草91| 色婷婷一区 | 日韩国产精品乱久 | 成人午夜剧场在线观看 | 91刺激视频| 国产三级精品 | 日韩欧美国产偷 | 国模吧在线视频 | 色综合久久天天综合网 | 午夜在线看视频 | 天天操狠狠干 | 日韩免费视频一区二区 | 天堂网一区 | 亚州精品无码毛片 | 午夜男女羞羞影院 | 国产人妖兮 | 91视频看污片 | 日韩视频91 | 东京热大乱w姦 | 国产高清无码 | 久久不卡网 | 国产欧美婬乱一区二区 | 日韩中文免费视频 | 夫妻自拍小视频 | 人妖在线看免费网站 | 国产无码久久久 | 日韩高清无码一区二区 | 国产美女精品一区 | 成人情趣网站 | 三级在线免费观看 | 日韩欧美一级视频喷潮 | 日韩一三区国产福利 | 国产另类在 | 夜色福利导航 | 国产精品蝌蚪 | 成人信息集中地日韩 | 日韩国产欧美制服 | 日韩精品秘a在线观看 | 91社区网| 国产免费三片 | 色哟哟一中文字幕 | 91在线成人网| 三级网站网址 | 日韩在线天堂 | 国产丝袜在线 | 日韩在线二区全免费 | 久久这里只有 | 国语对白真实视频播放 | 日韩欧美福利 | 亚洲一卡二卡在线观看 | 玖玖爱精品在线观看 | 深夜成人福利影院 | 97福利社| 国内自拍第三页 | 91视频盛宴 | 欧美精品在线一区 | 国产欧美一区二区在线 | 狠狠操亚洲 | 国产成人片在线看 | 日韩精品视频免费 | 午夜成人福利在线观看 | 日韩视频-熊猫成人网 | 综合五月天 | 午夜在线观看福利 | 成人午夜福利视频网站 | 中文字幕亚洲国产 | 国模精品一区 | 福利影院在线播放 | 少妇28p| 日韩精品视频在线播放 | 日韩有码在线播放 | 三级黄色在线网站 | 国产偷拍自拍视频 | 欧美日韩精选 | 日韩系列3 | 丁香五月影院 | 亚洲人成人无码 | 一伦一色一性一交一配 | 午夜福利理论 | 超碰人人操人人操 | 国产午夜成人 | 亚洲卡一卡二 | 国产高清不卡 | 日韩女同精品一区二 | 成人亚洲理论片 | 高潮流白浆在线观看 | 自拍偷拍第八页 | 三级免费| 五月天激情综合网 | 午夜三级| 三级在线观看免费播放 | 黄色三级片毛片网站 | 日韩精品淫途 | 成人看黄 | 国产屁屁影院 | 在线观看深夜福利 | 天天日天天射天天爽 | 国产精品视频自拍 | 国产成人a人亚洲精v | 日韩精品影片 | 黄色av网站免费 | 国产精品狼友 | 人人摸人人操97 | 日韩午夜福利电影 | 日韩精品欧美色 | 北条麻妃一区二区三区 | 97成人影视| 97在线免费观看视频 | 成人精品在| 国产乱伦一区二区 | 三级精品在线 | 亚洲精品影院 | 午夜成人精品不卡影院 | 五月婷婷丁香五月 | 欧美性爱在线 | 午夜成人网站在线 | 视频一区二区三区在线 | 天天干狠狠干 | 国产嫖妓无套在线播放 | 东方成人AV| 国产a精品| 国产大片一区 | 天堂视频免费在线观看 | 国产精品一在 | 日韩国产精品免费专区 | 夜夜干夜夜看 | 欧美在线一区二区三区 | 午夜激情成人网 | 日韩三级伦理 | 亚洲性受精品国产馆 | 国产国产 | 中文字幕加勒比 | 激情婷婷 | 日韩乱伦一区二区 | 五月停停| 国产精品一二三区 | 日韩欧美国产aⅴ另类 | 久久中文娱乐网 | 亚洲综合精品国产 | 国产福利视频在线观看 | 日本高清视频色 | 日韩成人黄色片 | 欧美颜射 | 麻豆久久 | 91视频福利 | 韩日高清视频 | 日韩丰满| 国产又粗又猛又爽又黄 | 五月丁香亭亭 | 丝袜美腿视频一区 | 国产精品黄色 | 尤物在线免费视频 | 日韩欧美国产一区呦呦 | 欧美91| 免费黄色三级网站 | 国产凹凸一区 | 午夜免费福利视频 | 日韩女同精品一区二 | 国产吃瓜黑料一区二区 | 日韩亚洲精品不卡在线 | 午夜在线看视频 | 日韩成人一级 | 国产a观看免费完整版 | 啪啪啪网站在线观看 | 日韩在线中文 | 日韩在线观看欧美尤物 | 成人一区二免费视频 | 激情小说亚洲图片:伦 | 日韩色址| 深夜福利视频一区 | 日韩成人在线视频网站 | 中国三级片国产网站 | 成人精品日韩一区二区 | A级毛片大全免费 | 国产乱伦视频播放 | 成人激情五月天 | 日韩精品亚洲一区 | 日韩国标一区二区精品 | 日韩二区三区无 | 玖玖视频网 | 亚洲视频第一页 | www.丁香五月天 | 国产l精品国产亚洲 | 国产精品嫩草影视 | 成人A级免费毛片 | 午夜无码在线观看视频 | 色偷偷色偷偷 | 午夜免费成人视频 | 成人免费体验 | 国产欧美第一页 | 日韩亚洲欧洲中文版 | 日本在线不卡一区 | 九九九精品 | 国产尺码和欧洲 | 久久毛片完整版 | 美女毛片网站 | 国产成人亚洲日韩 | 亚洲国产无码在线 | 日本三级黄色网址 | 日韩午夜福利片在线观 | 黄色深夜福利小视频 | 日韩精品高清在线 | 日韩美女免费在线 | 97色秀| 97高清国语自产拍 | 国产老熟女伦老熟妇 | 日韩在线观看高清视频 | 黄色av网站网址 | 成人黄片免费看 | 日本A网 | 国产性爱网站在线观看 | 国产精品久线在线观看 | 淫秽视频国产乱伦中国 | 午夜视频播放器 | 午夜成人在线免费视频 | 91视频日韩 | 日韩欧美aⅴ综合网站 | 国语精品对白 | 日韩精品免费在线视频 | 成人高清无码 | 久久足交 | 日本a黄 | 日韩欧美福利视 | 婷婷五月丁香综合 | 干逼91 | 高潮流白浆视频 | 天天综合网7799 | 日韩欧美亚洲国产一区 | 日韩伦理在线 | 成人免费试看 | 国产无码电影 | 日韩精品视频成人 | 国产91最新欧| 国产人妻人伦精品九色 | 国产又爽又粗又猛又色 | 日韩不卡1卡2卡三卡 | 国产素人自拍 | 麻逗传煤永久播放 | 日本人妻中文 | 日韩精品国产 | 国产日本精品 | 国产熟女露脸 | 天天日天天射天天爽 | 乱伦视频免费看 | 久久中文综合 | 无码天堂在线 | 老牛影视无码中出 | 午夜福利乱 | 日韩中文高清在线 | 激情网四房 | 97狠狠操| 成人午夜视 | 国产精品13p| 国产无码午夜 | 国产三级三级三级 | 日韩精品一级二级片 | 国产免费美女 | 日韩美女露奶不良网站 | 国产高清无码在线观看 | 日本xxx在线观看 | 日韩视频福利 | 91香蕉影院| 成人午夜免费一区二区 | 国产swag在线观看 | 国产尤物在线播放 | 乱伦一区二区三区 | 国产男女交配 | 美女爆乳网站 | 欧美人妖另类 | 国产老女人网址 | 五月婷婷综合激情网 | 欧美性爱com | 日日夜夜精品视频 | 国产精品国色综合久久 | 日韩高清区 | 成人av| 日本黄色中文字幕 | 一a片免费看 | 超碰成人人人操 | 日韩成人三级 | 人妻丝袜在线 | 天堂网一区二区三区 | 另类小说在线视频 | 国产日韩成 | 精品国产乱码久久久 | 高清无码一区二区三区 | 国产日韩欧美一区二区 | 激情文学激情图片 | 成人a在线观看 | 四虎成人电影 | 日韩在线另类 | 亚洲一级二级 | 免费毛片a | 91丨熟女丨对白 | 国产70老熟女重口 | 福利狼视频 | 乱伦一区二区三区 | 自拍偷拍-83视频 | 午夜伦理片电影 | 日韩美女专区中文字幕 | 一区二区乱伦 | 日韩色中色 | 丰满少妇在线观看网站 | 韩日精品一二三 | 日韩中文字幕丝袜 | 东京热色 | 超碰入口 | 国产夫妻精品 | 欧美牲爱 | 国产学生妹av | 国产线路中文 | 亚洲成人A片 | 91视频黄色| 全免费A级毛片免费看 | 日本不卡二区 | 日韩精品欧 | 色婷婷AV | 天堂资源在线 | 精品国产成人XXXX | 另类福利| 尤物国产在线 | 国产在线观看a | 日韩一欧美内 | 午夜成人免费在线观看 | 成人福利视频在线观看 | 国产h视频在线 | 日韩一区二区不卡精品 | 午夜亚洲电影 | 日韩国产电影 | 国模冰莲私拍极品肥美 | 91视频欧| 日本天堂免费看 | 国产精品自拍偷拍 | 波多野结衣大战黑人 | 国产原创精品视频 | 日韩精品五区 | 深夜福利免费视频 | 午夜天堂在线观看 | 韩日精品一二三 | 国产三级手机观看 | 人人操人人干超碰 | 日韩乱码在线观看 | 欧美三区在线观看 | 国产人妻精品 | 天堂网最新在线 | 日韩亚洲欧美理论片 | 三级日本69一区二区 | 免费午夜成人视频 | 日韩伦理免费看 | 不卡网久久| 自拍偷拍第 | 日韩欧美亚洲精品 | 日韩亚洲精品影院 | 国产人妖黑妖人... 国产人妖第二 | 丝袜美腿视频一区 | 人人看97 | 激情文学区 | 五月天成人影院 |