Browse Source

集团制度会签流程

master
dimengzhe 3 months ago
parent
commit
0faefc49d1
  1. 411
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java
  2. 22
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java
  3. 7
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java
  4. 159
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml
  5. 12
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java
  6. 30
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java
  7. 7
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java
  8. 1
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java
  9. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java
  10. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java
  11. 6
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java
  12. 98
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java
  13. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java
  14. 16
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java
  15. 4
      yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java
  16. 9
      yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java

411
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java

@ -50,6 +50,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -98,20 +99,346 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) { public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 获取流程定义ID和发起人ID //获取变量
String procDefId = bv.getModelId(); String procDefId = bv.getModelId();
String userSid = bv.getUserSid(); String userSid = bv.getUserSid();
// 获取传入的变量
Map<String, Object> variables = bv.getFormVariables(); Map<String, Object> variables = bv.getFormVariables();
Map<String, Object> variablesSeconds = bv.getFormVariables(); //下一环节待办人
String nextNodeUserSids = bv.getNextNodeUserSids(); String nextNodeUserSids = bv.getNextNodeUserSids();
//会签人员
List<String> approversList = Optional.ofNullable((List<String>) variables.get("approvers"))
.orElseGet(ArrayList::new);
List<String> userSidForNextNode = new ArrayList<>(); List<String> userSidForNextNode = new ArrayList<>();
//如果指定的下一环节用户为空
if (StringUtils.isBlank(nextNodeUserSids)) { if (StringUtils.isBlank(nextNodeUserSids)) {
userSidForNextNode = getNextNodeUser(bv).getData(); //根据角色查询下一环节待办人
variables.put("approvers", userSidForNextNode); ResultBean<List<String>> listResultBean = getNextNodeUser(bv);
if (!listResultBean.getSuccess()) {
return rb.setMsg(listResultBean.getMsg());
}
userSidForNextNode = listResultBean.getData();
nextNodeUserSids = String.join(",", userSidForNextNode);
//如果会签人员为空
if (approversList.isEmpty()) {
approversList = userSidForNextNode;
variables.put("approvers", approversList);
}
} else {
userSidForNextNode.add(nextNodeUserSids);
}
// 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(procDefId)
.latestVersion()
.singleResult();
// 如果流程被挂起,返回错误信息
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
return rb.setMsg("流程已被挂起,请先激活流程");
}
// 设置发起人信息
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.fetchBySid(userSid);
SysUserVo sysUser = sysUserVoResultBean.getData();
identityService.setAuthenticatedUserId(sysUser.getSid());
variables.put(ProcessConstants.PROCESS_INITIATOR, userSid);
variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid);
// 启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
// 获取第一步任务并设置任务执行人和意见
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
if (Objects.nonNull(task)) {
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(),
sysUser.getName() + "发起流程申请");
taskService.setAssignee(task.getId(), userSid);
taskService.complete(task.getId(), variables);
}
//设置是否是管理员自动审批,默认否
boolean adminContains = false;
String id_ = "", name_ = "", taskDefKey_ = "";
//查询当前实例最新的待办任务
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
String isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String approver = getApproverForTask(userSidForNextNode, i);
approver = change(approver, bv.getInstanceId());
taskService.claim(task2.getId(), approver);
} else {
//单一审批
nextNodeUserSids = userSidForNextNode.get(0);
//查询下一环节是否有转办并添加评论
nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId());
taskService.setAssignee(task2.getId(), nextNodeUserSids);
taskService.setVariablesLocal(task2.getId(), variables);
}
}
tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
//遍历待办任务
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
String isMultiInstanceTask = isMultiInstanceTask(task2);
id_ = task2.getId();
taskDefKey_ = task2.getTaskDefinitionKey();
name_ = task2.getName();
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
adminContains = true;
break;
}
}
}
//提交前传入下一环节待办人
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) {
return handleAutomaticApproval(bv, task, id_, taskDefKey_, variables, processDefinition);
} }
// 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, taskDefKey_, variables, processDefinition);
}
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId());
updateFlowFieldVo.setNodeState(name_);
updateFlowFieldVo.setTaskId(id_);
updateFlowFieldVo.setTaskDefKey(taskDefKey_);
updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
Map<String, Object> formVariables = Optional.ofNullable(bv.getFormVariables()).orElseGet(HashMap::new);
formVariables.put("businessSid", bv.getBusinessSid());
String taskId = bv.getTaskId(),
nextUserSid = bv.getNextNodeUserSids(),
userSid = bv.getUserSid(),
instanceId = bv.getInstanceId(),
comment = bv.getComment(),
orgPath = bv.getOrgSidPath(),
service = (String) formVariables.get("service"),
ydfOrgPath = (String) formVariables.get("ydfOrgPath"),
nodeState = "", taskDefKey = "";
//设置下一环节审批人是否自动审批通过,默认否
boolean contains = false,
//设置是否是管理员自动审批,默认否
adminContains = false;
//指定的会签用户
List<String> approversList = Optional.ofNullable((List<String>) formVariables.get("approvers"))
.orElseGet(ArrayList::new);
List<String> userSidForNextNode = new ArrayList<>();
// 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(bv.getModelId())
.latestVersion()
.singleResult();
//查询任务id为taskId的任务是否存在
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (Objects.isNull(task)) {
return rb.setMsg("任务不存在");
}
String assignee = task.getAssignee();
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) {
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!");
}
//查询任务时单一审批还是或签还是会签?
String isMultiInstanceTask = isMultiInstanceTask(task);
//查询所有的待办任务
List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
if (StringUtils.isBlank(nextUserSid)) {
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) {
bv.setOrgSidPath(ydfOrgPath);
}
if (!"会签任务".equals(isMultiInstanceTask) || tasks.size() == 1) {
//查询下一环节待办人
ResultBean<List<String>> listResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!listResultBean.getSuccess()) {
//如果查询下一环节待办人为空,则默认为管理员
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
userSidForNextNode.add(nextUserSid);
adminContains = true;
} else {
if (listResultBean.getData() != null && listResultBean.getData().size() != 0) {
userSidForNextNode = listResultBean.getData();
}
//如果会签人员为空,则查询下一环节人
if (approversList.isEmpty()) {
formVariables.put("approvers", userSidForNextNode);
}
}
}
} else {
userSidForNextNode.add(nextUserSid);
//若下一环节用户与系统管理员一致,则自动审批
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) {
adminContains = true;
}
}
if (DelegationState.PENDING.equals(task.getDelegationState())) {
adminContains = false;
//加签
Authentication.setAuthenticatedUserId(userSid);
taskService.addComment(taskId, instanceId,
FlowComment.DELEGATE.getType(), comment);
taskService.resolveTask(taskId, formVariables);
nodeState = task.getName();
taskDefKey = task.getTaskDefinitionKey();
} else {
//下一环节是否是多实例任务
boolean isMultiInstanceTaskNext = false;
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
//是否要查询当前任务是否是会签环节
boolean checkTask = tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask);
//当前任务办理完成
taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment);
log.error("taskid:{},userSid:{}", taskId, userSid);
log.error("formVariables:{}", JSON.toJSONString(formVariables));
taskService.setAssignee(taskId, userSid);
taskService.complete(taskId, formVariables);
//查询办理完后的最新待办任务
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
if (tasks.size() > 0) {
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
if (checkTask) {
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String nextUserSidNext = userSidForNextNode.get(i);
nextUserSidNext = change(nextUserSidNext, bv.getInstanceId());
taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务
isMultiInstanceTaskNext = true;
} else {
nextUserSid = userSidForNextNode.get(0);
//查询下一环节用户是否有转办人
nextUserSid = change(nextUserSid, bv.getInstanceId());
taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中
}
}
}
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList());
String taskIds = String.join(",", taskIdList);
vo.setTaskId(taskIds);
//在act_ru_variable表中增加环节上的业务参数的变量
taskService.setVariablesLocal(tasks.get(0).getId(), formVariables);
nodeState = tasks.get(0).getName();
taskDefKey = tasks.get(0).getTaskDefinitionKey();
//遍历待办任务,将存在管理员的自动审批
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
vo.setTaskId(task2.getId());
nodeState = task2.getName();
taskDefKey = task2.getTaskDefinitionKey();
break;
}
}
}
} else {
nodeState = FlowComment.SETTLE.getRemark();
taskDefKey = "Event_end";
vo.setNodeState(FlowComment.SETTLE.getRemark());
}
if (!isMultiInstanceTaskNext) {
//获取该流程所有要走的环节节点
List<FlowElement> flowElements = calApprovePath(bv.getModelId(),
bv.getFormVariables());
for (int i = 0; i < flowElements.size(); i++) {
FlowElement flowElement = flowElements.get(i);
String id = flowElement.getId();
// 如果当前环节匹配taskDefKey,并且后续环节存在
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) {
FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节
List<SysUserVo> nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表
// 获取下下一个环节的用户列表(如果存在)
List<SysUserVo> nextNextUserList = new ArrayList<>();
if (i + 2 < flowElements.size()) {
FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节
nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表
}
// 如果下一个环节只有一个用户,并且其sid与下一级相同,则设置contains为true
if (nextUserList.size() == 1 && nextUserList.get(0).getSid().equals(nextUserSid)) {
contains = true; // 确定自动审批
break; // 跳出循环,不再检查后续环节
}
// 如果下下一个环节没有用户,且下下下一个环节与下一级相同,设置contains为true
if (nextUserList.isEmpty() && nextNextUserList.size() == 1 && nextNextUserList.get(0).getSid().equals(nextUserSid)) {
contains = true; // 确定自动审批
break; // 跳出循环
}
}
}
}
}
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
if (adminContains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("系统自动跳过");
bv.setNextNodeUserSids("");
return handleProsess(bv, false);
}
if (contains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!");
return handleProsess(bv, false);
}
vo.setProcInsId(instanceId);
vo.setProcDefId(bv.getModelId());
vo.setNodeState(nodeState);
vo.setTaskDefKey(taskDefKey);
vo.setSid(bv.getBusinessSid());
vo.setName(processDefinition.getName());
return rb.success().setData(vo);
}
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
String nextNodeUserSids = bv.getNextNodeUserSids();
Map<String, Object> variables = bv.getFormVariables();
Map<String, Object> variablesSeconds = bv.getFormVariables();
List<String> userSidForNextNode = new ArrayList<>();
List<String> approversList = Optional.ofNullable((List<String>) variables.get("approvers"))
.orElseGet(ArrayList::new);
if (StringUtils.isBlank(nextNodeUserSids)) {
userSidForNextNode = getNextNodeUser(bv).getData();
if (!approversList.isEmpty()) {
variables.put("approvers", approversList);
} else {
approversList = userSidForNextNode;
variables.put("approvers", approversList);
}
} else {
//下一环节审批人
userSidForNextNode.add(nextNodeUserSids);
}
// 根据流程定义ID查询最新的流程定义 // 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(procDefId) .processDefinitionId(procDefId)
@ -157,6 +484,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
task_def_key_ = task2.getTaskDefinitionKey(); task_def_key_ = task2.getTaskDefinitionKey();
name_ = task2.getName(); name_ = task2.getName();
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String approver = getApproverForTask(userSidForNextNode, i); String approver = getApproverForTask(userSidForNextNode, i);
approver = change(approver, bv.getInstanceId()); approver = change(approver, bv.getInstanceId());
taskService.claim(task2.getId(), approver); taskService.claim(task2.getId(), approver);
@ -177,7 +505,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
task_def_key_ = task2.getTaskDefinitionKey(); task_def_key_ = task2.getTaskDefinitionKey();
name_ = task2.getName(); name_ = task2.getName();
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())){ if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
adminContains = true; adminContains = true;
break; break;
} }
@ -194,18 +522,15 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
taskService.setVariablesLocal(id_, variables); taskService.setVariablesLocal(id_, variables);
} }
//提交前传入下一环节待办人 //提交前传入下一环节待办人
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) { if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition);
} }
// 如果申请人与下一环节审批人相同,则自动审批 // 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) { if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); return handleSelfApproval(bv, task, id_, task_def_key_, variables, processDefinition);
} }
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); updateFlowFieldVo.setProcInsId(task.getProcessInstanceId());
updateFlowFieldVo.setNodeState(name_); updateFlowFieldVo.setNodeState(name_);
updateFlowFieldVo.setTaskId(id_); updateFlowFieldVo.setTaskId(id_);
@ -216,7 +541,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
} }
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) { public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
//获取表单中的参数 //获取表单中的参数
@ -249,6 +574,8 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) {
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!");
} }
List<String> approversList = Optional.ofNullable((List<String>) formVariables.get("approvers"))
.orElseGet(ArrayList::new);
if (StringUtils.isBlank(nextUserSid)) { if (StringUtils.isBlank(nextUserSid)) {
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) {
bv.setOrgSidPath(ydfOrgPath); bv.setOrgSidPath(ydfOrgPath);
@ -257,10 +584,10 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (!listResultBean.getSuccess()) { if (!listResultBean.getSuccess()) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true; adminContains = true;
userSidForNextNode.add(nextUserSid);
} else { } else {
if(listResultBean.getData() != null){ if (listResultBean.getData() != null) {
userSidForNextNode = listResultBean.getData(); userSidForNextNode = listResultBean.getData();
formVariables.put("approvers", listResultBean.getData());
} }
} }
} else { } else {
@ -269,6 +596,24 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
adminContains = true; adminContains = true;
} }
} }
if (!approversList.isEmpty()) {
formVariables.put("approvers", approversList);
} else {
ResultBean<List<String>> listResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!listResultBean.getSuccess()) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
userSidForNextNode.add(nextUserSid);
} else {
if (listResultBean.getData() != null) {
approversList = listResultBean.getData();
formVariables.put("approvers", approversList);
}
}
}
//是否是多实例任务 //是否是多实例任务
String isMultiInstanceTask = isMultiInstanceTask(task); String isMultiInstanceTask = isMultiInstanceTask(task);
boolean isMultiInstanceTaskNext = false; boolean isMultiInstanceTaskNext = false;
@ -301,6 +646,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
Task task2 = tasks.get(i); Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2); isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String nextUserSidNext = userSidForNextNode.get(i); String nextUserSidNext = userSidForNextNode.get(i);
nextUserSidNext = change(nextUserSidNext, bv.getInstanceId()); nextUserSidNext = change(nextUserSidNext, bv.getInstanceId());
taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务 taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务
@ -312,7 +658,9 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
nextUserSid = change(nextUserSid, bv.getInstanceId()); nextUserSid = change(nextUserSid, bv.getInstanceId());
taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中 taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中
} }
vo.setTaskId(task2.getId()); List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList());
String taskIds = String.join(",", taskIdList);
vo.setTaskId(taskIds);
//在act_ru_variable表中增加环节上的业务参数的变量 //在act_ru_variable表中增加环节上的业务参数的变量
taskService.setVariablesLocal(task2.getId(), formVariables); taskService.setVariablesLocal(task2.getId(), formVariables);
nodeState = task2.getName(); nodeState = task2.getName();
@ -323,11 +671,11 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
for (int i = 0; i < tasks.size(); i++) { for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i); Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2); isMultiInstanceTask = isMultiInstanceTask(task2);
vo.setTaskId(task2.getId()); /* vo.setTaskId(task2.getId());
nodeState = task2.getName(); nodeState = task2.getName();
taskDefKey = task2.getTaskDefinitionKey(); taskDefKey = task2.getTaskDefinitionKey();*/
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())){ if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true; adminContains = true;
break; break;
@ -341,9 +689,12 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
} }
}else{//会签 } else {//会签
Task task2 = tasks.get(0); Task task2 = tasks.get(0);
vo.setTaskId(task2.getId()); List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList());
String taskIds = String.join(",", taskIdList);
// vo.setTaskId(task2.getId());
vo.setTaskId(taskIds);
nodeState = task2.getName(); nodeState = task2.getName();
taskDefKey = task2.getTaskDefinitionKey(); taskDefKey = task2.getTaskDefinitionKey();
@ -408,7 +759,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
return rb.success().setData(vo); return rb.success().setData(vo);
} }
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) { public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById111(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人 // 或签任务候选人
/* List<String> userIds = Arrays.asList( /* List<String> userIds = Arrays.asList(
@ -497,12 +848,12 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
taskService.setVariablesLocal(id_, variables); taskService.setVariablesLocal(id_, variables);
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) { if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition);
} }
// 如果申请人与下一环节审批人相同,则自动审批 // 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) { if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); return handleSelfApproval(bv, task, id_, task_def_key_, variables, processDefinition);
} }
} else { } else {
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
@ -514,7 +865,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (!ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { if (!ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
continue; continue;
} else { } else {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition);
} }
} }
@ -544,7 +895,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* 处理自动审批逻辑当任务为转办时 * 处理自动审批逻辑当任务为转办时
*/ */
private ResultBean<UpdateFlowFieldVo> handleAutomaticApproval(BusinessVariables bv, Task task, String id_, String task_def_key_, private ResultBean<UpdateFlowFieldVo> handleAutomaticApproval(BusinessVariables bv, Task task, String id_, String task_def_key_,
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) { Map<String, Object> variables, ProcessDefinition processDefinition) {
bv.setModelId(bv.getModelId()); bv.setModelId(bv.getModelId());
bv.setInstanceId(task.getProcessInstanceId()); bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_); bv.setTaskId(id_);
@ -553,7 +904,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
bv.setTaskDefKey(task_def_key_); bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables); bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath()); bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("系统自动转办!"); bv.setComment("系统自动转办!");
bv.setNextNodeUserSids(""); bv.setNextNodeUserSids("");
@ -565,7 +915,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* 处理自动审批逻辑当申请人与下一环节审批人相同 * 处理自动审批逻辑当申请人与下一环节审批人相同
*/ */
private ResultBean<UpdateFlowFieldVo> handleSelfApproval(BusinessVariables bv, Task task, String id_, String task_def_key_, private ResultBean<UpdateFlowFieldVo> handleSelfApproval(BusinessVariables bv, Task task, String id_, String task_def_key_,
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) { Map<String, Object> variables, ProcessDefinition processDefinition) {
bv.setModelId(bv.getModelId()); bv.setModelId(bv.getModelId());
bv.setInstanceId(task.getProcessInstanceId()); bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_); bv.setTaskId(id_);
@ -574,7 +924,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
bv.setTaskDefKey(task_def_key_); bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables); bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath()); bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!"); bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!");
bv.setNextNodeUserSids(""); bv.setNextNodeUserSids("");
@ -653,7 +1002,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表 return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表
} }
/* public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) { /* public ResultBean<UpdateFlowFieldVo> handleProsess111(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail(); ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
// 或签任务候选人 // 或签任务候选人
@ -925,7 +1274,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (sysUserVos == null || sysUserVos.size() < 1) { if (sysUserVos == null || sysUserVos.size() < 1) {
log.error("下一环节无用户填充管理员用户"); log.error("下一环节无用户填充管理员用户");
return rb; return rb;
}else{ } else {
StringBuilder nextNodeUserSids = new StringBuilder(); StringBuilder nextNodeUserSids = new StringBuilder();
for (SysUserVo su : sysUserVos) { for (SysUserVo su : sysUserVos) {
nextNodeUserSids.append(su.getSid()).append(","); nextNodeUserSids.append(su.getSid()).append(",");

22
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java

@ -0,0 +1,22 @@
package com.yxt.anrui.portal.api.sysstaffinfo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author: dimengzhe
* @date: 2025/3/3
**/
@Data
public class UserCommonVo {
@JsonProperty("id")
private String dictKey;
private String dictValue;
private Map<String, Object> extra = new HashMap<>();
}

