精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Springboot整合Camunda工作流引擎實現審批流程實例

開發 前端
這里我不通過上面的rest api 進行部署,而是通過自定義的接口然后調用camunda的相關api來實現流程部署。

環境:Spingboot2.6.14 +
camunda-spring-boot-starter7.18.0

環境配置

依賴配置

<camunda.version>7.18.0</camunda.version>
<dependency>
  <groupId>org.camunda.bpm.springboot</groupId>
  <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
  <version>${camunda.version}</version>
</dependency>
<dependency>
  <groupId>org.camunda.bpm.springboot</groupId>
  <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
  <version>${camunda.version}</version>
</dependency>

應用程序配置

camunda.bpm:
  webapp:
    # 設置管理控制臺的訪問上下文
    application-path: /workflow
  auto-deployment-enabled: true
  admin-user:
    # 配置登錄管理控制臺的用戶
    id: admin
    password: admin
    firstName: admin
  filter:
    create: All tasks
  database:
    #數據庫類型
    type: mysql 
    #是否自動更新表信息
    schema-update: true
logging:
  level:
    #配置日志,這樣在開發過程中就能看到每步執行的SQL語句了
    '[org.camunda.bpm.engine.impl.persistence.entity]': debug
---
spring:
  jersey:
    application-path: /api-flow
    type: servlet
    servlet:
      load-on-startup: 0

通過上面的配置后訪問控制臺:http://localhost:8100/workflow/

圖片

默認是沒有上面的tasks中的內容,這里是我之前測試數據

環境準備好后,接下來就可以設計工作流程。

上面的camunda-bpm-spring-boot-starter-rest依賴中定義了一系列操作camunda的 rest api 這api的實現是通過jersey實現,我們可以通過/api-flow前綴來訪問這些接口,具體有哪些接口,我們可以通過官方提供的camunda-bpm-run-7.18.0.zip

http://localhost:8080/swaggerui/#/

設計流程

這里設計兩個節點的審批流程,經理審批---》人事審批 流程。

圖片

經理審批節點

圖片

人事審批節點

上面配置了2個用戶任務節點,并且為每個任務節點都設置了表達式,指定節點的審批人。

最終生成的流程XML內容如下:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="sample-diagram" targetNamespace="http://pack.org/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
  <bpmn2:process id="Process_1" isExecutable="true">
    <bpmn2:startEvent id="StartEvent_1">
      <bpmn2:outgoing>Flow_18pxcpx</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:sequenceFlow id="Flow_18pxcpx" sourceRef="StartEvent_1" targetRef="Activity_0vs8hu4" />
    <bpmn2:userTask id="Activity_0vs8hu4" camunda:assignee="${uid}">
      <bpmn2:incoming>Flow_18pxcpx</bpmn2:incoming>
      <bpmn2:outgoing>Flow_0n014x3</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sequenceFlow id="Flow_0n014x3" sourceRef="Activity_0vs8hu4" targetRef="Activity_0bcruuz" />
    <bpmn2:userTask id="Activity_0bcruuz" camunda:assignee="${mid}">
      <bpmn2:incoming>Flow_0n014x3</bpmn2:incoming>
      <bpmn2:outgoing>Flow_0dsfy6s</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:endEvent id="Event_1xosttx">
      <bpmn2:incoming>Flow_0dsfy6s</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="Flow_0dsfy6s" sourceRef="Activity_0bcruuz" targetRef="Event_1xosttx" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="252" y="252" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1py8b5e_di" bpmnElement="Activity_0vs8hu4">
        <dc:Bounds x="340" y="230" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0arbs87_di" bpmnElement="Activity_0bcruuz">
        <dc:Bounds x="500" y="230" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1xosttx_di" bpmnElement="Event_1xosttx">
        <dc:Bounds x="662" y="252" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_18pxcpx_di" bpmnElement="Flow_18pxcpx">
        <di:waypoint x="288" y="270" />
        <di:waypoint x="340" y="270" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0n014x3_di" bpmnElement="Flow_0n014x3">
        <di:waypoint x="440" y="270" />
        <di:waypoint x="500" y="270" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0dsfy6s_di" bpmnElement="Flow_0dsfy6s">
        <di:waypoint x="600" y="270" />
        <di:waypoint x="662" y="270" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

