package com.camunda.demo.controller;
import io.swagger.annotations.ApiOperation;
import org.camunda.bpm.engine.IdentityService;
import org.camunda.bpm.engine.identity.*;
import org.camunda.bpm.engine.impl.identity.Account;
import org.camunda.bpm.engine.impl.persistence.entity.GroupEntity;
import org.camunda.bpm.engine.impl.persistence.entity.TenantEntity;
import org.camunda.bpm.engine.impl.persistence.entity.UserEntity;
import org.camunda.bpm.engine.task.Task;
import org.camunda.bpm.engine.task.TaskQuery;
import org.camunda.commons.utils.IoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.File;
import java.lang.annotation.Native;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class BpmUserContorller {
@Autowired
IdentityService identityService;
/**
* insert into ACT_ID_USER (ID_, FIRST_, LAST_, EMAIL_, PWD_, SALT_, REV_) values ( ?, ?, ?, ?, ?, ?, 1 ) Update counts: [1]
* Parameters: zcc1(String), zcc(String), zcc(String), zcc@qq.com(String), 1(String), 1(String)
*/
@ApiOperation(value = "启动流程", notes = "根据流程定义key启动最新版本并且无租户的流程")
@RequestMapping(value = "/saveUser", method = RequestMethod.POST, consumes = "application/json")
public void saveUser(@RequestBody UserEntity userEntity) throws Exception{
userEntity.setId("zcc1");
userEntity.setEmail("zcc@qq.com");
userEntity.setFirstName("zcc");
userEntity.setLastName("zcc");
userEntity.setDbPassword("1");
userEntity.setSalt("1");
identityService.saveUser(userEntity);
}
@ApiOperation(value = "查询用户", notes = "查询用户")
@RequestMapping(value = "/UserQuery/{first}", method = RequestMethod.POST, consumes = "application/json")
public void createUserQuery(@PathVariable String first){
UserQuery userQuery = identityService.createUserQuery().userFirstName(first);
List<User> list = userQuery.list();
// 需要分页到话
// int maxResult=3;
// int fistResult=maxResult*(1-1);
// UserQuery userQuery = identityService.createUserQuery();
for (int i=0;i<list.size();i++){
User user = list.get(i);
System.out.println(user.getFirstName());
System.out.println(user.getLastName());
System.out.println(user.getId());
System.out.println(user.getPassword());
System.out.println(user.getEmail());
}
}
/**
* delete from ACT_ID_USER where ID_ = ? and REV_ = ?
* delete from ACT_ID_MEMBERSHIP where USER_ID_ = ? Update counts: [0]
* Result 1: delete from ACT_ID_TENANT_MEMBER where USER_ID_ = ? Update counts: [0]
* Result 2: delete from ACT_ID_USER where ID_ = ? and REV_ = ? Update counts: [1]
*/
@ApiOperation(value = "启动流程", notes = "根据流程定义key启动最新版本并且无租户的流程")
@RequestMapping(value = "/deleteUser/{userId}", method = RequestMethod.GET, consumes = "application/json")
public void deleteUser(@PathVariable String userId){
identityService.deleteUser(userId);
}
/**
* insert into ACT_ID_GROUP (ID_, NAME_, TYPE_, REV_) values ( ?, ?, ?, 1 )
* Parameters: group1(String), 项目1(String), 工作流(String)
*/
@ApiOperation(value = "启动流程", notes = "根据流程定义key启动最新版本并且无租户的流程")
@RequestMapping(value = "/saveGroup", method = RequestMethod.POST, consumes = "application/json")
public void saveGroup(@RequestBody GroupEntity groupEntity) throws Exception{
groupEntity.setId("group1");
groupEntity.setName("项目1");
groupEntity.setType("工作流");
identityService.saveGroup(groupEntity);
}
/**
* select distinct RES.* from ACT_ID_GROUP RES order by RES.ID_ asc LIMIT ? OFFSET ?
* 组查询可以和用户查询一样添加查询条件
*/
@ApiOperation(value = "查询群组", notes = "查询群组")
@RequestMapping(value = "/groupQuery", method = RequestMethod.GET, consumes = "application/json")
public void createGroupQuery(){
GroupQuery groupQuery = identityService.createGroupQuery();
List<Group> list = groupQuery.list();
for (int i=0;i<list.size();i++){
Group group = list.get(i);
System.out.println(group.getId());
System.out.println(group.getName());
System.out.println(group.getType());
}
}
/**
* 创建组和用户的联系
* insert into ACT_ID_MEMBERSHIP (USER_ID_, GROUP_ID_) values ( ?, ? )
*/
@ApiOperation(value = "查询群组", notes = "查询群组")
@RequestMapping(value = "/groupQueryMembership", method = RequestMethod.GET, consumes = "application/json")
public void createMembership(){
String userId="zcc2";String groupId="group1";
identityService.createMembership(userId,groupId);
}
/**
* delete from ACT_ID_GROUP where ID_ = ? and REV_ = ?
* delete from ACT_ID_MEMBERSHIP where GROUP_ID_ = ? Update counts: [1]
* delete from ACT_ID_TENANT_MEMBER where GROUP_ID_ = ? Update counts: [0]
*delete from ACT_ID_GROUP where ID_ = ? and REV_ = ? Update counts: [1]
*/
@ApiOperation(value = "删除群组", notes = "删除群组")
@RequestMapping(value = "/deleteGroup", method = RequestMethod.POST, consumes = "application/json")
public void deleteGroup(){
String groupId="group1";
identityService.deleteGroup(groupId);
}
/**
* 租户存在的目的就是区分不同的系统,A系统和B系统的用户是不一样的,所以要区分
* insert into ACT_ID_TENANT (ID_, NAME_, REV_) values ( ?, ?, 1 )
* Parameters: A(String), A系统(String)
*/
@ApiOperation(value = "保存租户", notes = "保存租户")
@RequestMapping(value = "/saveTenant", method = RequestMethod.POST, consumes = "application/json")
public void saveTenant(){
TenantEntity tenantEntity=new TenantEntity();
tenantEntity.setId("A");
tenantEntity.setName("A系统");
identityService.saveTenant(tenantEntity);
}
/**
* 租户和用户
* insert into ACT_ID_TENANT_MEMBER (ID_, TENANT_ID_, USER_ID_, GROUP_ID_) values ( ?, ?, ?, ? )
* Parameters: 101(String), A(String), zcc2(String), null
*/
@ApiOperation(value = "创建租户和人之间到关系", notes = "创建租户和群组之间到关系")
@RequestMapping(value = "/createTenantUserMembership", method = RequestMethod.POST, consumes = "application/json")
public void createTenantUserMembership(){
String tenantId="A";String userId="zcc2";
identityService.createTenantUserMembership(tenantId,userId);
}
/**
* 租户和组
* insert into ACT_ID_TENANT_MEMBER (ID_, TENANT_ID_, USER_ID_, GROUP_ID_) values ( ?, ?, ?, ? )
* 201(String), A(String), null, group1(String)
*/
@ApiOperation(value = "创建租户和群组之间到关系")
@RequestMapping(value = "/createTenantGroupMembership", method = RequestMethod.POST, consumes = "application/json")
public void createTenantGroupMembership(){
String tenantId="A";String groupId="group1";
identityService.createTenantGroupMembership(tenantId,groupId);
}
/**
* 查询租户下面有哪些用户
* select distinct RES.* from ACT_ID_USER RES inner join ACT_ID_TENANT_MEMBER TM on RES.ID_ = TM.USER_ID_ WHERE TM.TENANT_ID_ = ? order by RES.ID_ asc LIMIT ? OFFSET ?
* Parameters: A(String), 2147483647(Integer), 0(Integer)
*/
@ApiOperation(value = "查询租户和人之间到关系")
@RequestMapping(value = "/createUserQueryMemberOfTenant", method = RequestMethod.POST, consumes = "application/json")
public void createUserQueryMemberOfTenant(){
String tenantId="A";
UserQuery userQuery = identityService.createUserQuery();
List<User> list = userQuery.memberOfTenant(tenantId).list();
for (int i=0;i<list.size();i++){
User user = list.get(i);
System.out.println(user.getFirstName());
System.out.println(user.getLastName());
System.out.println(user.getId());
System.out.println(user.getPassword());
System.out.println(user.getEmail());
}
}
/**
* 查询租户下面有哪些组
*select distinct RES.* from ACT_ID_GROUP RES inner join ACT_ID_TENANT_MEMBER TM on RES.ID_ = TM.GROUP_ID_ WHERE TM.TENANT_ID_ = ? order by RES.ID_ asc LIMIT ? OFFSET ?
* Parameters: A(String), 2147483647(Integer), 0(Integer)
*/
@ApiOperation(value = "查询群组和租户间到关系")
@RequestMapping(value = "/createGroupQueryMemberOfTenant", method = RequestMethod.POST, consumes = "application/json")
public void createGroupQueryMemberOfTenant(){
String tenantId="A";
GroupQuery groupQuery = identityService.createGroupQuery();
List<Group> list = groupQuery.memberOfTenant(tenantId).list();
for (int i=0;i<list.size();i++){
Group group = list.get(i);
System.out.println(group.getId());
System.out.println(group.getName());
System.out.println(group.getType());
}
}
/**
* 添加用户相关信息
* insert into ACT_ID_INFO (ID_, USER_ID_, TYPE_, KEY_, VALUE_, PASSWORD_, PARENT_ID_, REV_) values ( ?, ?, ?, ?, ?, ?, ?, 1 )
* Parameters: 301(String), zcc2(String), account(String), zccAccountName(String), zccAccountUsername(String), java.io.ByteArrayInputStream@5ef0d29e(ByteArrayInputStream), null
*/
@ApiOperation(value = "更新用户信息")
@RequestMapping(value = "/setUserAccount", method = RequestMethod.POST, consumes = "application/json")
public void setUserAccount(){
String userId="zcc2";
String userPassword="1";
String accountName="zccAccountName";
String accountUsername="zccAccountUsername";
String accountPassword="zccAccountPassword";
Map<String, String> accountDetails=new HashMap<>();
accountDetails.put("a","a");
identityService.setUserAccount(userId,userPassword,accountName,accountUsername,accountPassword,accountDetails);
}
/**
* 查询用户相关信息
* select * from ACT_ID_INFO where USER_ID_ = ? and KEY_ = ? and PARENT_ID_ is null
* Parameters: zcc2(String), zccAccountName(String)
*/
@ApiOperation(value = "查询用户相关信息")
@RequestMapping(value = "/getUserAccount", method = RequestMethod.POST, consumes = "application/json")
public void getUserAccount(){
String userId="zcc2";
String userPassword="1";
String accountName="zccAccountName";
Account userAccount = identityService.getUserAccount(userId, userPassword, accountName);
System.out.println("@@@@@");
System.out.println(userAccount);
}
/**
* 添加用户图像信息
* insert into ACT_ID_INFO (ID_, USER_ID_, TYPE_, KEY_, VALUE_, PASSWORD_, PARENT_ID_, REV_) values ( ?, ?, ?, ?, ?, ?, ?, 1 )
* Parameters: 501(String), zcc2(String), null, picture(String), 502(String), null, null
* insert into ACT_GE_BYTEARRAY(ID_, NAME_, BYTES_, DEPLOYMENT_ID_, TENANT_ID_, TYPE_, CREATE_TIME_, ROOT_PROC_INST_ID_, REMOVAL_TIME_, REV_) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, 1 )
* Parameters: 502(String), jpg(String), java.io.ByteArrayInputStream@58bf8650(ByteArrayInputStream), null, null, 1(Integer), 2019-10-07 01:56:06.029(Timestamp), null, null
*/
@ApiOperation(value = "保存图片")
@RequestMapping(value = "/setUserPicture", method = RequestMethod.POST, consumes = "application/json")
public void setUserPicture(){
String userId="zcc2";
/**
* public Picture(byte[] bytes, String mimeType) {
* this.bytes = bytes;
* this.mimeType = mimeType;
* }
*/
byte[] bytes = IoUtil.fileAsByteArray(new File("src/main/resources/2.jpg"));
Picture picture=new Picture(bytes,"jpg");
//void setUserPicture(String userId, Picture picture);
identityService.setUserPicture(userId,picture);
}
}