7
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java

@ -121,10 +121,15 @@ public interface SysStaffinfoMapper extends BaseMapper<SysStaffinfo> {
IPage<AppSysStaffVo> getUserList(IPage<SysStaffinfo> page, @Param(Constants.WRAPPER) QueryWrapper<AppSysStaffVo> qw, @Param("orgSid") String orgSid); IPage<AppSysStaffVo> getUserList(IPage<SysStaffinfo> page, @Param(Constants.WRAPPER) QueryWrapper<AppSysStaffVo> qw, @Param("orgSid") String orgSid);
List<AppSysStaffVo> getGressionUserList(@Param("userOrgSid")String userOrgSid); List<AppSysStaffVo> getGressionUserList(@Param("userOrgSid") String userOrgSid);
List<PcSysStaffVo> selectStaffLists(); List<PcSysStaffVo> selectStaffLists();
List<PcSysStaffVo> selectStaffListss(); List<PcSysStaffVo> selectStaffListss();
List<StaffByRole> getStaffNameByRoleCode(@Param("orgSidPath") String orgSidPath, @Param("list") List<String> list); List<StaffByRole> getStaffNameByRoleCode(@Param("orgSidPath") String orgSidPath, @Param("list") List<String> list);
List<UserCommonVo> getCommonUser();
List<UserCommonVo> getCommonUserByRoleSid(@Param("roleSid") String s);
} }