部署流程

這里我不通過上面的rest api 進行部署,而是通過自定義的接口然后調用camunda的相關api來實現流程部署。

上面的流程設計我是通過vue整合的camunda進行設計,并沒有使用官方提供的設計器。設計完成后直接上傳到服務端。

接口

@RestController
@RequestMapping("/camunda")
public class BpmnController {


  // 上傳路徑
  @Value("${gx.camunda.upload}")
  private String path ;
  
  // 通用的工作流操作api服務類
  @Resource
  private ProcessService processService ;
  
  @PostMapping("/bpmn/upload")
  public AjaxResult uploadFile(MultipartFile file, String fileName, String name) throws Exception {
    try {
      // 上傳并返回新文件名稱
      InputStream is = file.getInputStream() ;
      File storageFile = new File(path + File.separator + fileName) ;
      FileOutputStream fos = new FileOutputStream(new File(path + File.separator + fileName)) ;
      byte[] buf = new byte[10 * 1024] ;
      int len = -1 ;
      while((len = is.read(buf)) > -1) {
        fos.write(buf, 0, len) ;
      }
      fos.close() ;
      is.close() ;
      // 創建部署流程
      processService.createDeploy(fileName, name, new FileSystemResource(storageFile)) ;
      return AjaxResult.success();
    } catch (Exception e) {
      return AjaxResult.error(e.getMessage());
    }
  }
}

部署流程Service

// 這個是camunda spring boot starter 自動配置
@Resource
private RepositoryService repositoryService ;


public void createDeploy(String resourceName, String name, org.springframework.core.io.Resource resource) {
  try {
    Deployment deployment = repositoryService.createDeployment()
      .addInputStream(resourceName, resource.getInputStream())
      .name(name)
      .deploy();
    logger.info("流程部署id: {}", deployment.getId());
    logger.info("流程部署名稱: {}", deployment.getName());
  } catch (IOException e) {
    throw new RuntimeException(e) ;
  }
}

執行上面的接口就能將上面設計的流程部署到camunda中(其實就是將流程文件保存到了數據庫中,對應的數據表是:act_ge_bytearray)。

啟動流程

啟動流程還是一樣,通過我們自己的接口來實現。

接口

@RestController
@RequestMapping("/process")
public class ProcessController {


  @Resource
  private ProcessService processService ;
  
  // 根據流程定義id,啟動流程;整個流程需要動態傳2個參數(審批人),如果不傳將會報錯
  @GetMapping("/start/{processDefinitionId}")
  public AjaxResult startProcess(@PathVariable("processDefinitionId") String processDefinitionId) {
    Map<String, Object> variables = new HashMap<>() ;
    variables.put("uid", "1") ;
    variables.put("mid", "1000") ;
    processService.startProcessInstanceAssignVariables(processDefinitionId, "AKF", variables) ;
    return AjaxResult.success("流程啟動成功") ;
  }
}

服務Service接口

@Resource
private RuntimeService runtimeService ;


public ProcessInstance startProcessInstanceAssignVariables(String processDefinitionId, String businessKey, Map<String, Object> variables) {
  ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);
  logger.info("流程定義ID: {}", processInstance.getProcessDefinitionId());
  logger.info("流程實例ID: {}", processInstance.getId());
  logger.info("BussinessKey: {}", processInstance.getBusinessKey()) ;
  return processInstance ;
}

流程啟動后就可以查看當前需要自己審批的所有審批單

圖片


接口實現

