日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activiti的使用技巧

發布時間:2024/9/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activiti的使用技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Activiti的使用技巧
    • 1、環境的搭建:activiti-spring 7.0.0+連接池+mysql
      • 1.1 依賴如下:
      • 1.2 連接池和數據庫配置:
      • 1.3 activiti的配置,通過config文件注入的方式:
    • 2、部署
      • 2.1 自動部署
      • 2.2 手動部署
      • 2.3 表單介紹
    • 3、創建流程表
    • 4、開始流程
    • 5、處理任務
      • 5.1 獲取任務
      • 5.2 處理任務
    • 6、監聽器設置:
      • 6.1 class方式:填寫的是class全路徑,具體的方法通過實現ExecutionListener,TaskListener判斷實現
      • 6.2 expression方式:填寫的是具體的方法,也就是class.method()
      • 6.3 delegateExpression方式:處理的是eventlistener,是處理對事件的監聽,delegateExpression的意思是:class和events描述,delegate的意思是表達的方式是不是直接告訴Expression,有通過activiti。
    • 7、變量的設置:
    • 8、流程的操作
      • 8.1 委派任務
      • 8.2 根據指定人查詢任務
      • 8.3 根據任務擁有者查詢任務
      • 8.4 委派人完成任務
      • 8.5 將任務委派他人完成
      • 8.5 掛起流程實例
      • 8.6 刪除流程實例
      • 8.7激活掛起的流程實例
      • 8.8 激活、掛起流程定義

Activiti的使用技巧

1、環境的搭建:activiti-spring 7.0.0+連接池+mysql

1.1 依賴如下:

<properties><java.version>1.11</java.version></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.0.0.GA</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.9</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version></dependency></dependencies>

1.2 連接池和數據庫配置:

注意配置nullCatalogMeansCurrent=true,否則自動部署時,表無法創建成功。

spring:#業務核心數據源datasource:url: jdbc:mysql://localhost:3306/d201903290931?characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=trueusername: rootpassword: 880808driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource#druid配置druid:#initialSizeinitialSize: 10#minPoolSizeminIdle: 10#maxPoolSizemaxActive: 100poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 100#是否自動提交事務,如果應用中通過Spring或其他框架顯示控制事務提交則可以設置為false,否則設置為truedefaultAutoCommit: false#配置獲取連接等待超時的時間maxWait: 10000#配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位毫秒timeBetweenEvictionRunsMillis: 60000#配置一個連接在池中最小生存的時間,單位毫秒minEvictableIdleTimeMillis: 300000#連接檢測屬性配置testWhileIdle: truevalidationQuery: SELECT 'x' FROM DUALvalidationQueryTimeout: 5000connectionProperties: oracle.net.CONNECT_TIMEOUT=3000;oracle.net.READ_TIMEOUT=5000removeAbandoned: trueremoveAbandonedTimeoutMillis: 300000testOnBorrow: false

1.3 activiti的配置,通過config文件注入的方式:

關注2點:自動部署的文件路徑,監聽器通過bean注入。

@Configuration public class ActivitiConfig {@Autowiredprivate MyExecutionListener myExecutionListener;@Autowiredprivate MyTaskListener1 myTaskListener1;@Beanpublic ProcessEngine processEngine(DataSourceTransactionManager transactionManager, DataSource dataSource) throws IOException {SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();//自動部署已有的流程文件Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceLoader.CLASSPATH_URL_PREFIX + "/processes/*.xml");configuration.setTransactionManager(transactionManager);configuration.setDataSource(dataSource);configuration.setDatabaseSchemaUpdate("true");configuration.setAsyncExecutorActivate(true);configuration.setHistoryLevel(HistoryLevel.FULL);configuration.setDeploymentResources(resources);Map<Object, Object> beans = new HashMap<>(10);beans.put("myExecutionListener", myExecutionListener);beans.put("myTaskListener1", myTaskListener1); /* beans.put("surveyProcessListener", surveyProcessListener);beans.put("lossVerificationProcessListener", lossVerificationProcessListener);beans.put("investigateProcessListener", investigateProcessListener);*/configuration.setBeans(beans);//configuration.setDbIdentityUsed(false);return configuration.buildProcessEngine();}@Beanpublic RepositoryService repositoryService(ProcessEngine processEngine) {return processEngine.getRepositoryService();}@Beanpublic RuntimeService runtimeService(ProcessEngine processEngine) {return processEngine.getRuntimeService();}@Beanpublic TaskService taskService(ProcessEngine processEngine) {return processEngine.getTaskService();}@Beanpublic HistoryService historyService(ProcessEngine processEngine) {return processEngine.getHistoryService();}@Beanpublic ManagementService managementService(ProcessEngine processEngine) {return processEngine.getManagementService();}//@Bean//public IdentityService identityService(ProcessEngine processEngine) { // return processEngine.getIdentityService(); // }}

當無法注入的時候,可以使用通用類,直接注入:

import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component;/*** @author xmaxing* @description* @date 2019-03-29 16:45*/ @Component public class SpringContextUtil implements ApplicationContextAware {// Spring應用上下文環境@Autowiredprivate static ApplicationContext applicationContext;/*** 實現ApplicationContextAware接口的回調方法,設置上下文環境** @param applicationContext*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {SpringContextUtil.applicationContext = applicationContext;}/*** @return ApplicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 獲取對象** @param name* @return Object* @throws BeansException*/public static Object getBean(String name) throws BeansException {return applicationContext.getBean(name);}}

2、部署

2.1 自動部署

springboot會自動部署,就可以直接開始流程處理了。

2.2 手動部署

@Overridepublic boolean devlopActiviti(String folderPath, HashMap<String, String> map) {Deployment deploy = repositoryService.createDeployment()// 創建一個部署構建器.addClasspathResource(folderPath + File.separator + map.get("id") + ".bpmn")// 從類路徑一次只能添加一個文件.addClasspathResource(folderPath + File.separator + map.get("id") + ".png")// 流程圖片.name(map.get("name")).category(map.get("category")).deploy();LOGGER.info("流程名稱【 {}】", deploy.getName());LOGGER.info("流程id【{}】", deploy.getId());LOGGER.info("流程類別【{}】", deploy.getCategory());return true;}@Overridepublic boolean deployActivitiByZip(String folderPath, HashMap<String, String> map) {InputStream in = this.getClass().getClassLoader().getResourceAsStream("folderPath" + File.separator + map.get("id") + ".bpmn");ZipInputStream zipInputStream = new ZipInputStream(in);Deployment deploy = repositoryService.createDeployment()// 創建一個部署構建器.addZipInputStream(zipInputStream).name(map.get("name")).category(map.get("category")).deploy();LOGGER.info("流程名稱【 {}】", deploy.getName());LOGGER.info("流程id【{}】", deploy.getId());LOGGER.info("流程類別【{}】", deploy.getCategory());return true;}

測試

@Testpublic void deplomentActiviti() {String folderPath = "study/activiti/diagrams/leaveBill";HashMap<String, String> map = new HashMap<>();map.put("name", "請假流程");// 名稱map.put("id", "leaveBill");// idmap.put("category", "辦公流程");// 類別

2.3 表單介紹

ACT_RE_DEPLOYMENT(部署對象表) ACT_RE_PROCDEF(流程定義表) ACT_GE_BYTEARRAY(資源文件表) ACT_GE_PROPERTY(主鍵生成表)ACT_RE_*: 'RE'表示repository。 這個前綴的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。 ACT_RU_*: 'RU'表示runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti只在流程實例執行過程中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表可以一直很小速度很快。 ACT_ID_*: 'ID'表示identity。 這些表包含身份信息,比如用戶,組等等。 ACT_HI_*: 'HI'表示history。 這些表包含歷史數據,比如歷史流程實例, 變量,任務等等。 ACT_GE_*: 'GE'表示general。通用數據, 用于不同場景下,如存放資源文件。資源庫流程規則表1) act_re_deployment 部署信息表2) act_re_model 流程設計模型部署表3) act_re_procdef 流程定義數據表運行時數據庫表1) act_ru_execution運行時流程執行實例表2) act_ru_identitylink運行時流程人員表,主要存儲任務節點與參與者的相關信息3) act_ru_task運行時任務節點表4) act_ru_variable運行時流程變量數據表歷史數據庫表1) act_hi_actinst 歷史節點表2) act_hi_attachment歷史附件表3) act_hi_comment歷史意見表4) act_hi_identitylink歷史流程人員表5) act_hi_detail歷史詳情表,提供歷史變量的查詢6) act_hi_procinst歷史流程實例表7) act_hi_taskinst歷史任務實例表8) act_hi_varinst歷史變量表組織機構表1) act_id_group用戶組信息表2) act_id_info用戶擴展信息表3) act_id_membership用戶與用戶組對應信息表4) act_id_user用戶信息表這四張表很常見,基本的組織機構管理,關于用戶認證方面建議還是自己開發一套,組件自帶的功能太簡單,使用中有很多需求難以滿足通用數據表1) act_ge_bytearray二進制數據表2) act_ge_property屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄。