159
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml

@ -17,14 +17,14 @@
<select id="searchAppContactsPageList" <select id="searchAppContactsPageList"
resultType="com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfoAppContactsSearchVo"> resultType="com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfoAppContactsSearchVo">
SELECT staff.sid, SELECT staff.sid,
staff.name, staff.name,
staff.mobile, staff.mobile,
staff.position, staff.position,
user.headImage, user.headImage,
GROUP_CONCAT(org.orgName SEPARATOR '/') orgName GROUP_CONCAT(org.orgName SEPARATOR '/') orgName
FROM sys_staffinfo staff FROM sys_staffinfo staff
LEFT JOIN sys_staff_org org ON org.staffSid = staff.sid LEFT JOIN sys_staff_org org ON org.staffSid = staff.sid
LEFT JOIN sys_user user ON staff.sid = user.staffSid LEFT JOIN sys_user user ON staff.sid = user.staffSid
WHERE 1 = 1 and staff.personTypeKey != '01' WHERE 1 = 1 and staff.personTypeKey != '01'
<if test="mobileStr != null and mobileStr != ''"> <if test="mobileStr != null and mobileStr != ''">
AND staff.mobile LIKE concat('%', #{mobileStr}, '%') AND staff.mobile LIKE concat('%', #{mobileStr}, '%')
@ -107,24 +107,24 @@
DATE_FORMAT(si.joinCompnyDate, '%Y-%m-%d') AS joinCompnyDate, DATE_FORMAT(si.joinCompnyDate, '%Y-%m-%d') AS joinCompnyDate,
<!--所在部门--> <!--所在部门-->
(select GROUP_CONCAT(orgName SEPARATOR ',') orgName from sys_staff_org so where so.staffSid = si.sid) as (select GROUP_CONCAT(orgName SEPARATOR ',') orgName from sys_staff_org so where so.staffSid = si.sid) as
orgName, orgName,
<!--所在部门sid--> <!--所在部门sid-->
(select GROUP_CONCAT(orgSid SEPARATOR ',') orgSid from sys_staff_org so where so.staffSid = si.sid) as (select GROUP_CONCAT(orgSid SEPARATOR ',') orgSid from sys_staff_org so where so.staffSid = si.sid) as
orgSid, orgSid,
<!--岗位--> <!--岗位-->
(select GROUP_CONCAT(sp.name SEPARATOR ',') postName (select GROUP_CONCAT(sp.name SEPARATOR ',') postName
from sys_staff_post ssp from sys_staff_post ssp
left join sys_post sp on left join sys_post sp on
sp.sid = sp.sid =
ssp.postSid ssp.postSid
where ssp.staffSid = si.sid where ssp.staffSid = si.sid
group by ssp.id) as postName group by ssp.id) as postName
from sys_staffinfo si from sys_staffinfo si
LEFT JOIN sys_staff_org so LEFT JOIN sys_staff_org so
ON so.staffSid = si.sid ON so.staffSid = si.sid
LEFT JOIN sys_staff_post ssp LEFT JOIN sys_staff_post ssp
ON ssp.staffSid = si.sid ON ssp.staffSid = si.sid
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<!--根据员工手机号和sid查询员工信息是否已存在--> <!--根据员工手机号和sid查询员工信息是否已存在-->
<select id="selectByMobileAndSid" resultType="com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfo"> <select id="selectByMobileAndSid" resultType="com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfo">
@ -252,8 +252,8 @@
isHaveInsurance, isHaveInsurance,
<!--意外险参保:1是,0否--> <!--意外险参保:1是,0否-->
case isHaveInsurance case isHaveInsurance
when 1 then '是' when 1 then '是'
when 0 then '否' end as isHaveInsuranceValue, when 0 then '否' end as isHaveInsuranceValue,
<!--意外险参保时间--> <!--意外险参保时间-->
DATE_FORMAT(insuranceStartDate, '%Y-%m-%d') as insuranceStartDate, DATE_FORMAT(insuranceStartDate, '%Y-%m-%d') as insuranceStartDate,
<!--意外险参保终止日期--> <!--意外险参保终止日期-->
@ -264,26 +264,26 @@
isHaveAged, isHaveAged,
<!--养老:1是,0否--> <!--养老:1是,0否-->
case isHaveAged case isHaveAged
when 1 then '是' when 1 then '是'
when 0 then '否' end as isHaveAgedValue, when 0 then '否' end as isHaveAgedValue,
<!--医疗:1是,0否--> <!--医疗:1是,0否-->
isHaveMedical, isHaveMedical,
<!--医疗:1是,0否--> <!--医疗:1是,0否-->
case isHaveMedical case isHaveMedical
when 1 then '是' when 1 then '是'
when 0 then '否' end as isHaveMedicalValue, when 0 then '否' end as isHaveMedicalValue,
<!--工伤:1是,0否--> <!--工伤:1是,0否-->
isHaveInjury, isHaveInjury,
<!--工伤:1是,0否--> <!--工伤:1是,0否-->
case isHaveInjury case isHaveInjury
when 1 then '是' when 1 then '是'
when 0 then '否' end as isHaveInjuryValue, when 0 then '否' end as isHaveInjuryValue,
<!--失业:1是,0否--> <!--失业:1是,0否-->
isHaveUnemploy, isHaveUnemploy,
<!--失业:1是,0否--> <!--失业:1是,0否-->
case isHaveUnemploy case isHaveUnemploy
when 1 then '是' when 1 then '是'
when 0 then '否' end as isHaveUnemployValue, when 0 then '否' end as isHaveUnemployValue,
<!--社保参保地--> <!--社保参保地-->
insuredPlace, insuredPlace,
<!--纸质档案保管地--> <!--纸质档案保管地-->
@ -335,49 +335,49 @@
</select> </select>
<select id="getUserList" resultType="com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo"> <select id="getUserList" resultType="com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo">
select su.sid userSid, select su.sid userSid,
si.name userName, si.name userName,
su.headImage, su.headImage,
si.mobile userMobile, si.mobile userMobile,
sso.orgName as department, sso.orgName as department,
sp.name sp.name
from sys_staff_org sso from sys_staff_org sso
left join sys_staffinfo si on sso.staffSid = si.sid left join sys_staffinfo si on sso.staffSid = si.sid
left join sys_user su on si.sid = su.staffSid left join sys_user su on si.sid = su.staffSid
left join sys_staff_post ssp on si.sid = ssp.staffSid left join sys_staff_post ssp on si.sid = ssp.staffSid
left join sys_post sp on sp.sid = ssp.postSid left join sys_post sp on sp.sid = ssp.postSid
<where> <where>
${ew.sqlSegment} ${ew.sqlSegment}
and su.isAdmin is NULL and su.isAdmin is NULL
<if test="orgSid != null and orgSid != ''"> <if test="orgSid != null and orgSid != ''">
and find_in_set(#{orgSid} and find_in_set(#{orgSid}
, replace (sso.orgSidPath , replace (sso.orgSidPath
, '/' , '/'
, ',')) , ','))
</if> </if>
</where> </where>
group by su.sid group by su.sid
</select> </select>
<select id="getGressionUserList" resultType="com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo"> <select id="getGressionUserList" resultType="com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo">
select su.sid as userSid, select su.sid as userSid,
si.name as userName, si.name as userName,
su.headImage, su.headImage,
si.mobile as userMobile, si.mobile as userMobile,
sso.orgName as department, sso.orgName as department,
sp.name sp.name
from sys_staff_org sso from sys_staff_org sso
left join sys_staffinfo si on sso.staffSid = si.sid left join sys_staffinfo si on sso.staffSid = si.sid
left join sys_user su on si.sid = su.staffSid left join sys_user su on si.sid = su.staffSid
left join sys_staff_post ssp on si.sid = ssp.staffSid left join sys_staff_post ssp on si.sid = ssp.staffSid
left join sys_post sp on sp.sid = ssp.postSid left join sys_post sp on sp.sid = ssp.postSid
<where> <where>
1=1 1=1
<if test="userOrgSid != null and userOrgSid != ''"> <if test="userOrgSid != null and userOrgSid != ''">
and find_in_set(#{userOrgSid} and find_in_set(#{userOrgSid}
, replace(sso.orgSidPath , replace(sso.orgSidPath
, '/' , '/'
, ',')) , ','))
</if> </if>
</where> </where>
</select> </select>
@ -386,30 +386,53 @@
select su.sid userSid, select su.sid userSid,
si.name staffName si.name staffName
from sys_user su from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid where su.isAdmin is NULL left join sys_staffinfo si on su.staffSid = si.sid
where su.isAdmin is NULL
</select> </select>
<select id="selectStaffListss" resultType="com.yxt.anrui.portal.api.sysstaffinfo.PcSysStaffVo"> <select id="selectStaffListss" resultType="com.yxt.anrui.portal.api.sysstaffinfo.PcSysStaffVo">
select su.sid userSid, select su.sid userSid,
si.name staffName si.name staffName
from sys_user su from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid where su.isAdmin is NULL and si.personTypeKey != '01' left join sys_staffinfo si on su.staffSid = si.sid
where su.isAdmin is NULL
and si.personTypeKey != '01'
</select> </select>
<select id="getStaffNameByRoleCode" resultType="com.yxt.anrui.portal.api.sysstaffinfo.StaffByRole"> <select id="getStaffNameByRoleCode" resultType="com.yxt.anrui.portal.api.sysstaffinfo.StaffByRole">
SELECT DISTINCT SELECT DISTINCT
u.sid as managerSid, u.sid as managerSid,
sf.name as manager sf.name as manager
FROM FROM
sys_user_role AS ur sys_user_role AS ur
LEFT JOIN sys_role AS r ON ur.roleSid = r.sid LEFT JOIN sys_role AS r ON ur.roleSid = r.sid
LEFT JOIN sys_user as u ON ur.userSid = u.sid LEFT JOIN sys_user as u ON ur.userSid = u.sid
LEFT JOIN sys_staffinfo as sf ON u.staffSid = sf.sid LEFT JOIN sys_staffinfo as sf ON u.staffSid = sf.sid
LEFT JOIN sys_staff_org as so ON sf.sid = so.staffSid LEFT JOIN sys_staff_org as so ON sf.sid = so.staffSid
WHERE so.orgSidPath like CONCAT( '%', #{orgSidPath}, '%' ) WHERE so.orgSidPath like CONCAT( '%', #{orgSidPath}, '%' )
AND u.isDelete = 0 and sf.isDelete = 0 and sf.personTypeKey != '01' AND u.isDelete = 0 and sf.isDelete = 0 and sf.personTypeKey != '01'
AND r.code IN AND r.code IN
<foreach collection="list" item="item" open="(" close=")" separator=","> <foreach collection="list" item="item" open="(" close=")" separator=",">
#{item} #{item}
</foreach> </foreach>
</select> </select>
<select id="getCommonUser" resultType="com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo">
select su.sid dictKey,
si.name dictValue
from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid
where su.isAdmin is NULL
and si.personTypeKey != '01'
</select>
<select id="getCommonUserByRoleSid" resultType="com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo">
select su.sid dictKey,
si.name dictValue
from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid
left join sys_user_role sr on sr.userSid = su.sid
where su.isAdmin is NULL
and si.personTypeKey != '01'
and sr.roleSid = #{roleSid}
</select>
</mapper> </mapper>

12
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.portal.api.sysstaffinfo.*; import com.yxt.anrui.portal.api.sysstaffinfo.*;
import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffQuery; import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffQuery;
import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo; import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo;
import com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo;
import com.yxt.anrui.portal.biz.sysuser.SysUserService; import com.yxt.anrui.portal.biz.sysuser.SysUserService;
import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.PagerUtil;
@ -11,11 +12,10 @@ import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo; import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Collections; import java.util.Collections;
@ -237,5 +237,9 @@ public class SysStaffinfoRest implements SysStaffinfoFeign {
return sysStaffinfoService.selectStaffListss(); return sysStaffinfoService.selectStaffListss();
} }
@ApiOperation("获取用户")
@GetMapping({"/getCommonUser", "/getCommonUser/{roleSids}"})
ResultBean<List<UserCommonVo>> getCommonUser(@PathVariable(value = "roleSids", required = false) String roleSids) {
return sysStaffinfoService.getCommonUser(roleSids);
}
} }