@Resource
private TaskService taskService ;
@Resource
private ManagementService managementService ;
// 根據時間段查詢
public List<Task> queryTasksByBusinessAndCreateTime(String assignee, String businessKey, String startTime, String endTime) {
  NativeTaskQuery nativeQuery = taskService.createNativeTaskQuery() ;
  nativeQuery.sql("select distinct RES.* from " + managementService.getTableName(TaskEntity.class) +  " RES "
                  + " left join " + managementService.getTableName(IdentityLinkEntity.class) + " I on I.TASK_ID_ = RES.ID_ "
                  + " WHERE (RES.ASSIGNEE_ = #{assignee} or "
                  + " (RES.ASSIGNEE_ is null and I.TYPE_ = 'candidate' "
                  + " and (I.USER_ID_ = #{assignee} or I.GROUP_ID_ IN ( #{assignee} ) ))) "
                  + " and RES.CREATE_TIME_ between #{startTime} and #{endTime} "
                  + " order by RES.CREATE_TIME_ asc LIMIT #{size} OFFSET 0") ;
  nativeQuery.parameter("assignee", assignee) ;
  nativeQuery.parameter("startTime", startTime) ;
  nativeQuery.parameter("endTime", endTime) ;
  nativeQuery.parameter("size", Integer.MAX_VALUE) ;
  return nativeQuery.list() ;
}

審批流程

流程啟動后,接下來就是各個用戶任務節點配置的用戶進行審批

接口

@GetMapping("/approve/{id}")
public AjaxResult approve(@PathVariable("id") String instanceId) {
  if (StringUtils.isEmpty(instanceId)) {
    return AjaxResult.error("未知審批任務") ;
  }
  // 下面的參數信息應該自行保存管理(與發起審批設置的指派人要一致)
  Map<String, Object> variables = new HashMap<>() ;
  // 第一個節點所要提供的遍歷信息(這里就是依次類推,mid等)
  variables.put("uid", "1") ;
  processService.executionTask(variables, instanceId, task -> {}, null) ;
  return AjaxResult.success() ; 
}

服務Service接口

@Resource
private TaskService taskService ;
@Resource
private RuntimeService runtimeService ;


@Transactional
public void executionTask(Map<String, Object> variables, String instanceId, Consumer<Task> consumer, String type) {
  Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult() ;
  if (task == null) {
    logger.error("任務【{}】不存在", instanceId) ;
    throw new RuntimeException("任務【" + instanceId + "】不存在") ;
  }
  taskService.setVariables(task.getId(), variables);
  taskService.complete(task.getId(), variables) ;
  long count = runtimeService.createExecutionQuery().processInstanceId(instanceId).count();
  if (count == 0) {
    consumer.accept(task) ;
  }
}

以上就完成了從整個流程的生命周期:

設計流程 ---》部署流程 ---》啟動流程 ---》審批流程

完畢!!!

責任編輯:武曉燕 來源: 實戰案例錦集
相關推薦

2023-07-05 09:48:44

Activiti部署

2024-03-26 08:08:08

SpringBPMN模型

2021-12-17 08:39:39

SpringbootActiviti網關路由

2013-04-23 10:28:08

IBeamMDAAWF

2021-10-14 11:34:05

技術工作流引擎

2025-07-31 08:58:50

2025-04-27 03:00:00

Spring流程業務

2023-01-04 08:02:16

工作流架構設計

2011-12-14 09:58:58

JavajBPM

2015-07-14 09:26:28

微型工作流引擎設計

2024-10-17 08:39:32

2023-08-02 18:48:23

Flowable工作流引擎

2009-06-11 14:43:34

jbpm工作流引擎jBPM搭建

2009-09-01 18:26:23

C#工作流引擎

2023-03-26 00:53:04

camunda7camunda8流程引擎

2009-03-03 09:13:36

工作流BPM業務流程

2010-11-26 10:59:28

SharePoint

2025-10-17 08:22:32

2009-06-11 14:33:11

jbpm工作流引擎什么是jbpm

2014-07-31 17:03:12

點贊
收藏

51CTO技術棧公眾號

