package com.lxzn.activiti; import com.lxzn.base.service.IDncPassLogService; import com.lxzn.framework.domain.base.DncPassLog; import com.lxzn.framework.domain.base.SysLogMessageDto; import com.lxzn.framework.domain.base.SysLogTypeObjectDto; import com.lxzn.framework.utils.FileClient; import com.lxzn.framework.utils.SyslogClient; import com.lxzn.framework.utils.date.DateUtil; import com.lxzn.framework.utils.file.FileUtil; import org.activiti.engine.ProcessEngine; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.File; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.HashMap; import java.util.List; import java.util.Map; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class TestActiviti { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private ProcessEngine processEngine; @Autowired private IDncPassLogService dncPassLogService; @Test public void fileClientTxtOrNc() { dncPassLogService.fileClientTxtOrNc(); } /** * 流程定义的部署 * activiti表有哪些? * act_re_deployment 部署信息 * act_re_procdef 流程定义的一些信息 * act_ge_bytearray 流程定义的bpmn文件及png文件 */ @Test public void testDeployment() { //ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deployment = repositoryService.createDeployment().addClasspathResource("processes/assign_nc_to_device.bpmn") //添加bpmn资源 .name("指派NC文档到设备") .deploy(); System.out.println(deployment.getName()); System.out.println(deployment.getId()); } /** * 启动流程实例: * 前提是先已经完成流程定义的部署工作 * * 背后影响的表: * ACT_HI_ACTINST 已完成的活动信息 * ACT_HI_DETAIL 历史详情 * ACT_HI_IDENTITYLINK 参与者信息 * ACT_HI_PROCINST 流程实例 * ACT_HI_TASKINST 任务实例 * ACT_HI_VARINST 历史变量 * ACT_RU_IDENTITYLINK 执行时 参与者信息 * ACT_RU_EXECUTION 执行表 * ACT_RU_TASK 当前任务 * ACT_RU_VARIABLE 执行时 参数信息 */ @Test public void testStartInstance() { //3.创建流程实例 流程定义的key需要知道 holiday String applyUser = "1255172650880737281"; //String[] approveUsers = {"1254773336467689474", "1254966905669160962"}; String approveUsers = "1254773336467689474, 1254966905669160962"; String businessKey = "111111"; String key = "assign_nc_to_device"; Map map = new HashMap<>(); map.put("apply_user", applyUser); map.put("approve_users", approveUsers); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, businessKey, map); //4.输出实例的相关信息 System.out.println("流程部署ID"+processInstance.getDeploymentId());//null System.out.println("流程定义ID"+processInstance.getProcessDefinitionId());//holiday:1:4 System.out.println("流程实例ID"+processInstance.getId());//2501 System.out.println("活动ID"+processInstance.getActivityId());//null } /** * 从ACT_RU_TASK表中获取当前用户的任务列表 * 从ACT_RU_TASK表中获取taskId的任务 */ @Test public void testCompleteTask() { //获取用户的任务列表 //List taskList = taskService.createTaskQuery().taskAssignee("1255172650880737281").list(); Task task = taskService.createTaskQuery().taskId("7509").singleResult(); if(task != null) { //4.任务列表的展示 System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("任务ID:"+task.getId()); //5002 System.out.println("任务负责人:"+task.getAssignee()); System.out.println("任务名称:"+task.getName()); taskService.complete(task.getId()); } } @Test public void testCandidateUser() { String key = "assign_nc_to_device"; String candidate_user = "1254773336467689474"; // List taskList = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidate_user)//设置候选用户 // .list(); // taskList.forEach(System.out::println); Task task = taskService.createTaskQuery().processDefinitionKey(key) .taskCandidateUser(candidate_user).singleResult(); if(task != null) { taskService.claim(task.getId(), candidate_user); System.out.println("拾取任务成功"); taskService.complete(task.getId()); System.out.println("完成任务成功"); } } @Value("${securedoc.serverIp}") private String serverIp; @Value("${securedoc.serverPort}") private String serverPort; @Value("${securedoc.username}") private String usernameService; @Value("${securedoc.pwd}") private String pwdService; @Value("${securedoc.addressToken}") private String addressToken; @Value("${securedoc.addressUploadFile}") private String addressUploadFile; @Value("${securedoc.localFilePath}") private String localFilePathC; @Value("${securedoc.servicePath}") private String servicePathS; @Value("${securedoc.copyFilePath}") private String newFilePathC; @Value("${securedoc.logIp}") private String logIp; @Value("${securedoc.logPort}") private String logPort; @Test public void fileClientTest() { /*SysLogMessageDto message = new SysLogMessageDto(); message.setSystemName("DNC"); message.setDatetime(DateUtil.format(DateUtil.getNow(),DateUtil.STR_DATE_TIME_SMALL)); message.setLocation("成发工业园"); message.setTypes("info"); message.setAbstract1("abstract"); message.setSourceAddress(""); */ String host = "127.0.0.1"; if (StringUtils.isNotBlank(serverIp)) { host = serverIp; } String port = "8299"; if (StringUtils.isNotBlank(serverPort)) { port = serverPort; } String username = "admin"; if (StringUtils.isNotBlank(usernameService)) { username = usernameService; } String pwd = "123"; if (StringUtils.isNotBlank(pwdService)) { pwd = pwdService; } //文件本地地址,根据地址找到文件,将文件解析成文件流 String localFilePath = "E:\\test\\a\\"; if (StringUtils.isNotBlank(localFilePathC)) { localFilePath = localFilePathC; } //文件上传目的地址,将文件上传到该地址 String servicePath = "E:\\test\\b\\"; if (StringUtils.isNotBlank(servicePathS)) { servicePath = servicePathS; } //第一步,获取token String token = null; try { token = FileClient.getToken(host,port,username,pwd,addressToken); } catch (Throwable throwable) { throwable.printStackTrace(); } //若获取token成功,再进行上传文件接口调用 if (!token.equals("")){ try { File f3 = new File(localFilePath); File[] files = f3.listFiles(); for (File fi : files){ if (fi.isFile()){ SysLogTypeObjectDto objectName = new SysLogTypeObjectDto(); objectName.setDateTime(DateUtil.format(DateUtil.getNow(),DateUtil.STR_DATE_TIME_SMALL)); objectName.setFileName(fi.getName()); objectName.setFileSize(FileUtil.changeFileFormatKb(String.valueOf(new File(localFilePath).length()))); objectName.setSourceAddress(localFilePath); //顺序号 DncPassLog passLog = dncPassLogService.getById("num0001"); if (passLog == null) { passLog = new DncPassLog(); passLog.setId("num0001"); passLog.setSequenceNumber(1); objectName.setFileNum(Integer.toString(1));; dncPassLogService.save(passLog); } else { Integer number = passLog.getSequenceNumber()+1; dncPassLogService.removeById("num0001"); objectName.setFileNum(Integer.toString(number)); passLog = new DncPassLog(); passLog.setId("num0001"); passLog.setSequenceNumber(number); dncPassLogService.save(passLog); } InetAddress address = null; try { address = InetAddress.getLocalHost(); String ip = address.getHostAddress(); objectName.setSourceAddress(ip); } catch (UnknownHostException e) { objectName.setSourceAddress("127.0.0.1"); } objectName.setDestination(host); objectName.setResult("失败"); //获取某个文件下的所有文件 String loFilePath = localFilePath + "\\" + fi.getName(); String servicePathName =servicePath + "\\" + fi.getName(); String b = FileClient.uploadFile(host,port,token,fi.getName(),servicePathName,loFilePath,addressUploadFile); //文件备份删除 if (b == null) { try { objectName.setResult("失败"); SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString()); }catch (Exception e) { return; } } else if ( b.equals("成功")) { //备份数据 boolean fCopy = FileUtil.copyNcFile(loFilePath,newFilePathC + "/" + DateUtil.format(DateUtil.getNow(), DateUtil.STR_YEARMONTHDAY) + "/" +fi.getName()); if (fCopy) { FileUtil.deleteNcFile(loFilePath); } try { objectName.setResult("成功"); SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString()); }catch (Exception e) { return; } } else { try { objectName.setResult("失败"); SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString()); }catch (Exception e) { return; } } } } } catch (Throwable throwable) { throwable.printStackTrace(); } } } }