30
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java

@ -40,6 +40,8 @@ import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
@ -624,10 +626,10 @@ public class SysStaffinfoService extends MybatisBaseService<SysStaffinfoMapper,
if (reduce1.size() > 0) { if (reduce1.size() > 0) {
//根据staffSid查询token //根据staffSid查询token
String token = sysUserService.selectByStaffsid(sid).getToken(); String token = sysUserService.selectByStaffsid(sid).getToken();
if(StringUtils.isNotBlank(token)){ if (StringUtils.isNotBlank(token)) {
//查询redis中是否包含该token //查询redis中是否包含该token
String userName = redisUtil.get(token); String userName = redisUtil.get(token);
if(StringUtils.isNotBlank(userName)){ if (StringUtils.isNotBlank(userName)) {
//清空该token //清空该token
redisUtil.remove(token); redisUtil.remove(token);
} }
@ -826,7 +828,29 @@ public class SysStaffinfoService extends MybatisBaseService<SysStaffinfoMapper,
List<String> roleCode = query.getRoleCode(); List<String> roleCode = query.getRoleCode();
SysOrganization sysOrganization = sysOrganizationService.fetchBySid(useOrgSid); SysOrganization sysOrganization = sysOrganizationService.fetchBySid(useOrgSid);
String orgSidPath = sysOrganization.getOrgSidPath(); String orgSidPath = sysOrganization.getOrgSidPath();
List<StaffByRole> list = baseMapper.getStaffNameByRoleCode(orgSidPath,roleCode); List<StaffByRole> list = baseMapper.getStaffNameByRoleCode(orgSidPath, roleCode);
return list; return list;
} }
public ResultBean<List<UserCommonVo>> getCommonUser(String roleSids) {
ResultBean<List<UserCommonVo>> rb = ResultBean.fireFail();
List<UserCommonVo> userCommonVoList = new ArrayList<>();
if (StringUtils.isBlank(roleSids)) {
//查询集团所有的人员
userCommonVoList = baseMapper.getCommonUser();
} else {
List<String> roleSidList = Arrays.asList(roleSids.split(","));
roleSidList.removeAll(Collections.singleton(null));
if (!roleSidList.isEmpty()) {
for (int i = 0; i < roleSidList.size(); i++) {
List<UserCommonVo> userList = baseMapper.getCommonUserByRoleSid(roleSidList.get(i));
userCommonVoList.addAll(userList);
}
}
}
List<UserCommonVo> uniqueList = new ArrayList<>(userCommonVoList.stream()
.collect(Collectors.toMap(UserCommonVo::getDictKey, Function.identity(), (existing, replacement) -> existing))
.values());
return rb.success().setData(uniqueList);
}
} }