国产精品永久在线| 亚洲精品国久久99热| 久久免费在线观看| 97精品人妻一区二区三区蜜桃| 秋霞在线视频| 成人app下载| 91国产视频在线| 亚洲一级中文字幕| 黑人一区二区三区| 一区二区高清在线| 国产精品一区二区三区免费观看| 日韩成人免费在线观看| 精品在线99| 欧美日韩国产首页在线观看| 在线无限看免费粉色视频| 亚洲精品国产suv一区| 亚洲成人资源| 在线视频日韩精品| 中文字幕无码毛片免费看| 国产传媒在线观看| 国产欧美一区二区精品久导航 | 亚洲精品精品亚洲| 国产亚洲福利社区| 欧美精品韩国精品| 欧美a级一区| 国产丝袜一区二区三区免费视频| 国产成人在线综合| 欧美日韩国产观看视频| 中文字幕在线不卡国产视频| 国产精品美女久久久久av福利| 综合激情网五月| 欧美不卡一区| 国产亚洲欧美aaaa| yy6080午夜| 欧美黄色成人| 精品福利在线看| 日韩区国产区| 色呦呦免费观看| 蜜桃视频第一区免费观看| 国内精品久久久久影院 日本资源| 少妇无套高潮一二三区| 国产精品香蕉| 在线播放欧美女士性生活| av之家在线观看| av毛片在线免费看| 中文字幕av一区二区三区免费看 | 久久亚洲精品视频| 免费看污片网站| 亚洲无线观看| 欧美精品一卡二卡| 黄色一级免费大片| а√天堂中文在线资源8| 亚洲色图.com| 亚洲精品在线视频观看| 日本五码在线| 99精品视频在线观看免费| 亚洲一区二区免费| 在线观看毛片视频| 性欧美xxxx大乳国产app| 欧美激情奇米色| 极品魔鬼身材女神啪啪精品| 香蕉视频在线免费看| 成人黄色一级视频| 91视频最新| 国产区精品在线| 久久国产精品72免费观看| 国产精品www色诱视频| 国产又爽又黄的视频| 黄色在线成人| 欧美大片在线看| 91视频免费在线看| 99久久夜色精品国产亚洲1000部| 伊人伊成久久人综合网站| asian性开放少妇pics| 精品国产一区二区三区成人影院| 精品免费视频.| 日本精品一二三区| 亚洲精品在线播放| 精品福利一区二区三区免费视频| 青青草精品在线| 国产黄色一区| 宅男噜噜噜66一区二区66| 男女视频在线看| 亚洲精品66| 91精品国产入口在线| 天堂在线精品视频| 一区二区三区四区高清视频 | 午夜欧美不卡精品aaaaa| 国产在线视频99| 一区二区三区四区五区在线 | 无码人妻aⅴ一区二区三区69岛| 亚洲97av| 日韩在线不卡视频| 免费无码毛片一区二区app| 激情欧美丁香| 日本国产欧美一区二区三区| 免费观看日批视频| 久久成人羞羞网站| 成人动漫在线视频| 韩国中文字幕hd久久精品| 97久久精品人人做人人爽| 精品在线不卡| 婷婷丁香花五月天| 久久精品视频免费| 日本道在线视频| 性欧美18~19sex高清播放| 日本国产一区二区| 美女一区二区三区视频| 国产精品日韩精品在线播放| 亚洲成人精品久久久| japanese中文字幕| 五月天综合网站| 97人人做人人爱| 夜夜躁很很躁日日躁麻豆| 成人午夜视频在线| 热re99久久精品国99热蜜月 | 欧美成人剧情片在线观看| 久久一级黄色片| 日韩不卡在线观看日韩不卡视频| 亚洲自拍偷拍网址| 国产高清视频在线| 亚洲成国产人片在线观看| 久久这里只精品| jazzjazz国产精品久久| 一区国产精品视频| 日本少妇性生活| 国产麻豆精品在线| 偷拍视频一区二区| 麻豆蜜桃在线观看| 欧美一区二区三区在线看| 亚洲成人网在线播放| 欧美激情第8页| 国产精品日韩欧美| 日韩在线一区二区三区四区| 国产精品乱子久久久久| 高清在线观看免费| 亚洲伊人影院| 久久久精品影院| 国产日韩欧美成人| 久久这里只有精品9| 丁香六月久久综合狠狠色| 午夜老司机精品| 五月天av在线| 亚洲а∨天堂久久精品9966| 日韩av手机在线免费观看| 国产偷自视频区视频一区二区| 国产精品欧美风情| 男人久久精品| 激情久久av一区av二区av三区| 特级西西444www| 欧美一区二区麻豆红桃视频| 青青久久av北条麻妃海外网| 秋霞视频一区二区| 亚洲一区二区不卡免费| 国内av一区二区| 欧美疯狂party性派对| 45www国产精品网站| 一本色道久久综合无码人妻| 国产亚洲欧美在线| 欧美性猛交久久久乱大交小说| 校花撩起jk露出白色内裤国产精品| 欧美俄罗斯乱妇| 性生活视频软件| 亚洲精品综合在线| 日本r级电影在线观看| 九九九在线观看| 国产成a人亚洲精品| 欧美少妇一级片| 国产精品一区二区三区av| 久久精品小视频| 99热这里只有精品99| 中文字幕一区二区三区蜜月| a在线观看免费视频| 欧美顶级大胆免费视频| 91手机视频在线观看| 黄a在线观看| 欧美一卡2卡三卡4卡5免费| 天天综合天天做| 国产99精品国产| 国产原创中文在线观看| 999久久精品| 91精品国产色综合| 精品无吗乱吗av国产爱色| 欧美视频二区36p| 精品成人无码一区二区三区| 蜜桃久久久久久| 中文字幕在线中文| 风间由美中文字幕在线看视频国产欧美| 欧美激情亚洲精品| 亚洲日本中文字幕在线| 色综合久久天天综合网| 激情五月深爱五月| 国产精品一区二区三区乱码| 美女扒开大腿让男人桶| 成人自拍在线| 日本久久亚洲电影| 尤物网在线观看| 日韩精品一区二区三区swag| 五月婷婷开心网| 欧美激情一区二区三区在线| 天美一区二区三区| 国产欧美丝祙| 一区二区三区四区五区精品| 久久爱www.| 97涩涩爰在线观看亚洲| 成人精品一区二区三区免费 | 缅甸午夜性猛交xxxx| 国产一区二区观看| 91网在线免费观看| av中文字幕电影在线看| 国产性猛交xxxx免费看久久| 成人av无码一区二区三区| 日韩欧美亚洲范冰冰与中字| 亚洲综合久久av一区二区三区| 99视频超级精品| 中日韩av在线播放| 中文欧美日韩| 日本一区视频在线| 成人高潮视频| 国产精品自拍小视频| a'aaa级片在线观看| www.日韩免费| 人成在线免费视频| 日韩午夜激情av| 中文字幕丰满人伦在线| 亚洲成a人v欧美综合天堂 | 亚洲国产精彩视频| 精品视频一区二区不卡| 天天综合网入口| 亚洲黄一区二区三区| 中字幕一区二区三区乱码| av男人天堂一区| a级大片免费看| 快she精品国产999| 成年丰满熟妇午夜免费视频| 欧美军人男男激情gay| 精品产品国产在线不卡| 欧一区二区三区| 国产精品视频在线播放| 中文字幕成在线观看| 久久久亚洲影院| av在线免费网站| 最新的欧美黄色| 欧美成熟毛茸茸| 日韩国产中文字幕| 国产小视频一区| 日韩三级.com| 国产精品-色哟哟| 欧美日韩你懂的| 日韩av免费播放| 欧美性猛交xxxx黑人猛交| 久久国产在线视频| 亚洲理论在线观看| 成年人午夜剧场| 亚洲视频 欧洲视频| 在线观看日本黄色| 中文字幕电影一区| 老鸭窝一区二区| 国产99精品国产| 无码人妻一区二区三区免费n鬼沢| 国产又黄又大久久| 亚洲涩涩在线观看| 激情国产一区二区| 国产欧美精品一二三| 久久草av在线| 国产又黄又猛又粗| 香蕉久久a毛片| 日本一极黄色片| 日韩高清欧美激情| www.亚洲高清| 久久国产综合精品| 中文字幕中文在线| 国产寡妇亲子伦一区二区| 色婷婷一区二区三区在线观看| 日韩精品一二三四| 天天干天天操天天玩| 激情亚洲综合在线| 亚洲成人av免费观看| 国产不卡视频一区| 国产老熟女伦老熟妇露脸| 久久影院电视剧免费观看| 无码 人妻 在线 视频| 欧美国产精品v| 手机av在线看| 亚洲午夜在线视频| 国产www在线| 欧美日韩精品免费| 在线观看毛片网站| 91精品婷婷国产综合久久竹菊| 99热精品在线播放| 亚洲成av人乱码色午夜| 户外极限露出调教在线视频| 揄拍成人国产精品视频| 黄色网页网址在线免费| 欧美极品欧美精品欧美视频 | 国产欧美一区二| 成年人国产精品| av手机在线播放| 亚洲视频资源在线| 日本三级中文字幕| 欧美午夜精品理论片a级按摩| 国产免费一区二区三区免费视频| 亚洲精品一线二线三线| 国产专区在线| 久久91精品国产91久久久| 正在播放日韩精品| 91九色视频在线| 亚州国产精品| ijzzijzzij亚洲大全| 日韩视频不卡| 亚洲免费成人在线视频| 99精品视频一区二区| 中文乱码字幕高清一区二区| 亚州成人在线电影| 91丨九色丨丰满| 亚洲国产欧美一区| av电影在线网| 久久久久久久久国产| 99久久伊人| 久久精品日产第一区二区三区精品版 | 天天综合色天天综合色h| 18国产免费视频| 亚洲国产成人久久| 91福利在线视频| 2021国产精品视频| 粉嫩的18在线观看极品精品| 午夜久久久久久久久久久| 蜜桃久久久久久| 少妇视频在线播放| 91成人免费电影| 视频国产在线观看| 久久99久久99精品中文字幕| 香蕉久久一区| 杨幂一区欧美专区| 裸体在线国模精品偷拍| 色欲AV无码精品一区二区久久| 色综合一区二区| 日本午夜在线视频| 日本一区二区三区在线播放| 日韩高清一级| 黄色免费观看视频网站| 不卡一区中文字幕| 日本一二三区视频| 日韩的一区二区| 松下纱荣子在线观看| 精品国产乱码久久久久软件| 亚洲免费高清| 国产chinese中国hdxxxx| 亚洲一区视频在线| 神马久久久久久久久久| 91av在线播放视频| 蜜桃国内精品久久久久软件9| 人妻熟女一二三区夜夜爱| 久久香蕉国产线看观看99| 亚洲第一网站在线观看| 一本色道久久88精品综合| 色猫猫成人app| 宅男av一区二区三区| 国产综合久久久久影院| 少妇影院在线观看| 亚洲精品一区二区三区香蕉| 欧美极品videos大乳护士| 色姑娘综合av| 黄一区二区三区| 中文字幕一区二区三区手机版| 亚洲国产小视频在线观看| 波多野结衣久久精品| 亚洲在线欧美| 国产成人丝袜美腿| 国产成人精品网| 色先锋资源久久综合5566| 美国十次综合久久| 欧美精品久久久久久久免费| 国产日本一区二区| 亚洲天堂中文字幕在线| 久久99精品视频一区97| 亚洲自拍电影| 999这里有精品| 亚洲高清免费视频| 国产在线一二三区| 91日韩在线播放| 亚洲视频1区| 永久av免费网站| 日韩成人在线视频| 超碰国产精品一区二页| 日韩一级性生活片| 国产欧美一区二区三区鸳鸯浴 | 亚洲国产成人久久综合| 自拍偷自拍亚洲精品被多人伦好爽| 中日韩在线视频| heyzo一本久久综合| 中文字幕福利视频| 91极品视频在线| 国产精品久久观看| 成年人在线观看av| 欧美福利视频导航| 日韩免费福利视频| 国产成人亚洲综合无码| 国产视频一区二区在线| 粉嫩小泬无遮挡久久久久久|