日韩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的使用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

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

人人澡视频 | 国产一性一爱一乱一交 | 国产大尺度视频 | 成人资源在线 | 久久免费黄色 | 丝袜美女视频网站 | 在线免费视频你懂的 | 亚洲婷久久 | 亚洲精品久久久久999中文字幕 | 国产1级毛片 | 狠狠色综合欧美激情 | 国产小视频在线 | 精品国产综合区久久久久久 | 国产视频二 | 韩国av一区二区三区 | 国产成本人视频在线观看 | 91麻豆精品国产91久久久无限制版 | 精品国产一区二区三区四区在线观看 | 亚洲在线高清 | 国产香蕉97碰碰久久人人 | 精品播放| 日本电影久久 | 日韩 在线 | 国产精品美女久久久久久久久久久 | 91久久国产精品 | 日韩中文字幕一区 | 日韩精品一区二区免费视频 | 婷婷国产在线观看 | 日韩久久视频 | 欧美日韩国产mv | 粉嫩av一区二区三区四区在线观看 | 免费麻豆 | 久久免费av电影 | 91亚洲精品在线 | 亚洲欧美激情插 | 亚洲美女免费精品视频在线观看 | 97精品欧美91久久久久久 | 久久黄色精品视频 | 久久国产热视频 | 99久久精品国产亚洲 | 国产精品中文在线 | 黄色免费国产 | 国产三级av在线 | 国产无遮挡又黄又爽在线观看 | 日韩视频精品在线 | 成人av一区二区三区 | 久久精品久久综合 | 中文字幕第一页av | 久久在线观看视频 | 夜夜爽夜夜操 | 四虎国产永久在线精品 | 国产麻豆精品免费视频 | 天天搞天天干 | 色视频在线看 | 亚洲码国产日韩欧美高潮在线播放 | 亚洲精品美女在线观看播放 | 男女激情麻豆 | 91精品国产综合久久福利不卡 | 日韩肉感妇bbwbbwbbw | 日韩视频免费 | 不卡的av在线播放 | 婷婷精品国产一区二区三区日韩 | 欧美日韩aaaa| 免费观看一级成人毛片 | 69av国产| 国产精品资源网 | 久久伊人精品一区二区三区 | 中国一 片免费观看 | 国产色视频网站2 | 亚洲欧美视频在线播放 | av国产网站| 欧美xxxxx在线视频 | 2018好看的中文在线观看 | 久久综合亚洲鲁鲁五月久久 | 国产精品涩涩屋www在线观看 | 天天干天天干天天干天天干天天干天天干 | 国产视频不卡 | 国内99视频| 天天爱天天操天天射 | 亚洲资源视频 | 欧美日韩不卡在线观看 | 欧美狠狠色| 成人免费视频a | 久久国产精品免费观看 | 国产精品精品国产色婷婷 | 精品久久久久久久久久久久久 | 日韩在线视频精品 | 久久9视频 | 探花系列在线 | 一区二区三区免费在线观看视频 | 日韩美女一级片 | 免费久久久久久 | 91在线你懂的 | 乱男乱女www7788 | 黄色a级片在线观看 | 亚洲精品免费在线观看视频 | 亚洲伊人成综合网 | www久 | 日韩在线第一 | 一区二区三区在线观看免费视频 | 亚洲精品大片www | 九月婷婷综合网 | 超碰在线公开免费 | h动漫中文字幕 | 欧美午夜精品久久久久 | 夜夜骑日日操 | av色网站| 日韩在线观看视频中文字幕 | 成人毛片一区 | 99久久9 | 免费在线观看av不卡 | 国产九九精品视频 | 亚洲精品免费在线观看视频 | 精品91久久久久 | 久久国产高清视频 | 国产又黄又爽又猛视频日本 | 久久精品毛片 | av电影在线免费观看 | 欧美日韩1区2区 | 日韩欧美大片免费观看 | 狠狠色丁香久久婷婷综合五月 | 手机av观看 | 国产一级性生活视频 | 8x8x在线观看视频 | 99精品影视 | 欧美成人69av | 天天曰天天爽 | 不卡的av片| 中文字幕欧美激情 | 视频91在线 | 亚洲精品中文在线观看 | 波多野结衣亚洲一区二区 | 中文字幕专区高清在线观看 | 日韩欧美在线播放 | 中文字幕亚洲高清 | 欧美日韩国产综合一区二区 | 国产一区成人 | 丰满少妇对白在线偷拍 | 亚洲精品乱码白浆高清久久久久久 | 99久久精品国产观看 | 亚洲黄色在线观看 | 99精品久久精品一区二区 | 欧美色噜噜 | 成人久久免费 | 亚洲最大成人免费网站 | 天天干天天做 | 欧美精品一区二区三区四区在线 | 久久久精品免费观看 | 日韩高清一 | 久久久久久高潮国产精品视 | 欧美日韩在线免费观看视频 | 日韩激情一二三区 | 成年人在线免费看视频 | 天天爽夜夜爽人人爽曰av | 人人舔人人爽 | 欧美日韩精品网站 | 国产精品大片在线观看 | 国产精品久久久久久久久久妇女 | 亚洲伊人网在线观看 | 麻豆视频免费在线观看 | 日韩成人不卡 | 五月天激情婷婷 | 亚洲精品国产成人av在线 | 91私密视频| 久久99精品国产麻豆婷婷 | 日韩在线视频观看免费 | 激情综合五月天 | 日韩最新av | 手机在线小视频 | www视频在线播放 | 日批视频在线观看免费 | 91经典在线 | 日韩精品亚洲专区在线观看 | 欧美日韩高清一区二区 | 黄色录像av | 91社区国产高清 | 成年人在线免费看视频 | 久久综合久久88 | 日韩av电影免费观看 | 亚洲精品午夜久久久久久久 | 欧美性受极品xxxx喷水 | 久久99久国产精品黄毛片入口 | 在线91播放| 天天躁天天躁天天躁婷 | 97爱爱爱 | 99九九热只有国产精品 | 久久国内精品99久久6app | 欧美极品一区二区三区 | 日韩理论电影在线观看 | 亚洲美女视频网 | www在线观看视频 | 久久精品视频日本 | 婷婷日日| 国产美女视频免费 | 91在线免费观看网站 | 久久久综合色 | 午夜精品久久久久久久久久久久久久 | 欧美日韩国产精品一区二区 | 久久一区国产 | www.夜夜操| 四虎4hu永久免费 | 黄色免费高清视频 | 亚洲成人家庭影院 | 国产高清视频 | 免费看片成人 | 国产视频日韩视频欧美视频 | 99久久国产免费,99久久国产免费大片 | 一区二区三区精品在线视频 | 午夜精品视频免费在线观看 | 亚洲精品国产精品国产 | 婷婷丁香激情综合 | 国产高清av在线播放 | 日韩精品视频在线观看网址 | 天天干天天射天天操 | 欧美国产日韩激情 | 国产亚洲一区二区在线观看 | 久久久精品福利视频 | 最近日本字幕mv免费观看在线 | 国产一区在线看 | 2019中文| 麻豆视频国产精品 | 手机成人在线电影 | 天天色成人网 | 日韩av免费观看网站 | 久久国内视频 | 狠狠操天天射 | 亚洲综合激情小说 | 一级性生活片 | 久久免费电影网 | 久久人人爽人人爽人人片 | 视频一区二区免费 | 高清免费av在线 | 日本激情视频中文字幕 | 欧美性生活小视频 | 亚洲视频在线免费观看 | 五月综合激情婷婷 | 在线99| wwwav视频 | 精品国产伦一区二区三区观看体验 | 国产亚洲久一区二区 | 在线观看视频精品 | 色99网| 欧美国产精品久久久久久免费 | 国产精品毛片一区二区 | 人人射人人射 | 三级视频国产 | 亚洲最快最全在线视频 | 亚洲蜜桃在线 | 91爱爱视频| 国产色爽| 久久久久亚洲a | 五月天天色 | 91成人在线网站 | 亚洲午夜在线视频 | 色网av| 在线a视频免费观看 | 黄色视屏av| 国产97av| 久久1区| 久久综合精品国产一区二区三区 | www久久九| 国产视频精品免费播放 | 天天干天天干天天 | 欧美日韩视频一区二区三区 | 91禁看片| 精品国精品自拍自在线 | 中文字幕人成不卡一区 | 久久综合桃花 | 久热香蕉视频 | 久久精品国产亚洲a | 国产污视频在线观看 | 日韩av手机在线看 | 超碰在线中文字幕 | 中文字幕日韩免费视频 | 超碰日韩在线 | 亚洲欧洲美洲av | 日韩黄色中文字幕 | 亚洲国产精品成人av | 又爽又黄又无遮挡网站动态图 | 日日弄天天弄美女bbbb | 在线天堂中文在线资源网 | 中文字幕在线观看免费高清完整版 | 伊人影院在线观看 | av天天在线观看 | www.香蕉视频在线观看 | 精品免费观看 | 日韩欧美91 | 在线视频日韩欧美 | 欧美网站黄色 | 四虎影视成人永久免费观看视频 | 久久久免费网站 | 国产亚洲情侣一区二区无 | 日韩区视频 | 精品久久1| 97偷拍在线视频 | www激情com | 亚洲人精品午夜 | 91在线视频免费观看 | 久久综合日 | 精品一区二区免费视频 | 国产精品中文字幕在线观看 | 色婷婷啪啪免费在线电影观看 | 国产日韩欧美在线看 | 碰超在线观看 | 久久久久免费精品国产小说色大师 | 亚洲成年人免费网站 | 亚洲精品456在线播放乱码 | 国产在线视频不卡 | 热精品 | 国产又粗又猛又黄又爽 | 国产精品久久久久久久av电影 | 中文亚洲欧美日韩 | 日日日日 | 亚洲综合少妇 | 在线看的av网站 | 国产91av视频在线观看 | 日韩免费观看高清 | 91综合色 | 国产精品麻豆三级一区视频 | 在线观看爱爱视频 | 男女免费视频观看 | 中文字幕在线播放一区 | 丁香婷婷综合色啪 | 手机看片午夜 | 日韩r级在线 | 久久免费看av | 月下香电影| 91久久久久久久一区二区 | 制服丝袜亚洲 | 日本中文字幕免费观看 | 一区二区三区四区精品 | 国产无套一区二区三区久久 | 丁香网五月天 | 黄网在线免费观看 | 久久综合电影 | 国产不卡精品 | 亚洲精品国产精品国自产观看浪潮 | 91色在线观看 | 天天草综合 | 婷婷去俺也去六月色 | 人人操日日干 | 国产1区2区 | 国产精品18久久久久久久久 | 人人澡澡人人 | 国产女人40精品一区毛片视频 | 亚洲精品天天 | 黄色大片国产 | 特级西西www44高清大胆图片 | 国产大片黄色 | 正在播放五月婷婷狠狠干 | 黄色电影小说 | 国产日韩欧美网站 | 精品视频在线看 | 久久久国产精华液 | 亚洲精品乱码久久 | 亚洲经典中文字幕 | 亚洲国产精品成人女人久久 | 国产精品视频最多的网站 | 色播五月激情五月 | 亚洲一区黄色 | 久久综合久久综合这里只有精品 | 成年人在线看片 | 日韩在线第一 | 国产专区在线播放 | 久草久草在线 | 免费观看黄 | 三级在线国产 | 国产在线91在线电影 | 青青草国产精品视频 | 天堂中文在线视频 | 精品久久1 | 亚洲午夜在线视频 | 97理论电影 | 丁香六月在线观看 | 天天综合网 天天 | 久久久麻豆 | 日韩精品免费在线观看 | 91精品在线免费观看 | 亚洲成人xxx| 午夜三级在线 | 狠狠狠色丁香婷婷综合久久88 | 99人久久精品视频最新地址 | 天天做日日做天天爽视频免费 | 91成人精品观看 | 欧美精品三级在线观看 | 婷婷丁香av | 五月天中文字幕 | 日日草视频 | 亚州五月| 日韩一区二区免费在线观看 | 97超碰国产在线 | 九九在线高清精品视频 | 日日干夜夜操视频 | 色噜噜噜 | 五月花丁香婷婷 | 亚洲精品一区二区18漫画 | 欧美一区三区四区 | 毛片二区| 国产二区电影 | 久久精品视频观看 | 美女久久久久久久久久 | 亚洲视频2 | 国产一区免费在线观看 | 人人射人人 | 日韩三区在线观看 | 久久精品精品电影网 | 日韩亚洲在线观看 | 亚洲精品久久久蜜桃直播 | 97高清视频 | 在线午夜电影神马影院 | 亚洲天堂网在线视频观看 | 人人干人人做 | 国产精品久久久久高潮 | 欧美aaaxxxx做受视频 | 午夜久久精品 | 国产精品18久久久久vr手机版特色 | 久久九精品| 欧美精品九九 | 五月婷婷久久综合 | 亚洲一区二区三区精品在线观看 | 天天天天色综合 | 久久精品99久久久久久2456 | 免费人成网 | 免费高清看电视网站 | 日本在线观看中文字幕 | 99久久精品免费看国产四区 | 91麻豆精品国产 | 国产精品成人久久久 | 久久免费精品一区二区三区 | 久久综合加勒比 | 国产视频在线观看免费 | 国产区高清在线 | 日韩免费电影网站 | 久久久www成人免费毛片麻豆 | 国产精品久久久久9999吃药 | 国产高清区 | 久久99精品久久久久婷婷 | 97国产在线 | 91视频91自拍 | 国产精品18久久久久vr手机版特色 | 91黄色在线看 | 97中文字幕 | 久久精品福利视频 | 夜色资源站国产www在线视频 | 69精品视频 | 伊人夜夜 | aaa毛片视频 | 日韩在线电影一区 | 在线观看 国产 | 日本三级中文字幕在线观看 | 久久噜噜少妇网站 | 日韩一区二区三区免费视频 | 国产成人精品国内自产拍免费看 | www.av免费 | 国产一级片视频 | 久草网在线观看 | 在线播放国产一区二区三区 | 免费a网 | 中文字幕一区二区在线播放 | 最近最新中文字幕 | 欧美精品成人在线 | 国产视频亚洲 | 亚洲国内精品在线 | 久久电影网站中文字幕 | 国产成人在线观看 | 91精品啪在线观看国产81旧版 | 精品999| 午夜av在线电影 | 在线影院av | 日韩高清av| 欧美日韩亚洲国产一区 | 国产日韩中文字幕 | www.久久com | 日日摸日日添夜夜爽97 | 日韩黄视频 | 国产一区高清在线 | 毛片区| 亚洲精品久久在线 | 成人av手机在线 | 久久久久免费精品国产 | 欧美激情奇米色 | 在线亚洲播放 | 欧美精品久久久久久久久久久 | 中文字幕av最新更新 | 亚洲婷婷网 | av免费黄色| 国产69久久久 | 天天摸日日摸人人看 | 欧美精品久久久久久久 | 91精品区| 久久成人午夜 | 精品国产一区二区三区蜜臀 | 91av视频网站| 超碰97在线资源 | 超碰在线成人 | 国产精品理论片在线播放 | 免费在线观看av | 国产资源站| 久久成人精品视频 | 综合天天色 | 国产精品九色 | 久久国产一区二区 | 国产精品久久久久久吹潮天美传媒 | 91精品色 | 日韩视频一区二区三区在线播放免费观看 | 一区二区电影在线观看 | 亚洲精品黄色片 | 久久五月天色综合 | av在线亚洲天堂 | 日韩av不卡在线播放 | 国产97在线视频 | 九九99 | 欧美va日韩va | 手机av在线免费观看 | 亚洲美女免费精品视频在线观看 | 91在线观| 亚洲电影影音先锋 | 中文字幕久久久精品 | 国产大尺度视频 | 天天综合色网 | 国产高清免费av | 草久草久| 成人免费观看视频网站 | 国产麻豆精品久久 | 麻豆成人在线观看 | 天天综合网 天天综合色 | 中文字幕精品一区久久久久 | 日韩视频免费播放 | 亚洲激情在线观看 | 97超碰站| 黄色av高清 | 久久成人高清 | 欧美乱码精品一区二区 | 精品久久久精品 | 日韩在线观看一区二区三区 | 欧美在线视频日韩 | 日韩69视频 | 精品久久99| 国产成人精品三级 | 国产拍揄自揄精品视频麻豆 | 超碰在线最新地址 | 人人澡人人爱 | 婷婷丁香狠狠爱 | 激情综合网婷婷 | 99国产精品一区 | 日韩欧美一区视频 | 国产精品video爽爽爽爽 | a视频免费在线观看 | 成人app在线播放 | 天天综合操 | 婷婷久操 | 日韩国产欧美在线视频 | 欧美片一区二区三区 | 中文字幕在线日亚洲9 | 天天干天天操天天干 | 国产精品亚洲视频 | 国产亚洲精品久久久久动 | 亚洲中字幕 | 丁香婷婷激情国产高清秒播 | 午夜性盈盈 | 在线观看免费一区 | 国产美女网站视频 | 国产日韩精品视频 | 444av| 成人永久视频 | 在线午夜av | 在线观看成人一级片 | www.天天干.com | 成人黄色小说网 | 99在线免费视频 | 亚洲 欧洲 国产 日本 综合 | 91在线看| av网站免费线看精品 | 97狠狠干 | 国产精品18久久久久久不卡孕妇 | 国产视频一区在线播放 | 黄色亚洲片 | 91尤物在线播放 | 特级大胆西西4444www | 高清不卡一区二区在线 | 成年人免费在线 | 亚洲精品短视频 | 美女免费黄网站 | 日韩精品免费在线播放 | 精品国内 | 黄色大全在线观看 | 久久草网站 | 日韩视频中文字幕在线观看 | 91视频-88av | 国产人在线成免费视频 | 免费三级骚 | 国产999精品| 日本激情视频中文字幕 | 99国产精品免费网站 | 激情五月婷婷综合网 | 精品免费久久久久久 | 日韩理论在线播放 | 99精品欧美一区二区三区 | 亚洲精品一区二区久 | 婷婷干五月 | 欧美午夜剧场 | 天天操天天操天天爽 | 天堂资源在线观看视频 | 国产精品久久久久久久久婷婷 | 在线免费观看黄色av | av综合站| 久久中文精品视频 | 日日日日干 | 99热在线这里只有精品 | 国产亚洲精品bv在线观看 | 午夜精品成人一区二区三区 | 香蕉97视频观看在线观看 | 久久婷婷久久 | 欧美另类69 | 日韩精品1区2区 | 一区二区激情 | 国产精品电影一区 | 免费高清看电视网站 | 亚洲无线视频 | 欧美天天射 | 九色porny真实丨国产18 | 在线看福利av| 91在线影视| 亚洲天堂色婷婷 | 欧美一级裸体视频 | 黄色免费大片 | 亚洲 成人 欧美 | 免费观看黄色av | 韩日成人av| 欧美一区在线观看视频 | 久久视频国产 | 久久久久久久99 | 久久久久北条麻妃免费看 | 欧美成人手机版 | 免费精品视频在线观看 | 国产精品二区在线观看 | 久久久午夜影院 | 五月激情姐姐 | 射射射av | 中文字幕在线观看第三页 | 国产日产精品久久久久快鸭 | 日本三级吹潮在线 | 国产特级毛片aaaaaa高清 | 国产一区二区三区 在线 | 中文字幕在线免费观看 | 久久视频免费观看 | av黄色影院 | 国产在线播放一区 | 日本性xxxxx| 国产免费片 | 国产一区在线精品 | 中文字幕资源网在线观看 | 亚洲经典中文字幕 | 96精品视频 | 亚洲精品成人av在线 | 在线观看视频国产一区 | 2023av在线| 亚洲aⅴ一区二区三区 | 在线看片一区 | 国内揄拍国内精品 | 99re中文字幕| 久久精品国产亚洲aⅴ | 亚洲欧美怡红院 | 国产日韩av在线 | 97色噜噜| 毛片基地黄久久久久久天堂 | 日韩一区二区三区高清免费看看 | www.天天干| 91精品在线免费观看视频 | 国产色视频网站2 | 99产精品成人啪免费网站 | 久久亚洲日本 | 99国产免费网址 | 天天干天天干天天色 | 国产亚洲精品久久网站 | 九九综合在线 | 免费观看性生交 | 久草视频在线资源站 | 综合天堂av久久久久久久 | 麻花传媒mv免费观看 | 日韩理论在线播放 | 国产免费不卡av | 中文字幕乱码电影 | 日韩激情视频 | 久久男人免费视频 | 国产精品九九久久久久久久 | 国产伦精品一区二区三区… | 99精品一级欧美片免费播放 | 国产一区二区三区久久久 | av在线激情 | av怡红院| 国产手机在线精品 | 一区二区三区 亚洲 | 亚洲狠狠婷婷综合久久久 | 亚洲人成网站精品片在线观看 | 日韩字幕 | 欧美成人亚洲 | 91最新在线| 精品视频区 | 新版资源中文在线观看 | 国产一级不卡毛片 | 欧美一区中文字幕 | 五月天婷婷免费视频 | 人人躁| 国产精品96久久久久久吹潮 | 国产123av| 91色亚洲 | 免费在线播放黄色 | 国产少妇在线观看 | 天堂网一区| 日韩免费福利 | 日韩在线视频观看免费 | 久久免费电影网 | 欧美a级成人淫片免费看 | 久精品在线 | 国产免费不卡av | 一区二区在线不卡 | 日韩电影在线观看中文字幕 | 色婷婷在线播放 | 天天爱天天操天天干 | 亚洲天堂va| 黄色软件视频大全免费下载 | 98久久| 欧美成人久久 | 国产高清中文字幕 | 在线视频一二三 | 免费网址在线播放 | 亚洲狠狠婷婷综合久久久 | 97免费在线视频 | 黄色av网站在线观看免费 | 午夜视频免费 | 成人cosplay福利网站 | av中文字幕网址 | 天天草综合 | 精品一区二区三区在线播放 | 精品久久久久久国产91 | 99视频导航 | 欧美日韩一区二区免费在线观看 | 国产中文字幕一区二区 | 色综合国产 | 中文字幕在线观看av | 奇米网网址 | 天天色天天操天天爽 | 在线观看一区 | 久久综合爱 | 一本一道久久a久久综合蜜桃 | 日韩免费视频观看 | 国产高清在线看 | 国产视频97| 亚洲国产片色 | 欧美伦理一区 | 在线观看精品国产 | 日本黄色免费大片 | 国产高清在线 | 男女啪啪视屏 | 天天综合色| 狠狠色丁香婷婷综合基地 | 亚洲乱码国产乱码精品天美传媒 | 日日夜夜精品免费观看 | 亚洲国产字幕 | 久久精品99 | 日韩免费电影 | 精品一区二三区 | 中文字幕av一区二区三区四区 | 国产黄免费 | 久久精品这里都是精品 | 91麻豆精品国产91久久久使用方法 | 中文字幕在线资源 | 国产探花视频在线播放 | 日本中文字幕视频 | 亚洲一区二区三区毛片 | 人人爽人人爽人人爽人人爽 | 精品999在线 | 久久久久欧美精品999 | 伊人伊成久久人综合网小说 | 久久久久久久久久久久久久免费看 | 国产精品国产三级国产专区53 | 18久久久久| 欧美亚洲成人免费 | 久久国产综合视频 | 国产精品成人久久久 | 欧美成年人在线观看 | 97视频网站| 在线观看视频色 | 天天爱天天操 | 免费在线视频一区二区 | 国产成人久久精品一区二区三区 | 婷婷在线免费 | www.国产高清 | 国产原创在线 | 欧美成人精品欧美一级乱黄 | 91九色网站 | 天天色天天射天天操 | 日韩中字在线 | 日本一区二区免费在线观看 | 丁香婷婷色综合亚洲电影 | 人人澡人人添人人爽一区二区 | 中文字幕成人一区 | 2018亚洲男人天堂 | 国产精品久久视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 成人午夜电影网 | 插综合网 | 91mv.cool在线观看 | 亚洲欧美国产精品久久久久 | 午夜婷婷综合 | 久久97精品 | 婷婷视频导航 | 伊人成人久久 | 精品一区二区在线播放 | 日韩一二三在线 | 国产精品免费视频观看 | 国产在线播放观看 | 91精品久久香蕉国产线看观看 | 国产成人精品久久亚洲高清不卡 | 欧洲成人av| 一级性av | 午夜电影久久 | 久久久久久久久久久久久久av | 九九视频这里只有精品 | 国内精品亚洲 | 成人手机在线视频 | 福利av在线 | 国产a国产| 国产专区视频在线观看 | 男女靠逼app | 久久欧美综合 | 色婷婷久久 | 超碰人人舔 | 国产一级视频在线观看 | 天天操天天操天天操天天操天天操 | 岛国av在线不卡 | 国产一级免费视频 | 国产福利91精品一区二区三区 | 天天艹天天 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产不卡在线观看 | 综合天堂av久久久久久久 | 欧美日性视频 | 激情综合六月 | 欧美一二三区在线观看 | 国产二区精品 | 精品女同一区二区三区在线观看 | 精品视频123区在线观看 | 国产91对白在线 | 色中文字幕在线观看 | 激情网站网址 | 五月婷婷狠狠 | 久久久久久久综合色一本 | 久久视频在线视频 | 免费观看丰满少妇做爰 | 国产一级电影在线 | 国产色女 | 91av蜜桃 | 国产一级电影在线 | 欧美性粗大hdvideo | 欧美不卡视频在线 | 丁香花中文在线免费观看 | 超碰97免费观看 | 亚洲精品人人 | 97精品超碰一区二区三区 | 99精品国产在热久久 | 婷婷天天色 | av一区二区三区在线播放 | 狠狠干综合网 | 制服丝袜一区二区 | 久草剧场| 一区二区不卡视频在线观看 | 黄色软件在线观看 | 国产在线播放一区二区三区 | 久久久国产精品人人片99精片欧美一 | 99久精品 | 在线视频精品 | 九九视频在线观看视频6 | 91九色成人蝌蚪首页 | 国产成人精品一区二区三区网站观看 | 国内综合精品午夜久久资源 | 日韩精品一区二区三区在线视频 | 国产99久久久久 | 九草在线视频 | 超碰人人在线观看 | 激情视频91 | 伊香蕉大综综综合久久啪 | 伊人亚洲精品 | 久久午夜影视 | 天天操天天干天天 | 国产精品久久久久久久久久妇女 | 97手机电影网 | 日韩视频一二三区 | 狠狠久久婷婷 | 99视频播放 | 97成人免费视频 | www.久久久.com| 在线91色 | 日韩av免费在线看 | 午夜私人影院久久久久 | 久久成人毛片 | 五月天婷婷在线视频 | 99精品国产免费久久久久久下载 | 中文字幕第一页在线 | 欧美 激情在线 | 99在线观看免费视频精品观看 | 精品女同一区二区三区在线观看 | 在线视频国产区 | 最新中文字幕在线资源 | 久久久久久久久久久久电影 | 免费男女羞羞的视频网站中文字幕 | 久久免费的视频 | 一区在线观看视频 | 福利视频 | 中文字幕在线影视资源 | 亚洲精品在线观看免费 | 天天干人人干 | 国产精品久久久久高潮 | 欧美福利视频一区 | 天天操天天干天天爽 | 亚洲国产婷婷 | 六月丁香色婷婷 | 日本精品视频免费观看 | 在线性视频日韩欧美 | 999色视频 | 麻豆视频在线观看免费 | 免费在线观看视频一区 | 丁香综合激情 | 欧美日韩aa| 精品av在线播放 | 国产在线小视频 | 一级片在线 | 精品国产成人av在线免 | 久久国产欧美日韩 | 热久久视久久精品18亚洲精品 | 2024av| 久久网站免费 | 国产精品青青 | 99精品视频一区 | 国产精品高潮呻吟久久av无 | 久草色在线观看 | 精品国产成人av | 久久人人爽人人 | 久久久久久久久久免费 | 不卡中文字幕av | 国产精品久久久久免费 | 精品久久久久一区二区国产 | 综合色伊人 | 日韩在线视频一区 | 日韩一二三在线 | 视频在线99 | 久久精品艹 | 不卡av电影在线 | 国产香蕉97碰碰久久人人 | 中文字幕日本电影 | 国产一级黄色免费看 | 四虎视频 | 欧美极品xxxx | 国产丝袜制服在线 | 国产精品成人免费精品自在线观看 | 国产在线高清视频 | 欧美一级在线看 | 久久999精品| 91免费观看视频网站 | 成人资源在线播放 | 91精品视频在线 | 在线观看色视频 | 黄色免费看片网站 | 久草 | 色综合久 | 探花视频在线观看免费版 | 国产黄色片一级 | 国产精品麻豆免费版 | 久久久噜噜噜久久久 | 超碰97人人干 | 久久这里 | 久久午夜鲁丝片 | 欧美黄色软件 | 婷婷亚洲综合 | 亚洲黄色免费电影 | 福利视频网站 | 青草视频网 | 久久国产经典 | 成人在线观看资源 | 国产精品久久久网站 | 婷婷激情久久 | 色噜噜狠狠色综合中国 | 一级片免费视频 | 婷婷亚洲激情 | 日韩二三区 | 国产热re99久久6国产精品 | 久草在线视频网 | 丁香花在线视频观看免费 | 97av视频| 色婷婷播放 | 欧美综合色在线图区 | 色婷婷中文 | a级成人毛片 | 国产又粗又猛又黄视频 | 99热99热| 欧美 国产 视频 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 |