7
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java

@ -24,11 +24,10 @@ import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo; import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
@ -286,7 +285,7 @@ public class SysUserRest implements SysUserFeign {
if (i == 0) { if (i == 0) {
return ResultBean.fireFail().setMsg("修改失败"); return ResultBean.fireFail().setMsg("修改失败");
} }
if(StringUtils.isNotBlank(token)){ if (StringUtils.isNotBlank(token)) {
redisUtil.remove(token); redisUtil.remove(token);
} }
return ResultBean.fireSuccess().setMsg("修改成功"); return ResultBean.fireSuccess().setMsg("修改成功");

1
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java

@ -14,6 +14,7 @@ import com.yxt.anrui.portal.api.sysmobilemenu.SysMobileMenu;
import com.yxt.anrui.portal.api.sysorganization.SysOrganization; import com.yxt.anrui.portal.api.sysorganization.SysOrganization;
import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfo; import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfo;
import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfoVo; import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfoVo;
import com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgVo; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgVo;
import com.yxt.anrui.portal.api.sysstaffpost.SysStaffPostDetailsVo; import com.yxt.anrui.portal.api.sysstaffpost.SysStaffPostDetailsVo;

5
yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java

@ -28,6 +28,7 @@ import javax.validation.Valid;
public class AdGroupSystemApplyRest { public class AdGroupSystemApplyRest {
@Autowired @Autowired
AdGroupSystemApplyService adGroupSystemApplyService; AdGroupSystemApplyService adGroupSystemApplyService;
@ApiOperation("根据条件分页查询数据的列表") @ApiOperation("根据条件分页查询数据的列表")
@PostMapping("/listPage") @PostMapping("/listPage")
public ResultBean<PagerVo<AdGroupSystemApplyVo>> listPage(@RequestBody PagerQuery<AdGroupSystemApplyQuery> pq) { public ResultBean<PagerVo<AdGroupSystemApplyVo>> listPage(@RequestBody PagerQuery<AdGroupSystemApplyQuery> pq) {
@ -41,6 +42,7 @@ public class AdGroupSystemApplyRest {
public ResultBean<String> saveOrUpdate(@RequestBody AdGroupSystemApplyDto dto) { public ResultBean<String> saveOrUpdate(@RequestBody AdGroupSystemApplyDto dto) {
return adGroupSystemApplyService.saveOrUpdateDto(dto); return adGroupSystemApplyService.saveOrUpdateDto(dto);
} }
@ApiOperation("初始化(新增或修改)") @ApiOperation("初始化(新增或修改)")
@GetMapping({"/getInit", "/getInit/{sid}"}) @GetMapping({"/getInit", "/getInit/{sid}"})
public ResultBean<AdGroupSystemApplyVo> getInit( public ResultBean<AdGroupSystemApplyVo> getInit(
@ -64,7 +66,7 @@ public class AdGroupSystemApplyRest {
@GetMapping("/details/{sid}") @GetMapping("/details/{sid}")
ResultBean<AdGroupSystemApplyVo> details(@PathVariable("sid") String sid ResultBean<AdGroupSystemApplyVo> details(@PathVariable("sid") String sid
, @RequestParam(value = "application", required = false) String application) { , @RequestParam(value = "application", required = false) String application) {
return adGroupSystemApplyService.details(sid,application); return adGroupSystemApplyService.details(sid, application);
} }
@ApiOperation("提交审批流程") @ApiOperation("提交审批流程")
@ -84,6 +86,7 @@ public class AdGroupSystemApplyRest {
public ResultBean complete(@Valid @RequestBody CompleteDto dto) { public ResultBean complete(@Valid @RequestBody CompleteDto dto) {
return adGroupSystemApplyService.complete(dto); return adGroupSystemApplyService.complete(dto);
} }
@ApiOperation("获取流程操作标题") @ApiOperation("获取流程操作标题")
@GetMapping("/getFlowOperateTitle") @GetMapping("/getFlowOperateTitle")
@ResponseBody @ResponseBody

5
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java

@ -14,6 +14,7 @@ import lombok.Data;
@ApiModel(value = "集团制度会签审批", description = "集团制度会签审批") @ApiModel(value = "集团制度会签审批", description = "集团制度会签审批")
@TableName("ad_group_system_apply") @TableName("ad_group_system_apply")
public class AdGroupSystemApply extends BaseEntity { public class AdGroupSystemApply extends BaseEntity {
private static final long serialVersionUID = 1378089487690059793L;
@ApiModelProperty("拟发布制度标题") @ApiModelProperty("拟发布制度标题")
private String title; private String title;
@ApiModelProperty("起草修订说明") @ApiModelProperty("起草修订说明")
@ -22,4 +23,8 @@ public class AdGroupSystemApply extends BaseEntity {
private String content; private String content;
@ApiModelProperty("基础表单sid") @ApiModelProperty("基础表单sid")
private String formSid; private String formSid;
@ApiModelProperty("选择的会签人员")
private String approversSid;
private String approversName;
} }

6
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java

@ -1,5 +1,6 @@
package com.yxt.anrui.oa.biz.adgroupsystemapply; package com.yxt.anrui.oa.biz.adgroupsystemapply;
import com.yxt.anrui.oa.biz.oaform.FormCommon;
import com.yxt.anrui.oa.biz.oaform.OaFormDto; import com.yxt.anrui.oa.biz.oaform.OaFormDto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -15,6 +16,7 @@ import java.util.List;
@Data @Data
@ApiModel(value = "集团制度会签审批 数据传输对象", description = "集团制度会签审批 数据传输对象") @ApiModel(value = "集团制度会签审批 数据传输对象", description = "集团制度会签审批 数据传输对象")
public class AdGroupSystemApplyDto extends OaFormDto { public class AdGroupSystemApplyDto extends OaFormDto {
private static final long serialVersionUID = -6434832123230021480L;
private String sid; private String sid;
@ApiModelProperty("拟发布制度标题") @ApiModelProperty("拟发布制度标题")
private String title; private String title;
@ -28,4 +30,8 @@ public class AdGroupSystemApplyDto extends OaFormDto {
private List<String> files = new ArrayList<>(); private List<String> files = new ArrayList<>();
@ApiModelProperty("文件") @ApiModelProperty("文件")
private List<String> appes = new ArrayList<>(); private List<String> appes = new ArrayList<>();
@ApiModelProperty("选择的会签人员")
// private List<String> approvers = new ArrayList<>();
private List<FormCommon> approvers = new ArrayList<>();
} }

98
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java

@ -10,6 +10,7 @@ import com.yxt.anrui.oa.feign.file.OaFileEnum;
import com.yxt.anrui.oa.feign.flowable.flow.ProcDefEnum; import com.yxt.anrui.oa.feign.flowable.flow.ProcDefEnum;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo;
import com.yxt.anrui.oa.feign.sysuser.SysUserVo;
import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.query.PagerQuery;
@ -19,17 +20,15 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections; import java.util.*;
import java.util.HashMap; import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;
/** /**
* @author wangpengfei * @author wangpengfei
* @date 2025/2/7 15:31 * @date 2025/2/7 15:31
*/ */
@Service @Service
public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystemApplyMapper, AdGroupSystemApply> { public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystemApplyMapper, AdGroupSystemApply> {
@Autowired @Autowired
OaFormService oaFormService; OaFormService oaFormService;
@Autowired @Autowired
@ -37,7 +36,6 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
@Autowired @Autowired
OaAppendixService oaAppendixService; OaAppendixService oaAppendixService;
public PagerVo<AdGroupSystemApplyVo> listPageVo(PagerQuery<AdGroupSystemApplyQuery> pq) { public PagerVo<AdGroupSystemApplyVo> listPageVo(PagerQuery<AdGroupSystemApplyQuery> pq) {
AdGroupSystemApplyQuery query = pq.getParams(); AdGroupSystemApplyQuery query = pq.getParams();
QueryWrapper<AdGroupSystemApply> qw = new QueryWrapper<>(); QueryWrapper<AdGroupSystemApply> qw = new QueryWrapper<>();
@ -58,6 +56,12 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
String sid = dto.getSid(); String sid = dto.getSid();
List<String> files = dto.getFiles(); List<String> files = dto.getFiles();
List<String> appes = dto.getAppes(); List<String> appes = dto.getAppes();
List<FormCommon> approvers = dto.getApprovers();
if (approvers.isEmpty()) {
return rb.setMsg("请选择会签人员");
}
List<String> approversSid = approvers.stream().map(v -> v.getId()).collect(Collectors.toList());
List<String> approversName = approvers.stream().map(v -> v.getDictValue()).collect(Collectors.toList());
if (StringUtils.isBlank(sid)) { if (StringUtils.isBlank(sid)) {
// 新建操作 // 新建操作
AdGroupSystemApply entity = new AdGroupSystemApply(); AdGroupSystemApply entity = new AdGroupSystemApply();
@ -71,23 +75,32 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
} }
entity.setFormSid(resultBean.getData()); entity.setFormSid(resultBean.getData());
entity.setCreateBySid(dto.getCreateBySid()); entity.setCreateBySid(dto.getCreateBySid());
String approver = String.join(",", approversSid);
entity.setApproversSid(approver);
entity.setApproversName(String.join(",", approversName));
baseMapper.insert(entity); baseMapper.insert(entity);
sid = entity.getSid(); sid = entity.getSid();
} else { } else {
// 更新操作 // 更新操作
AdGroupSystemApply entity = fetchBySid(sid); AdGroupSystemApply entity = fetchBySid(sid);
BeanUtil.copyProperties(dto, entity, "id", "sid"); BeanUtil.copyProperties(dto, entity, "id", "sid");
String approver = String.join(",", approversSid);
entity.setApproversSid(approver);
entity.setApproversName(String.join(",", approversName));
baseMapper.updateById(entity); baseMapper.updateById(entity);
} }
saveFiles(sid, files, OaFileEnum.GROUPSYSTEMAPPLY.getAttachType(), "图片"); saveFiles(sid, files, OaFileEnum.GROUPSYSTEMAPPLY.getAttachType(), "图片");
saveFiles(sid, appes, OaFileEnum.GROUPSYSTEMAPPLY.getAttachType(), "文件"); saveFiles(sid, appes, OaFileEnum.GROUPSYSTEMAPPLY.getAttachType(), "文件");
return rb.success().setData(sid); return rb.success().setData(sid);
} }
public ResultBean<AdGroupSystemApplyVo> getSaveInit(String userSid, String orgPath) { public ResultBean<AdGroupSystemApplyVo> getSaveInit(String userSid, String orgPath) {
ResultBean<AdGroupSystemApplyVo> rb = ResultBean.fireFail(); ResultBean<AdGroupSystemApplyVo> rb = ResultBean.fireFail();
AdGroupSystemApplyVo AdGroupSystemApplyVo = new AdGroupSystemApplyVo(); AdGroupSystemApplyVo AdGroupSystemApplyVo = new AdGroupSystemApplyVo();
AdGroupSystemApplyVo.setCreateBySid(userSid); AdGroupSystemApplyVo.setCreateBySid(userSid);
AdGroupSystemApplyVo.setOrgSidPath(orgPath); AdGroupSystemApplyVo.setOrgSidPath(orgPath);
String roleSids = getRoleSids();
AdGroupSystemApplyVo.setRoleSids(roleSids);
return rb.success().setData(AdGroupSystemApplyVo); return rb.success().setData(AdGroupSystemApplyVo);
} }
@ -98,7 +111,6 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
if (AdGroupSystemApply == null) { if (AdGroupSystemApply == null) {
return rb.setMsg("该申请不存在"); return rb.setMsg("该申请不存在");
} }
// hrHireApplyVo.setTestPage(hrHireApply.getTestPage());
OaForm oaForm = oaFormService.fetchBySid(sid); OaForm oaForm = oaFormService.fetchBySid(sid);
AdGroupSystemApplyVo.setTaskId(oaForm.getTaskId()); AdGroupSystemApplyVo.setTaskId(oaForm.getTaskId());
AdGroupSystemApplyVo.setProcInsId(oaForm.getProcInstId()); AdGroupSystemApplyVo.setProcInsId(oaForm.getProcInstId());
@ -108,14 +120,45 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
AdGroupSystemApplyVo.setOrgSidPath(orgSidPath); AdGroupSystemApplyVo.setOrgSidPath(orgSidPath);
AdGroupSystemApplyVo.setCreateBySid(oaForm.getCreateBySid()); AdGroupSystemApplyVo.setCreateBySid(oaForm.getCreateBySid());
BeanUtil.copyProperties(AdGroupSystemApply, AdGroupSystemApplyVo); BeanUtil.copyProperties(AdGroupSystemApply, AdGroupSystemApplyVo);
// FormCommon isFinanceObj = FormCommon.of(AdGroupSystemApply.getIsFinanceKey(), AdGroupSystemApply.getIsFinanceValue());
// AdGroupSystemApplyVo.setIsFinanceObj(isFinanceObj);
List<String> files = oaAppendixService.selectByLinkSid(sid); List<String> files = oaAppendixService.selectByLinkSid(sid);
AdGroupSystemApplyVo.setFiles(files); AdGroupSystemApplyVo.setFiles(files);
AdGroupSystemApplyVo.setSid(sid); AdGroupSystemApplyVo.setSid(sid);
String approverSid = AdGroupSystemApply.getApproversSid();
String approverName = AdGroupSystemApply.getApproversName();
List<String> approversSid = Arrays.asList(approverSid.split(","));
List<String> approversName = Arrays.asList(approverName.split(","));
List<FormCommon> approverss = new ArrayList<>();
for (int i = 0; i < approversSid.size(); i++) {
FormCommon formCommon = FormCommon.of(approversSid.get(i), approversName.get(i));
approverss.add(formCommon);
}
String roleSids = getRoleSids();
AdGroupSystemApplyVo.setRoleSids(roleSids);
return rb.success().setData(AdGroupSystemApplyVo); return rb.success().setData(AdGroupSystemApplyVo);
} }
public String getRoleSids() {
/**
* b3d51a89-2fe3-4d4e-a4e8-0ea436260dab 行政中心总经理
* b2bcdfd6-ac51-408c-9c7a-7e9818d23155 财务中心总经理
* e48f6ee4-c69e-401d-b386-ae111a1ecd68 财务中心核算经理
* 33eef15f-96ea-494b-9daa-2b1c17cf1717 业务中心总经理
* 7d82ea61-7033-497d-bf8b-4d5da464db64 业务中心服务经理
* 537bea8f-75e8-430c-9a5f-3140bda41f39 风控中心总经理
* 6bccde2a-6be7-4ebc-a9ba-380ea9b161e9 风控中心副总经理
* da5b21ab-10c1-49be-b168-01e96c7f51b3 财务中心分管
*/
String roleSids = "b3d51a89-2fe3-4d4e-a4e8-0ea436260dab," +
"b2bcdfd6-ac51-408c-9c7a-7e9818d23155," +
"e48f6ee4-c69e-401d-b386-ae111a1ecd68," +
"33eef15f-96ea-494b-9daa-2b1c17cf1717," +
"7d82ea61-7033-497d-bf8b-4d5da464db64," +
"537bea8f-75e8-430c-9a5f-3140bda41f39," +
"6bccde2a-6be7-4ebc-a9ba-380ea9b161e9," +
"da5b21ab-10c1-49be-b168-01e96c7f51b3";
return roleSids;
}
// 保存文件 // 保存文件
private void saveFiles(String sid, List<String> files, String attachType, String fileType) { private void saveFiles(String sid, List<String> files, String attachType, String fileType) {
files.removeAll(Collections.singleton(null)); files.removeAll(Collections.singleton(null));
@ -131,19 +174,31 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
*/ */
public ResultBean<AdGroupSystemApplyVo> details(String sid, String application) { public ResultBean<AdGroupSystemApplyVo> details(String sid, String application) {
ResultBean<AdGroupSystemApplyVo> rb = ResultBean.fireFail(); ResultBean<AdGroupSystemApplyVo> rb = ResultBean.fireFail();
AdGroupSystemApply adGroupSystemApply = fetchBySid(sid);
AdGroupSystemApplyVo AdGroupSystemApplyVo = baseMapper.details(sid); AdGroupSystemApplyVo AdGroupSystemApplyVo = baseMapper.details(sid);
if (AdGroupSystemApplyVo == null) { if (adGroupSystemApply == null) {
return rb.setMsg("该申请不存在"); return rb.setMsg("该申请不存在");
} }
List<String> files = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "图片"); List<String> files = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "图片");
List<String> appes= oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件"); List<String> appes = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件");
AdGroupSystemApplyVo.setFiles(files); AdGroupSystemApplyVo.setFiles(files);
AdGroupSystemApplyVo.setAppes(appes); AdGroupSystemApplyVo.setAppes(appes);
//基础字段赋值 //基础字段赋值
BeanUtil.copyProperties(oaFormService.getDetails(sid), AdGroupSystemApplyVo); BeanUtil.copyProperties(oaFormService.getDetails(sid), AdGroupSystemApplyVo);
String approverSid = adGroupSystemApply.getApproversSid();
String approverName = adGroupSystemApply.getApproversName();
List<String> approversSid = Arrays.asList(approverSid.split(","));
List<String> approversName = Arrays.asList(approverName.split(","));
List<FormCommon> approverss = new ArrayList<>();
for (int i = 0; i < approversSid.size(); i++) {
FormCommon formCommon = FormCommon.of(approversSid.get(i), approversName.get(i));
approverss.add(formCommon);
}
AdGroupSystemApplyVo.setApprovers(approverss);
return rb.success().setData(AdGroupSystemApplyVo); return rb.success().setData(AdGroupSystemApplyVo);
} }
/** /**
* 提交 * 提交
* *
@ -157,14 +212,10 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
return rb.setMsg(stringResultBean.getData()); return rb.setMsg(stringResultBean.getData());
} }
String businessSid = stringResultBean.getData(); String businessSid = stringResultBean.getData();
SubmitDto submitDto = new SubmitDto(); SubmitDto submitDto = new SubmitDto();
submitDto.setUserSid(dto.getCreateBySid()); submitDto.setUserSid(dto.getCreateBySid());
submitDto.setBusinessSid(businessSid); submitDto.setBusinessSid(businessSid);
Map<String, Object> formVariables = new HashMap<>(); Map<String, Object> formVariables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
// appMap.put("sid", businessSid);
formVariables = getMap(formVariables, businessSid); formVariables = getMap(formVariables, businessSid);
submitDto.setFormVariables(formVariables); submitDto.setFormVariables(formVariables);
submitDto.setProcDefId(ProcDefEnum.GROUPSYSTEMAPPLY.getProDefId()); submitDto.setProcDefId(ProcDefEnum.GROUPSYSTEMAPPLY.getProDefId());
@ -172,6 +223,7 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
submitDto.setRule(OaFormRuleEnum.DIRECTLY_UNDER.getRule()); submitDto.setRule(OaFormRuleEnum.DIRECTLY_UNDER.getRule());
return oaFormService.submit(submitDto); return oaFormService.submit(submitDto);
} }
/** /**
* 驳回 * 驳回
* *
@ -228,8 +280,10 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
// 返回成功的结果和获取到的节点名称 // 返回成功的结果和获取到的节点名称
return rb.success().setData(data); return rb.success().setData(data);
} }
public Map<String, Object> getMap(Map<String, Object> formVariables, String sid) { public Map<String, Object> getMap(Map<String, Object> formVariables, String sid) {
Map<String, Object> appMap = new HashMap<>(); Map<String, Object> appMap = new HashMap<>();
AdGroupSystemApply adGroupSystemApply = fetchBySid(sid);
appMap.put("sid", sid); appMap.put("sid", sid);
/*appMap.put("editUrl", "approval/#/pages/EditOnboradingApplyActivity?sid=" + sid); /*appMap.put("editUrl", "approval/#/pages/EditOnboradingApplyActivity?sid=" + sid);
appMap.put("detailUrl", "approval/#/pages/DetailOnboradingApplyActivity?sid=" + sid); appMap.put("detailUrl", "approval/#/pages/DetailOnboradingApplyActivity?sid=" + sid);
@ -252,10 +306,16 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
formVariables.put("app", appMap); formVariables.put("app", appMap);
// //根据组织查询是否是分公司 // //根据组织查询是否是分公司
OaForm oaForm = oaFormService.fetchBySid(sid); OaForm oaForm = oaFormService.fetchBySid(sid);
AdGroupSystemApply adPermissionApply = fetchBySid(sid);
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(oaForm.getUseOrgSid()).getData(); SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(oaForm.getUseOrgSid()).getData();
//是否是分公司 //是否需要总裁审批
// formVariables.put("isTrue", sysOrganization.getIsDept() == 0); formVariables.put("isTrue", false);
/* List<String> approversList = new ArrayList<>();
approversList.add("08d6f4a7-31f7-498f-a639-8c9abea4df35");
approversList.add("30b33cd2-610a-4917-ba46-80b09f52c4b9");
approversList.add("d76fe91e-8080-4344-89e7-3ea22dacfb16");*/
String approver = adGroupSystemApply.getApproversSid();
List<String> approvers = Arrays.asList(approver.split(","));
formVariables.put("approvers", approvers);
return formVariables; return formVariables;
} }

5
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java

@ -34,4 +34,9 @@ public class AdGroupSystemApplyVo extends OaFormCommonVo {
private String taskId; private String taskId;
@ApiModelProperty("流程实例id") @ApiModelProperty("流程实例id")
private String procInsId; private String procInsId;
@ApiModelProperty("选择的会签人员")
private List<FormCommon> approvers = new ArrayList<>();
@ApiModelProperty("会签角色")
private String roleSids;
} }

16
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java

@ -14,6 +14,7 @@ import com.yxt.anrui.oa.feign.flowable.flow.FlowableFeign;
import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo; import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo;
import com.yxt.anrui.oa.feign.flowable.flow2.FlowDelegateQuery; import com.yxt.anrui.oa.feign.flowable.flow2.FlowDelegateQuery;
import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign; import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign;
import com.yxt.anrui.oa.feign.flowable.flow3.Flow3Feign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign; import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo; import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo;
import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo; import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo;
@ -73,6 +74,9 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
@Autowired @Autowired
private FileUploadComponent fileUploadComponent; private FileUploadComponent fileUploadComponent;
@Autowired
private Flow3Feign flow3Feign;
/** /**
* 保存oaform表单 * 保存oaform表单
* *
@ -211,8 +215,8 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
} }
BeanUtil.copyProperties(businessVariablesResultBean.getData(), bv, "taskDefKey", "taskId"); BeanUtil.copyProperties(businessVariablesResultBean.getData(), bv, "taskDefKey", "taskId");
bv.setInstanceId(oaForm.getProcInstId()); bv.setInstanceId(oaForm.getProcInstId());
if (bv.getTaskId().equals(oaForm.getTaskId())) { if (oaForm.getTaskId().contains(bv.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv); ResultBean<UpdateFlowFieldVo> resultBean = flow3Feign.handleProsess(bv);
if (!resultBean.getSuccess()) { if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg()); return rb.setMsg(resultBean.getMsg());
} }
@ -320,7 +324,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
} }
String businessTaskId = oaForm.getTaskId(); String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) { if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(dto.getTaskId())) { if (businessTaskId.contains(dto.getTaskId())) {
if (StringUtils.isBlank(dto.getComment())) { if (StringUtils.isBlank(dto.getComment())) {
return rb.setMsg("请填写意见"); return rb.setMsg("请填写意见");
} }
@ -395,7 +399,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
OaForm oaForm = fetchBySid(dto.getBusinessSid()); OaForm oaForm = fetchBySid(dto.getBusinessSid());
String businessTaskId = oaForm.getTaskId(); String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) { if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(dto.getTaskId())) { if (businessTaskId.contains(dto.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo(); FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(dto, flowTaskVo); BeanUtil.copyProperties(dto, flowTaskVo);
flowTaskVo.setInstanceId(dto.getProcInsId()); flowTaskVo.setInstanceId(dto.getProcInsId());
@ -445,7 +449,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
updateFlow(oaFormFlowDto); updateFlow(oaFormFlowDto);
return rb.success().setData(resultBean.getData()); return rb.success().setData(resultBean.getData());
} else { } else {
if (businessTaskId.equals(dto.getTaskId())) { if (businessTaskId.contains(dto.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo(); FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(dto, flowTaskVo); BeanUtil.copyProperties(dto, flowTaskVo);
flowTaskVo.setInstanceId(dto.getProcInsId()); flowTaskVo.setInstanceId(dto.getProcInsId());
@ -520,7 +524,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
int r = submitBusinessData(dto, oaForm.getTaskId()); int r = submitBusinessData(dto, oaForm.getTaskId());
if (r == 1) { if (r == 1) {
//启动流程 //启动流程
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv); ResultBean<UpdateFlowFieldVo> voResultBean = flow3Feign.startProcess(bv);
if (voResultBean.getSuccess()) { if (voResultBean.getSuccess()) {
UpdateFlowFieldVo ufVo = voResultBean.getData(); UpdateFlowFieldVo ufVo = voResultBean.getData();
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto(); OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();

4
yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java

@ -9,8 +9,8 @@ public enum ProcDefEnum {
/***************************正式流程id***********************************/ /***************************正式流程id***********************************/
OALEAVEAPPLY("请假申请", "process_su0yph7n:1:15957504"), OALEAVEAPPLY("请假申请", "process_su0yph7n:1:15957504"),
OAMENDAPPLY("补卡申请", "process_9suucr96:1:16072504"), OAMENDAPPLY("补卡申请", "process_9suucr96:1:16072504"),
HIHIREAPPLY("招聘需求", "process_zy0m4jrp:1:16802504"), HIHIREAPPLY("招聘需求", "process_zy0m4jrp:2:18045004"),
GROUPSYSTEMAPPLY("集团制度", "process_6lnebpbi:1:16905004"), GROUPSYSTEMAPPLY("集团制度", "process_6nzob224:2:18045008"),
BGYPLYAPPLY("办公用品领用", ""), BGYPLYAPPLY("办公用品领用", ""),
GDZCCG_GS_APPLY("公司固定资产采购申请", ""), GDZCCG_GS_APPLY("公司固定资产采购申请", ""),
GDZCCG_ZX_APPLY("中心固定资产采购申请", ""), GDZCCG_ZX_APPLY("中心固定资产采购申请", ""),

9
yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java

@ -17,8 +17,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
public interface Flow3Feign { public interface Flow3Feign {
@ApiOperation(value = "启动流程") @ApiOperation(value = "启动流程")
@PostMapping(value = "/startProcess2") @PostMapping(value = "/startProcess")
@ResponseBody @ResponseBody
ResultBean<UpdateFlowFieldVo> startProcess2(@RequestBody BusinessVariables dto); ResultBean<UpdateFlowFieldVo> startProcess(@RequestBody BusinessVariables dto);
@PostMapping("/handleProsess")
@ResponseBody
@ApiOperation("办理")
public ResultBean<UpdateFlowFieldVo> handleProsess(@RequestBody BusinessVariables dto);
} }
Loading…
Cancel
Save