3、創建流程表

startevent–>usertask1–>usertask2–>endevent

<process id="listenerTask1" name="任務監聽器流程" isExecutable="true"><startEvent id="startevent" name="Start"><extensionElements><activiti:executionListener event="start" expression="${myExecutionListener.processStart(execution)}"></activiti:executionListener></extensionElements></startEvent><endEvent id="endevent1" name="End"></endEvent><userTask id="usertask1" name="User Task" activiti:assignee="#{createLoginName}"><extensionElements><activiti:taskListener event="complete" expression="${myTaskListener1.taskComplete(task)}"><activiti:field name="arg"><activiti:string><![CDATA[gengzhn]]></activiti:string></activiti:field></activiti:taskListener></extensionElements></userTask><sequenceFlow id="flow1" sourceRef="startevent" targetRef="usertask1"></sequenceFlow><sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow><userTask id="usertask2" name="User Task" activiti:assignee="#{checkBywhom}"></userTask><sequenceFlow id="flow3" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow><endEvent id="endevent2" name="End"></endEvent><sequenceFlow id="flow4" sourceRef="usertask2" targetRef="endevent2"></sequenceFlow></process>

4、開始流程

@Overridepublic boolean startActiviti(String processDefinitionKey, HashMap<String, Object> map) {// 取得流程實例ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, map);LOGGER.info("流程(流程執行對象實例)id【{}】", processInstance.getId());// execution對象LOGGER.info("流程實例id:【{}】", processInstance.getProcessInstanceId());// processInstance對象LOGGER.info("流程定義id【{}】", processInstance.getProcessDefinitionId());// 默認為最新的idreturn true;} @Testpublic void startActiviti() {String processDefinitionKey = "listenerTask1";// 設置變量HashMap<String, Object> map = new HashMap<>();map.put("createLoginName", "31smart.geng.123");activitiService.startActiviti(processDefinitionKey, map);}

注意:流程實例ID(process的ID),流程定義ID(process的定義描述ID),執行對象ID(process的具體task的ID),processDefinitionKey為流程的定義的名稱。

2019-03-31 22:27:18.776 INFO 1528 --- [ main] c.e.d.service.Impl.ActivitiServiceImpl : 流程(流程執行對象實例)id【175001】 2019-03-31 22:27:18.776 INFO 1528 --- [ main] c.e.d.service.Impl.ActivitiServiceImpl : 流程實例id:【175001】 2019-03-31 22:27:18.777 INFO 1528 --- [ main] c.e.d.service.Impl.ActivitiServiceImpl : 流程定義id【listenerTask1:10:160009】

5、處理任務

5.1 獲取任務

@Overridepublic boolean getTaskByLoginName(String processDefinitionKey, String loginName) {TaskQuery taskQuery = taskService.createTaskQuery();List<Task> list = taskQuery.processDefinitionKey(processDefinitionKey).taskAssignee(loginName).list();for (Task task : list) {LOGGER.info("任務處理人【{}】", task.getAssignee());LOGGER.info("流程名稱【{}】", task.getName());LOGGER.info("任務id【{}】", task.getId());LOGGER.info("流程定義id【{}】", task.getProcessDefinitionId());LOGGER.info("執行對象id【{}】", task.getExecutionId());}return true;} @Overridepublic List<Task> getTaskByDeploymentId(String deploymentId, String processDefinitionKey, String executionId,String loginName) {List<Task> list = taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).deploymentId(deploymentId).taskAssignee(loginName).executionId(executionId).list();// 獲取當前人的return list;}

5.2 處理任務

@Overridepublic boolean startActivitiAndFinsh(String processDefinitionKey, HashMap<String, Object> map) {// 取得流程實例ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, map);LOGGER.info("流程(流程執行對象實例)id【{}】", processInstance.getId());// execution對象LOGGER.info("流程實例id:【{}】", processInstance.getProcessInstanceId());// processInstance對象LOGGER.info("流程定義id【{}】", processInstance.getProcessDefinitionId());// 默認為最新的idLOGGER.info("流程實例id【{}】", processInstance.getSuperExecutionId());List<Task> tasks = this.getTaskByDeploymentId(processInstance.getDeploymentId(), processDefinitionKey,processInstance.getId(), (String) map.get("createLoginName"));for (Task task : tasks) {this.finshTask(task.getId());}return true;} @Testpublic void finshTask() {String taskId = "137507";// 設置變量HashMap<String, Object> map = new HashMap<>();map.put("checkBywhom", "3001smart.geng.123");activitiService.finshTask(taskId,map); // activitiService.finshTask(taskId);}

6、監聽器設置:

6.1 class方式:填寫的是class全路徑,具體的方法通過實現ExecutionListener,TaskListener判斷實現

<process id="listenerTask" name="任務監聽器流程" isExecutable="true"><startEvent id="startevent" name="Start"><extensionElements><activiti:executionListener event="start" class="com.example.demo13.service.ActivitiListener"></activiti:executionListener></extensionElements></startEvent><endEvent id="endevent1" name="End"></endEvent><userTask id="usertask1" name="User Task" activiti:assignee="#{createLoginName}"><extensionElements><activiti:taskListener event="complete" class="com.example.demo13.service.MyTaskListener"><activiti:field name="arg"><activiti:string><![CDATA[gengzhn]]></activiti:string></activiti:field></activiti:taskListener></extensionElements> public class ActivitiListener implements ExecutionListener,TaskListener {private static final Logger LOGGER = LoggerFactory.getLogger(ActivitiServiceImpl.class);private static final long serialVersionUID = 6200534335483960408L;private Expression arg;public Expression getArg() {return arg;}public void setArg(Expression arg) {this.arg = arg;}@Overridepublic void notify(DelegateExecution execution) {String eventName = execution.getEventName();// startif ("start".equals(eventName)) {LOGGER.info("start=========");HashMap<String, Object> map = new HashMap<>();} else if ("end".equals(eventName)) {LOGGER.info("end=========");} else if ("take".equals(eventName)) {LOGGER.info("take=========");}}@Overridepublic void notify(DelegateTask delegateTask) {// 實現TaskListener中的方法String eventName = delegateTask.getEventName();LOGGER.info("任務監聽器:{}", arg.getValue(delegateTask));if ("create".endsWith(eventName)) {LOGGER.info("create=========");} else if ("assignment".endsWith(eventName)) {LOGGER.info("assignment========");} else if ("complete".endsWith(eventName)) {LOGGER.info("complete===========");} else if ("delete".endsWith(eventName)) {LOGGER.info("delete=============");}}}

6.2 expression方式:填寫的是具體的方法,也就是class.method()

<process id="listenerTask1" name="任務監聽器流程" isExecutable="true"><startEvent id="startevent" name="Start"><extensionElements><activiti:executionListener event="start" expression="${myExecutionListener.processStart(execution)}"></activiti:executionListener></extensionElements></startEvent><endEvent id="endevent1" name="End"></endEvent><userTask id="usertask1" name="User Task" activiti:assignee="#{createLoginName}"><extensionElements><activiti:taskListener event="complete" expression="${myTaskListener1.taskComplete(task)}"><activiti:field name="arg"><activiti:string><![CDATA[gengzhn]]></activiti:string></activiti:field></activiti:taskListener></extensionElements>

類需要添加到bean()

Map<Object, Object> beans = new HashMap<>(10);beans.put("myExecutionListener", myExecutionListener);beans.put("myTaskListener1", myTaskListener1); /* beans.put("surveyProcessListener", surveyProcessListener);beans.put("lossVerificationProcessListener", lossVerificationProcessListener);beans.put("investigateProcessListener", investigateProcessListener);*/configuration.setBeans(beans); @Service public class MyExecutionListener {private static final Logger LOGGER = LoggerFactory.getLogger(ActivitiServiceImpl.class);public void processStart(DelegateExecution execution) {LOGGER.info("start===================================================================");}} @Service public class MyTaskListener1 {private static final Logger LOGGER = LoggerFactory.getLogger(ActivitiServiceImpl.class);private Expression arg;public Expression getArg() {return arg;}public void setArg(Expression arg) {this.arg = arg;}public void taskComplete(DelegateTask task) { // LOGGER.info("任務監聽器:{}", arg.getValue(delegateTask));LOGGER.info("任務監聽器:complete===========");}}

6.3 delegateExpression方式:處理的是eventlistener,是處理對事件的監聽,delegateExpression的意思是:class和events描述,delegate的意思是表達的方式是不是直接告訴Expression,有通過activiti。

示例如下:

<extensionElements><activiti:eventListener events="ACTIVITY_CANCELLED" delegateExpression="${surveyProcessListener}"></activiti:eventListener></extensionElements> <extensionElements><activiti:eventListener class="org.activiti.engine.test.MyEventListener" /><activiti:eventListener delegateExpression="${testEventListener}" events="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" /></extensionElements> <extensionElements><activiti:eventListener class="org.activiti.engine.test.MyEventListener" entityType="task" /><activiti:eventListener delegateExpression="${testEventListener}" events="ENTITY_CREATED" entityType="task" /></extensionElements> Supported values for the entityType are: attachment, comment, execution, identity-link, job, process-instance, process-definition, task. @Service public class SurveyProcessListener implements ActivitiEventListener {}@Overridepublic void onEvent(ActivitiEvent event) {//如果流程取消if (ActivitiEventType.ACTIVITY_CANCELLED == event.getType()) {// TODO: 2019-03-08 流程取消,發送各種消息,String processInstanceId = event.getProcessInstanceId();log.info("surveyProcessListener.onEvent.ACTIVITY_CANCELLED, processInstanceId:{}", processInstanceId);}}@Overridepublic boolean isFailOnException() {return false;} }

7、變量的設置:

在代理監聽器里無法注入RuntimeService或者taskService,使用bean注入,或者使用delegateTask.setVariable

((RuntimeService)SpringContextUtil.getBean("runtimeService")).setVariable(delegateTask.getExecutionId(),"checkBywhom", "x00000000xoo");runtimeService.setVariable(delegateTask.getExecutionId(),"checkBywhom", "xxoo"); delegateTask.setVariable("checkBywhom", "xxxxxxx");LOGGER.info("complete==========="); @Overridepublic boolean setVariableByExcutionId(String executionId, boolean isLocal, HashMap<String, Object> map) {/** runtimeService.setVariablesLocal(executionId, variableName, value);** 設置本執行對象的變量,該作用域只在當前的executionId中 runtimeService.setVariableLocal(executionId,* variableName, value);** 可以設置對個變量,放在map中*/if (isLocal) {runtimeService.setVariablesLocal(executionId, map);} else {runtimeService.setVariables(executionId, map);}return true;}@Overridepublic Map<String, Object> getVariableByExcutionId(String executionId, boolean isLocal) {Map<String, Object> variablesMap = new HashMap<String, Object>();if (isLocal) {variablesMap = runtimeService.getVariablesLocal(executionId);} else {variablesMap = runtimeService.getVariables(executionId);}return variablesMap;}@Overridepublic boolean setVariableByTaskId(String taskId, String objectName, Object object) {taskService.setVariable(taskId, objectName, object);return true;}@Overridepublic boolean setVariableByTaskId(String taskId, boolean isLocal, HashMap<String, Object> map) {/** taskService.setVariable(taskId, variableName, value);** 設置本執行對象的變量,該作用域只在當前的executionId中 taskService.setVariableLocal(taskId,* variableName, value); 可以設置對個變量,放在map中*/if (isLocal) {taskService.setVariablesLocal(taskId, map);} else {taskService.setVariables(taskId, map);}return true;}@Overridepublic Map<String, Object> getVariableByTaskId(String taskId, boolean isLocal) {Map<String, Object> variablesMap = new HashMap<String, Object>();if (isLocal) {variablesMap = taskService.getVariablesLocal(taskId);} else {variablesMap = taskService.getVariables(taskId);}return variablesMap;}@Overridepublic <T> T getVariableByTaskId(String taskId, String objectName, Class<T> tClass) {T bean = (T) taskService.getVariable(taskId, objectName);return bean;}@Overridepublic boolean delegateTask(String taskId, String loginName) {taskService.delegateTask(taskId, loginName);return true;}

8、流程的操作

8.1 委派任務

/*** 委派任務** @param taskId* @param loginName* @return*/boolean delegateTask(String taskId, String loginName);@Overridepublic boolean delegateTask(String taskId, String loginName) {taskService.delegateTask(taskId, loginName);return true;}/*** 指定代辦人*/@Testpublic void delegateTask() {String taskId = "2511";String loginName = "0003";activitiService.delegateTask(taskId, loginName);}

8.2 根據指定人查詢任務

/*** 根據指定人查詢任務** @param processDefinitionKey* @param assignee* @return*/boolean getTaskByAssignee(String processDefinitionKey, String assignee);@Overridepublic boolean getTaskByAssignee(String processDefinitionKey, String assignee) {TaskQuery taskQuery = taskService.createTaskQuery();// 任務列表List<Task> list = taskQuery.processDefinitionKey(processDefinitionKey).taskAssignee(assignee).list();// 指定辦理人for (Task task : list) {LOGGER.info("任務處理人【{}】", task.getAssignee());LOGGER.info("流程名稱【{}】", task.getName());LOGGER.info("任務id【{}】", task.getId());LOGGER.info("流程定義id【{}】", task.getProcessDefinitionId());LOGGER.info("執行對象id【{}】", task.getExecutionId());}return true;}@Testpublic void getTaskByAssignee() {String processDefinitionKey = "delegateTask";String assignee = "0003";activitiService.getTaskByAssignee(processDefinitionKey, assignee);}

8.3 根據任務擁有者查詢任務

/*** 根據任務擁有者查詢任務** @param processDefinitionKey* @param owner* @return*/ boolean getTaskByOwner(String processDefinitionKey, String owner);@Overridepublic boolean getTaskByOwner(String processDefinitionKey, String owner) {TaskQuery taskQuery = taskService.createTaskQuery();// 任務列表List<Task> list = taskQuery.processDefinitionKey(processDefinitionKey).taskOwner(owner).list();// 指定辦理人for (Task task : list) {LOGGER.info("任務處理人【{}】", task.getAssignee());LOGGER.info("流程名稱【{}】", task.getName());LOGGER.info("任務id【{}】", task.getId());LOGGER.info("流程定義id【{}】", task.getProcessDefinitionId());LOGGER.info("執行對象id【{}】", task.getExecutionId());LOGGER.info("任務擁有者【{}】", task.getOwner());}return true;}@Testpublic void getTaskByOwner() {String processDefinitionKey = "delegateTask";String owner = "0003";activitiService.getTaskByOwner(processDefinitionKey, owner);}

8.4 委派人完成任務

/*** 委派人完成任務** @param taskId* @param map* @return*/ boolean resolveTask(String taskId, Map<String, Object> map);@Overridepublic boolean resolveTask(String taskId, Map<String, Object> map) {taskService.resolveTask(taskId, map);return true;}/*** 正在運行的任務表中被委派人辦理任務后任務會回到委派人 ,歷史任務表中也一樣,只是多了一個人進行審批*/@Testpublic void resolveTask() {String taskId = "2511";Map<String, Object> map = new HashMap<>();activitiService.resolveTask(taskId, map);}

8.5 將任務委派他人完成

/*** 將任務委派他人完成** @param taskId* @param assignee* @return*/ boolean trunTask(String taskId, String assignee);@Overridepublic boolean trunTask(String taskId, String assignee) {taskService.setAssignee(taskId, assignee);return true;}/*** 任務轉辦,將任務交給其他人處理*/@Testpublic void turnTask() {String taskId = "7511";String assignee = "0003";activitiService.trunTask(taskId, assignee);}

8.5 掛起流程實例

/*** 掛起流程實例** @param processInstanceId* @return*/ boolean suspendProcessInstanceById(String processInstanceId);@Overridepublic boolean suspendProcessInstanceById(String processInstanceId) {runtimeService.suspendProcessInstanceById(processInstanceId);return true;}/*** 掛起流程*/@Testpublic void suspendProcess() {//SuspensionState ACTIVE = new SuspensionStateImpl(1, "active"); 激活// SuspensionState SUSPENDED = new SuspensionStateImpl(2, "suspended"); 掛起String processInstanceId = "70001";activitiService.suspendProcessInstanceById(processInstanceId);}

8.6 刪除流程實例

/*** 刪除流程實例** @param processInstanceId* @param reason* @return*/ boolean deleteProcessInstance(String processInstanceId, String reason);@Overridepublic boolean deleteProcessInstance(String processInstanceId, String reason) {runtimeService.deleteProcessInstance(processInstanceId, reason);return true;}@Testpublic void deleteProcessInstance() {String processInstanceId = "70001";String reason = "刪除原因";activitiService.deleteProcessInstance(processInstanceId, reason);}

8.7激活掛起的流程實例

/*** 激活流程實例(激活掛起的流程實例)** @param processInstanceId* @return*/ boolean activateProcessInstanceById(String processInstanceId);@Overridepublic boolean activateProcessInstanceById(String processInstanceId) {runtimeService.activateProcessInstanceById(processInstanceId);return true;}@Testpublic void activateProcessInstanceById(){String processInstanceId = "70001";activitiService.activateProcessInstanceById(processInstanceId);}

8.8 激活、掛起流程定義

/*** 掛起流程定義** @param processDefineKey* @param cascade* @return*/ boolean suspendProcessDefineKey(String processDefineKey, boolean cascade);/*** 激活流程定義** @param processDefineKey* @param cascade* @return*/ boolean activateProcessDefinitionByKey(String processDefineKey, boolean cascade);@Overridepublic boolean suspendProcessDefineKey(String processDefineKey, boolean cascade) {repositoryService.suspendProcessDefinitionByKey(processDefineKey,cascade,new Date());return true;}@Overridepublic boolean activateProcessDefinitionByKey(String processDefineKey,boolean cascade){repositoryService.activateProcessDefinitionByKey(processDefineKey,cascade,new Date());return true;@Testpublic void suspendProcessDefineBykey(){String processDefineKey = "";boolean cascade = true;activitiService.suspendProcessDefineKey(processDefineKey,cascade);}

總結

以上是生活随笔為你收集整理的Activiti的使用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

97超碰成人 | 在线亚洲小视频 | 五月天六月婷 | 精品视频免费在线 | 一级免费片 | 国产成视频在线观看 | 亚洲视频电影在线 | 99久久精品免费看国产免费软件 | 国产糖心vlog在线观看 | 人人爽人人 | 免费在线观看污网站 | 97在线成人| 91在线观看视频 | 五月天中文字幕mv在线 | 日韩av一区二区三区四区 | 欧美作爱视频 | 亚洲一区黄色 | 婷婷亚洲综合五月天小说 | 黄色在线观看免费 | 黄色三几片 | 园产精品久久久久久久7电影 | 久久99精品久久久久蜜臀 | 免费网站黄| 九九视频在线播放 | 国产一区二区三区 在线 | 亚洲精品在线一区二区 | 欧美贵妇性狂欢 | 亚洲人成免费 | 久久另类小说 | 伊人热 | 精久久久久 | 狠狠狠色丁香婷婷综合激情 | 中文在线8新资源库 | 成人av电影在线 | 日韩美女一级片 | 久久久久久久久久亚洲精品 | 国产日韩一区在线 | 日本韩国在线不卡 | 亚洲精品av中文字幕在线在线 | 99久久精品免费看国产四区 | 有码一区二区三区 | 粉嫩高清一区二区三区 | 国产成人久久精品一区二区三区 | 人人干在线 | 成人精品999 | 97成人在线免费视频 | 国产r级在线观看 | 亚洲涩涩涩涩涩涩 | 久久精品国产免费看久久精品 | 三级av在线免费观看 | 亚洲 欧美 综合 在线 精品 | 四虎影视成人永久免费观看亚洲欧美 | 超碰伊人网 | 色婷婷激情网 | 日韩精品一区二区在线视频 | 国产精品久久久久久五月尺 | 激情五月婷婷激情 | 国产视频一区二区在线播放 | 久久精品视频网址 | 亚洲最新av | 美女黄频 | 国产91影院| 中文字幕一区二区三区久久 | 日韩免费在线视频 | 免费日韩av片 | 久久久影院官网 | 99热精品国产 | 国产69久久久欧美一级 | 午夜久久久精品 | 九九一级片 | 亚洲人成人在线 | 丁香婷婷综合激情五月色 | 久久精品—区二区三区 | 日韩在线视频免费观看 | 久久se视频 | 麻豆国产电影 | 亚洲欧洲一区二区在线观看 | 欧美va天堂在线电影 | 色偷偷中文字幕 | 国产一区二区影院 | 成人h视频在线播放 | 天天鲁天天干天天射 | 国产 日韩 在线 亚洲 字幕 中文 | 少妇性色午夜淫片aaaze | 亚洲 欧美 另类人妖 | 久久久国产精品久久久 | 激情五月婷婷激情 | 国产99色| 日韩免费电影 | 中文字幕日韩电影 | 正在播放亚洲精品 | 精品国产亚洲日本 | 久久av网址 | 国产精品乱码久久久久久1区2区 | 五月激情丁香婷婷 | 午夜免费久久看 | 精品久久免费看 | 国产一级二级在线 | 中文字幕91在线 | 九九热精品视频在线播放 | 国产成人三级三级三级97 | 91九色视频在线观看 | 伊人日日干 | 超碰在线97观看 | 欧美黑人巨大xxxxx | 国产中文 | 亚洲黄色av网址 | 中文字幕国产精品一区二区 | 精品免费久久久久 | www.五月天激情| av免费观看网址 | 国产视频一 | 久久97视频| 九九九九精品九九九九 | 97超碰香蕉 | 色婷婷久久 | 国产1区2 | 亚洲国产精品视频在线观看 | 国产亚洲精品久久网站 | 中文字幕一区在线观看视频 | 91亚洲网| 日本中文字幕在线看 | 国产精选视频 | 天天干夜夜夜操天 | 欧美成人影音 | 久久免费视频播放 | 日韩69av | 最近免费观看的电影完整版 | 国产精品电影一区 | 日韩va亚洲va欧美va久久 | 成年人精品 | 国产精品久久99精品毛片三a | 国产精品久久久久久久久久尿 | 黄色app网站在线观看 | 成人免费xxxxxx视频 | 久热色超碰 | 超碰日韩在线 | 久久久久久久久久电影 | 日韩激情精品 | 91精品在线看 | 伊人婷婷激情 | 免费三级a | 精品国产一区二区三区在线 | 欧美日韩精品二区第二页 | wwwwww国产 | 久久国产午夜精品理论片最新版本 | 国产剧情一区在线 | 欧洲av不卡 | 涩涩成人在线 | 日本少妇久久久 | 久久精品中文视频 | 久久超 | 亚洲精品视频在线观看视频 | 夜夜操天天 | 在线免费观看国产精品 | 日日夜夜精品网站 | 黄色影院在线免费观看 | 欧美一级黄大片 | 99在线精品视频在线观看 | 正在播放国产一区 | 国产在线国产 | 西西www444 | 欧美日韩一区二区三区免费视频 | 日韩网| 久操免费视频 | 九九在线视频免费观看 | 久久精品一区二区国产 | 欧美乱淫视频 | 69av免费视频 | 久久亚洲日本 | 久久在线视频精品 | 免费观看www视频 | 美女视频免费精品 | 一区二区三区精品在线视频 | 一区二区三区精品在线 | 欧美大片在线观看一区 | 日韩欧美视频在线播放 | 亚洲精品短视频 | 九九综合久久 | 精品视频久久久 | 美国三级黄色大片 | 中文字幕av在线播放 | 久久精品影视 | 色偷偷88888欧美精品久久 | 久久99免费视频 | 色婷婷激情五月 | 久草视频观看 | 91在线在线观看 | 成av在线 | 日韩精品久久一区二区 | 97精品伊人 | 国产日韩欧美中文 | 成人在线播放av | 国产一级免费视频 | 午夜国产在线观看 | 精品久久久久久久久久久久久久久久久久 | 国产精品久久久久永久免费看 | 中文伊人 | 国产精品久久久久久电影 | 久久免费99精品久久久久久 | 婷婷在线观看视频 | 亚洲好视频 | 久草精品视频在线播放 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美成人在线免费 | 久久久精品 一区二区三区 国产99视频在线观看 | 91精品无人成人www | 天天射天天搞 | 伊人一级| 992tv人人网tv亚洲精品 | 91精品国产电影 | 日本精品中文字幕在线观看 | 黄网站色视频 | 日韩网站一区 | av电影中文字幕 | 啪啪免费试看 | 97高清免费视频 | 午夜三级大片 | 人人玩人人爽 | 在线有码中文字幕 | 欧美精品三级 | 欧美日韩在线看 | 国产伦精品一区二区三区照片91 | 免费下载高清毛片 | 美女视频永久黄网站免费观看国产 | 久久精品中文字幕一区二区三区 | 日韩欧美精品一区二区 | 国产成人久久av免费高清密臂 | 中文在线最新版天堂 | 一区二区三区 中文字幕 | 国产一区视频免费在线观看 | 国产我不卡 | 四虎精品成人免费网站 | 美女视频黄在线 | 特级毛片在线观看 | 日韩三级视频在线观看 | 亚洲成a人片77777kkkk1在线观看 | 九色91av | av成人在线播放 | 成人午夜电影免费在线观看 | 日韩最新理论电影 | 日产乱码一二三区别在线 | 日韩在线高清免费视频 | 欧美久草在线 | 婷婷丁香在线视频 | 久久综合久久综合久久 | 久久久久久久久久久久久久电影 | 色婷婷99| 91麻豆精品国产91久久久更新时间 | 免费观看福利视频 | 91精选| 在线免费观看国产精品 | 五月丁色 | 丰满少妇对白在线偷拍 | 亚洲播放一区 | 天天操 夜夜操 | 精品免费在线视频 | 国产五月天婷婷 | 91av视频播放 | 国产原创中文在线 | 精品在线视频一区二区三区 | 超碰97人人射妻 | 综合网久久 | 久久99国产精品免费 | 黄av免费| 午夜体验区 | 97色se| 在线观看亚洲国产 | 色在线中文字幕 | 国产成人a v电影 | 午夜精品一区二区三区在线观看 | 国产九九九精品视频 | 久久精品国产亚洲精品2020 | 免费网址你懂的 | 波多野结衣精品 | 国产精品不卡av | 天天干天天操天天操 | 国产正在播放 | 欧美黄色成人 | 亚洲精品视频播放 | 久久精品最新 | 日韩电影一区二区三区在线观看 | 日av免费 | 亚洲成a人片77777kkkk1在线观看 | 69av国产| 在线观看亚洲精品视频 | 亚洲区色| 国产精品日韩久久久久 | 国产一在线精品一区在线观看 | 日韩一区视频在线 | 综合久久综合久久 | 成人久久久久久久久久 | 亚洲国产中文字幕 | 欧美日韩网站 | 久久久久久久99精品免费观看 | 精品国产一区二区在线 | 精品久久久久一区二区国产 | www.夜色321.com | 欧美一级欧美一级 | 日本久久精品视频 | 最近乱久中文字幕 | 91系列在线 | 国产天天爽 | 婷婷色婷婷| 中文字幕精品一区久久久久 | 久久免费视频4 | 亚洲黄色在线播放 | 激情丁香婷婷 | 久久成人在线视频 | 九九色在线| 免费福利视频网站 | 国产精品专区h在线观看 | 国产精品理论片 | 久久久久久久久久久电影 | 超碰在线中文字幕 | 亚洲永久精品国产 | 激情综合网色播五月 | 国产精品a级 | 国产视频69 | 日韩在线电影一区二区 | 国产精品久久久久久久久久久久久久 | 99精品久久久久久久 | 欧美久草网| 日日夜夜精品网站 | 欧美日韩裸体免费视频 | 在线观看色网站 | 伊人五月综合 | 中文字幕在线观看av | 免费开视频| 国产日韩在线一区 | 色综合久久99 | 国产黄色精品网站 | 天天综合五月天 | 免费在线精品视频 | 国模视频一区二区 | 在线色资源 | 国产在线日本 | 成年人在线免费看 | 综合五月 | 超碰在线最新地址 | 99久久久国产精品美女 | 亚洲日本激情 | 青青草国产精品 | 精品国产福利在线 | 国产免费久久精品 | 五月天狠狠操 | 国内精品久久天天躁人人爽 | 国产麻豆果冻传媒在线观看 | 99精品视频在线观看 | 99精品久久久久久久 | 国产在线97 | 91九色精品女同系列 | 337p日本欧洲亚洲大胆裸体艺术 | 国产高清在线一区 | 热久久免费视频精品 | 成年人视频在线免费观看 | 在线观看亚洲精品视频 | 一区在线电影 | 国产最新视频在线观看 | 五月婷婷操| 国产特级毛片 | 国产精品久久久久毛片大屁完整版 | 一区二区欧美在线观看 | 免费看的毛片 | 久草在线网址 | 制服丝袜在线91 | 亚洲精品视频免费在线 | 欧美大片在线观看一区 | 国产日本亚洲高清 | 免费久久99精品国产婷婷六月 | 色综合天天色 | 国产精品免费久久久 | 精品特级毛片 | 国产一区二区久久精品 | 久久不射网站 | 国产精品美女999 | 国产三级视频 | 亚洲欧美在线视频免费 | 婷婷中文在线 | 亚洲精品影院在线观看 | www免费网站在线观看 | 日韩精品视频免费在线观看 | 婷婷丁香在线视频 | 亚洲视频 在线观看 | 日本99久久 | 永久免费视频国产 | 天天干天天拍天天操天天拍 | 久久久久国产一区二区三区四区 | 国产资源av | 99久久精品国产一区二区三区 | 一区二区电影网 | 久草在线视频在线 | 国产成人久久精品亚洲 | 麻豆91在线 | 国产精品刺激对白麻豆99 | 色综合咪咪久久网 | 日韩一区精品 | 国产99久久99热这里精品5 | 午夜精品一区二区三区在线观看 | av在线专区 | www.av小说 | 日韩高清成人 | 久久精品国产美女 | 婷婷色社区 | 丁香5月婷婷 | 27xxoo无遮挡动态视频 | 不卡的av中文字幕 | 国产品久精国精产拍 | 亚洲一区二区三区在线看 | 久久国产精品99国产 | 国产精品视频免费 | 日韩视频一区二区三区在线播放免费观看 | 五月婷在线观看 | 国产在线久草 | 欧美aaa大片 | 色在线网站| 亚洲欧美日本一区二区三区 | 黄色软件视频网站 | 国产一级h| 午夜精品视频一区 | 天天操天天操 | 99精品国产福利在线观看免费 | 亚洲最大成人免费网站 | 狂野欧美激情性xxxx | 五月婷综合网 | 日韩美女免费线视频 | 韩国一区在线 | 九九九在线观看 | 成人播放器 | 最近中文国产在线视频 | av中文在线 | 一区二区精品 | 免费视频18| 亚洲午夜av久久乱码 | 99久久精品国产观看 | 亚洲国产丝袜在线观看 | 国产群p | 色干综合 | 欧美精品在线观看免费 | 日本不卡视频 | 天天色播 | 91av蜜桃| 狠狠色婷婷丁香六月 | 久草在线视频资源 | 国内精品久久久久影院优 | 亚洲在线精品视频 | 国产精品一区二区在线播放 | 欧美精品国产综合久久 | 综合网久久| 美女福利视频在线 | 最新久久久 | 亚洲精品欧美专区 | 欧美另类视频 | 综合久久网 | 九色精品免费永久在线 | 欧美一二三区在线播放 | 又黄又爽又无遮挡的视频 | 在线一区电影 | 久久男人影院 | av网站在线观看播放 | 黄色在线成人 | 热久久视久久精品18亚洲精品 | 国产精华国产精品 | 人人草人人草 | 中文字幕高清免费日韩视频在线 | 一级一级一片免费 | 国产麻豆精品传媒av国产下载 | 美女免费电影 | 精品视频免费在线 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 欧美日韩3p | 久久精品香蕉视频 | 久久久久网址 | 摸bbb搡bbb搡bbbb | 91精品国产91久久久久 | 久久不卡免费视频 | 亚洲精品久久久久久国 | 91麻豆高清视频 | 亚洲国产操 | 欧美激情精品久久久久久免费 | 欧美激情第八页 | 天天综合色天天综合 | 国产美女免费 | 女人18毛片a级毛片一区二区 | 四虎免费在线观看视频 | 国产一级在线免费观看 | 久久婷婷影视 | 久草视频播放 | 91亚色在线观看 | 国产精品毛片一区二区 | 国产精品女主播一区二区三区 | 成人久久久久久久久久 | 欧美精品乱码久久久久 | 人人看看人人 | 激情视频91 | 亚洲免费视频观看 | 韩国精品视频在线观看 | av中文字幕在线免费观看 | 欧美黑人性猛交 | 久久久电影 | 五月天婷婷在线观看视频 | 日韩一级理论片 | a黄色片 | 精品国产电影一区二区 | 九九在线高清精品视频 | 国产精品久久久久久五月尺 | 国产精品乱码久久久久久1区2区 | 丁香视频在线观看 | 在线观看深夜视频 | 五月天丁香亚洲 | 一区二区不卡 | www.久久久久 | 日韩理论电影在线观看 | 91免费高清观看 | 久免费| 久久综合色综合88 | 色婷婷久久一区二区 | 久久国产一区二区三区 | 免费成人在线视频网站 | 综合色天天 | 成人资源网 | 亚洲精品在线二区 | 日韩在线观看第一页 | 中文乱幕日产无线码1区 | 91热爆在线观看 | 久久精品国产精品亚洲 | 伊人小视频 | 国产日韩精品在线观看 | 美女视频黄免费的 | 在线观看免费国产小视频 | 亚洲国产经典视频 | 日韩1级片| 国产一区二区成人 | 在线成人高清电影 | 国产精品黄网站在线观看 | 人人射| 韩国av永久免费 | 久操视频在线播放 | 97在线视频免费播放 | 久久不卡日韩美女 | 美女网站视频免费都是黄 | 狠狠做深爱婷婷综合一区 | 日韩在线播放av | 午夜免费福利视频 | 国产成人精品久久久久蜜臀 | www最近高清中文国语在线观看 | a黄色一级片 | 四虎永久免费在线观看 | 久久国产女人 | 免费精品国产va自在自线 | 天天骚夜夜操 | 高清国产一区 | 天天躁日日躁狠狠躁av麻豆 | 日韩av区| 五月婷香蕉久色在线看 | 天天操天天操天天操天天操天天操天天操 | 免费观看的黄色片 | 日韩在线免费小视频 | 色综合天天综合网国产成人网 | 久草在线观看 | 日韩美一区二区三区 | 久久久久免费精品 | 日韩黄色免费电影 | 国产va在线 | 福利网在线 | 97人人模人人爽人人喊网 | 日本中出在线观看 | 97国产精品一区二区 | 欧美日韩69 | 制服丝袜天堂 | 国产成年免费视频 | 国产一级电影网 | 久久五月婷婷丁香 | 97天堂网| 亚洲国产精品va在线看黑人动漫 | 亚洲三级性片 | 精品国产乱子伦一区二区 | 欧美日韩不卡在线观看 | 欧美做受高潮1 | www.色午夜,com | 久久久久久久久久久久久影院 | 天天色天天爱天天射综合 | 国产香蕉97碰碰碰视频在线观看 | 亚洲国产精品电影 | 成人全视频免费观看在线看 | 日韩3区 | 在线观看av的网站 | 91精品国产自产在线观看 | 日日操日日插 | 最新中文字幕 | 豆豆色资源网xfplay | 日韩电影在线观看中文字幕 | 国产精品一区专区欧美日韩 | 国产色视频一区 | 国产精品自产拍 | 日韩欧美网址 | 黄污网| 国产精品久久av | 国产亚洲精品久 | 九色精品 | 五月天高清欧美mv | 黄色软件在线观看视频 | 91高清视频在线 | 国产精品一区一区三区 | 91在线影院| 亚洲片在线观看 | 精品日韩在线 | 欧美一区二区在线 | 国产一区在线视频播放 | 激情婷婷网 | 91最新网址在线观看 | 久久国产精品色婷婷 | 2024av| 天天翘av| 91x色| 色综合久久久久久中文网 | 91在线免费播放视频 | 日本在线观看中文字幕 | 美女在线观看网站 | 免费手机黄色网址 | 欧美a级在线免费观看 | 美女黄色网在线播放 | 久久男人中文字幕资源站 | 久久久久久久久毛片精品 | 99热这里精品 | 麻豆91视频 | av一本久道久久波多野结衣 | 夜夜夜夜夜夜操 | 久久久午夜精品理论片中文字幕 | 婷婷av综合 | 久久综合欧美 | 99热官网 | 天天操天操 | 中文字幕在线观看三区 | 亚洲成人精品在线观看 | 91九色蝌蚪视频网站 | 日本三级吹潮在线 | 欧美亚洲一区二区在线 | 热久久视久久精品18亚洲精品 | 日韩黄色免费在线观看 | 手机av电影在线观看 | 岛国精品一区二区 | 国内外成人免费在线视频 | 在线观看黄色免费视频 | 91系列在线观看 | 欧美成人久久 | 久久人网 | 日韩在线在线 | 国产精品国内免费一区二区三区 | 欧美成人精品三级在线观看播放 | 日韩成人在线免费观看 | 激情久久久久久久久久久久久久久久 | 亚洲成人软件 | 国产高清不卡一区二区三区 | 欧美日韩一级久久久久久免费看 | 91av视频网| 在线看片一区 | 国产麻豆视频 | 国产91九色视频 | 在线日韩视频 | 91精品天码美女少妇 | 毛片网站在线观看 | 日日摸日日添日日躁av | 午夜视频在线观看一区二区三区 | 日韩电影中文 | 久久精品在线免费观看 | 久久精品麻豆 | 久久这里| 在线a人v观看视频 | aa一级片| 久久久穴 | 精品视频亚洲 | 国产高清日韩 | 日日综合 | а天堂中文最新一区二区三区 | 亚洲精品高清在线观看 | 日韩免费看视频 | 日韩一区二区三 | 人人看97| www在线观看国产 | www.黄色| 国产精品毛片久久 | 在线中文字幕一区二区 | 91视频在线免费 | 少妇bbb好爽| 国产精品久久久久一区 | 人人澡人人添人人爽一区二区 | 国产成人福利片 | 好看的国产精品视频 | 久久婷婷五月综合色丁香 | 日韩av影视 | www.夜夜夜| 97超碰资源网 | 久草在线99 | 激情久久网| 日韩在线免费视频 | 四虎成人精品 | 亚洲免费专区 | av免费电影网站 | 久久99久久99精品免观看粉嫩 | 精品国产精品一区二区夜夜嗨 | 色国产精品一区在线观看 | 97国产精品一区二区 | 久久精美视频 | 国产精品一区一区三区 | 午夜精品久久久久久 | 日韩激情影院 | 岛国av在线不卡 | 欧美在线18| 日韩网站免费观看 | 中日韩免费视频 | 狠狠干狠狠色 | 日韩专区 在线 | 欧美日韩在线播放一区 | 久久久国产电影 | 综合网色| 中文字幕在线观看网 | 91超在线 | 日韩精品在线播放 | 97看片| 国产在线欧美 | 精品九九久久 | 免费看成年人 | 成人一级片在线观看 | 婷婷亚洲综合五月天小说 | 亚洲人毛片 | 日日综合 | 97成人资源 | 日韩超碰 | 这里有精品在线视频 | 欧美九九视频 | 国产99久久久久久免费看 | 99色免费 | av亚洲产国偷v产偷v自拍小说 | 国产五月 | 免费观看成年人视频 | 欧洲精品久久久久毛片完整版 | 国产高清第一页 | 成人播放器 | 国内视频在线 | 欧美日韩精品综合 | 免费在线观看黄网站 | 亚洲高清av | 久久久久久久久影视 | 久久99国产精品久久99 | 99 视频 高清 | 在线观看国产一区二区 | 狠狠躁夜夜躁人人爽超碰91 | 亚洲免费观看视频 | 成人羞羞视频在线观看免费 | 久久久在线免费观看 | 精品国产成人av | 人人干人人干人人干 | 99精品国自产在线 | www在线观看视频 | 久久国产精品一区二区三区四区 | 久久精品99国产精品酒店日本 | 欧美精品久久人人躁人人爽 | 久久久黄视频 | 91精品国产自产91精品 | 成人在线观看你懂的 | 久久视频 | 日韩欧美国产精品 | 黄色毛片大全 | 美女久久久久久久久久 | 在线观看视频色 | 精品在线一区二区 | 国产精品欧美久久久久天天影视 | 美女在线免费视频 | 91精品网站 | 成人黄色电影视频 | 天天操天天摸天天爽 | 美女视频黄免费的 | 国产乱对白刺激视频在线观看女王 | 日韩欧美电影在线 | 亚洲黄色一级视频 | 国产精品久久久 | 国产精品免费观看网站 | 亚洲精品视频中文字幕 | 美女免费视频网站 | 婷婷视频| 一本一本久久a久久精品综合小说 | 国产中的精品av小宝探花 | 日韩一二区在线观看 | 有码中文字幕在线观看 | 一级黄色免费网站 | 在线视频久 | 久久久国产精品成人免费 | 国产香蕉视频在线播放 | 午夜黄网 | 黄色亚洲片 | 五月激情av | 国产又粗又猛又爽又黄的视频先 | 国产精品久久电影观看 | 成人一区二区三区在线 | 超碰97人人爱 | 一区二区三区日韩精品 | 狠狠色狠狠色综合日日92 | 久久精品免视看 | 99久久精品国产一区 | 国产原创中文在线 | 九九一级片| 成年人国产在线观看 | 黄色片视频在线观看 | 操少妇视频 | 色av男人的天堂免费在线 | 欧洲精品亚洲精品 | 三级免费黄| 国内99视频 | 国产白浆在线观看 | 99精品免费久久久久久久久 | 欧美精品一区二区免费 | 婷婷国产精品 | 欧美日韩啪啪 | 精品国产一区二区三区久久久蜜月 | 99久久久久成人国产免费 | 婷婷色在线观看 | 丁香在线观看完整电影视频 | 欧美三级免费 | 久久99热精品这里久久精品 | 性色av免费观看 | 久久久久久综合网天天 | 久久精品国产精品亚洲精品 | 国产黄色特级片 | 黄色三级在线看 | 欧美日韩国产色综合一二三四 | av福利在线播放 | 日韩成人中文字幕 | 在线国产能看的 | 久久精品亚洲综合专区 | 毛片永久新网址首页 | 免费十分钟 | 久久 地址| 久久精品黄| 黄色网www | 国产 日韩 在线 亚洲 字幕 中文 | 国产精品每日更新 | 亚洲精品国产第一综合99久久 | 国产精品中文久久久久久久 | 欧美一级大片在线观看 | 日韩动态视频 | 亚洲欧美国产精品 | 亚洲免费黄色 | 欧洲亚洲国产视频 | 色欧美88888久久久久久影院 | 欧美极度另类性三渗透 | 久久精品亚洲精品国产欧美 | 久久精品视频3 | 狠狠狠色丁香综合久久天下网 | 99婷婷狠狠成为人免费视频 | 五月花激情 | 国产视频在线看 | 久久精品区| 日韩电影在线观看一区二区三区 | 精品一区三区 | 日本精品久久久久中文字幕 | 亚洲欧美视频一区二区三区 | 91九色在线视频观看 | 黄色毛片在线观看 | 高清久久久 | 国产精品自产拍在线观看桃花 | 91av影视| 久久精品国产免费看久久精品 | 99精品国产99久久久久久福利 | 一区二区av | 四虎成人免费观看 | zzijzzij日本成熟少妇 | 在线免费中文字幕 | 亚洲免费国产 | 91精品国产自产老师啪 | 久久免费视频网站 | 在线观看一级 | 99视频在线精品免费观看2 | 国产破处视频在线播放 | 免费在线播放视频 | 日韩在线精品一区 | 麻豆小视频在线观看 | 日韩av片无码一区二区不卡电影 | 欧美aa一级 | 久久污视频 | 伊人网综合在线观看 | av色综合网 | 97视频入口免费观看 | 日韩亚洲国产中文字幕 | 西西www4444大胆视频 | 国内精品久久久久久久久 | 日韩免费二区 | 国产在线免费 | 成人久久久久 | 国产91区| 亚洲最新av网站 | 五月婷婷六月综合 | 亚洲一区二区三区毛片 | 波多野结衣在线中文字幕 | 亚洲中字幕 | 992tv在线 | 亚洲午夜在线视频 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 免费观看成人 | www欧美色| 美女黄久久 | 99精品免费在线观看 | a天堂最新版中文在线地址 久久99久久精品国产 | www.久久视频 | 999热视频 | 深爱婷婷激情 | 久久久高清一区二区三区 | 亚洲伊人av | 色久网| 久久国产精品精品国产色婷婷 | 一区二区三区免费播放 | 国产视频一区精品 | 亚洲精品合集 | 久久er99热精品一区二区三区 | 伊人五月天.com | 人人爽人人av | 91麻豆精品国产91久久久无限制版 | 日日爱999| 成人精品一区二区三区电影免费 | 超碰97成人| 日日日网| 久久久久国产视频 | 亚洲精色 | av免费在线播放 | 伊人五月婷 | 九九免费在线看完整版 | 九九av | 亚洲国产69 | 91看片在线播放 | 在线亚洲日本 | 中文字幕在线观看第二页 | 91在线操| 欧美日韩国产在线观看 | 少妇资源站 | www.97视频| 国偷自产视频一区二区久 | 成年人免费av网站 | 天天综合网天天综合色 | 丁香六月久久综合狠狠色 | a成人v | 亚洲最大成人免费网站 | 国产福利专区 | 一区二区三区免费看 | 婷婷久草 | 国产精品99久久免费观看 | 欧美巨乳波霸 | 看片网站黄 | 日韩精品一区二区在线 | 337p日本大胆噜噜噜噜 | 天堂在线一区二区 | 99精彩视频在线观看免费 | 91成人网在线观看 | 亚洲一级电影 | 天天爱av导航 | 国产精品久久久亚洲 | 黄色性av | av免费网站 | 日韩激情一二三区 | 在线观看亚洲专区 | 贫乳av女优大全 | 精品国产美女 | 国产精品一区二区免费看 | 婷婷丁香在线视频 | 日韩在线国产精品 | 日韩免费观看视频 | 成年人国产精品 | 成人超碰在线 | 天天干天天拍天天操 | 日韩字幕 | 男女视频国产 | 午夜视频免费在线观看 | 国产精品对白一区二区三区 | 香蕉一区 | av片一区 | 色偷偷88欧美精品久久久 | 99久免费精品视频在线观看 | 午夜国产福利视频 | 国产a级精品 | 免费 在线 中文 日本 | 国产精品欧美久久久久天天影视 | 中文字幕第一页在线视频 | 9色在线视频 | 色综合在 | 国产一区二区久久精品 | 久久精品一二区 | 国产精品一区免费在线观看 | 91污视频在线观看 | 亚洲爽爽网 | 成人在线播放免费观看 | 日日操日日插 | 国产精品白浆 | 91激情视频在线观看 | 91九色精品国产 | 四虎永久视频 | 日韩午夜三级 | 日韩av手机在线看 | 久久香蕉国产精品麻豆粉嫩av | 亚洲狠狠|