1.指定到人

@Override
@Transactional(rollbackFor = Exception.class)
// @GlobalTransactional
public boolean startProcess(ProcessPurchaseOrder bean) {
//是否啟動流程
boolean isStartProcess = false;
//是否新增數據
boolean isAdd = false;
if (bean != null) {
if (Func.isEmpty(bean.getProcessInstanceId())) {
isStartProcess = true;
}
if (Func.isEmpty(bean.getId())) {
isAdd = true;
}
//更新業務數據
if (isAdd) {
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String dateStr = format.format(now);
if(Func.isNull(bean.getOrderNumber())){
bean.setOrderNumber(oaSerialService.getSerial(bean.getTenantId(),"purchaseOrder",dateStr,dateStr,5));
}
//第一次發起 保存數據到采購訂單表和訂單詳情表
save(bean);
//采購訂單明細進入明細表
saveDetail(bean.getPurchaseOrderDetail(), bean.getOrderNumber());
} else {
updateById(bean);
//從新發起修改采購訂單詳細表1.先刪除以前的數據,2.從新插入新的訂單詳情
deleteOrderDetail(bean.getOrderNumber());
saveDetail(bean.getPurchaseOrderDetail(), bean.getOrderNumber());
}
//更新附件信息
oaAttachmentService.saveOrUpdateOaAttachment(bean.getAttachments(),bean.getId(),bean.getProcessInstanceId(),bean.getTenantId(),"purchaseOrder");
}
//除了茶葉 原物料 都走主管 經理審批
bean.setChanges("01");
System.out.println("urchaseType=================="+bean.getPurchaseType());
//茶葉 原物料 價格沒有變動 只走主管審批
if(bean.getPurchaseType().equals("茶葉") || bean.getPurchaseType().equals("原物料")){
if (null != bean.getPurchaseOrderDetail() && bean.getPurchaseOrderDetail().size() > 0) {
for (ProcessPurchaseOrderDetail processPurchaseOrderDetail : bean.getPurchaseOrderDetail()) {
System.out.println("processPurchaseOrderDetail.getPriceChange()====" + processPurchaseOrderDetail.getPriceChange());
if (processPurchaseOrderDetail.getPriceChange().equals("1")) {//01價格有變動 02沒有變動
bean.setChanges("01");
break;
}else{
bean.setChanges("02");
}
}
}
}
//獲取發起人部門id
Long curDeptId = DeskUtil.getCurDeptId(bean.getCreateDept());
//獲取經理職位
Long managerUser=null;
String roleId=deptUserUtil.getRoleId(AuthUtil.getTenantId(), "經理");
List<User>users=deptUserUtil.getUserListByRoleIdAndDeptId(roleId,String.valueOf(curDeptId),false);
if(!Func.isEmpty(users)){
managerUser=users.get(0).getId();
}
log.info("獲取經理職位roleId====="+roleId+"------users========================"+users);
//獲取部門總監
String majorRoleId=deptUserUtil.getRoleId(AuthUtil.getTenantId(), "總監");
List<User>majordomoUsers=deptUserUtil.getUserListByRoleIdAndDeptId(majorRoleId,String.valueOf(curDeptId),true);
Long generalManager=null;
if(null!=majordomoUsers && majordomoUsers.size()>0){
generalManager =majordomoUsers.get(0).getId();
}
log.info("獲取總監majorRoleId===="+majorRoleId+"-----majordomoUsers========================"+majordomoUsers);
//獲取總經理
String companyBossPostId=deptUserUtil.getPostId("總經理",bean.getTenantId());
List<User>companyBossUsers=deptUserUtil.getUserListByPostId(companyBossPostId);//總經理不屬於某個部門,不用根據部門id查詢
Long companyBoss=null;
if(null!=companyBossUsers && companyBossUsers.size()>0){
companyBoss=companyBossUsers.get(0).getId();
}
log.info("獲取總經理companyBossPostId====="+companyBossPostId+"-------companyBossUsers========================"+companyBossUsers);
//上級主管
roleId = deptUserUtil.getRoleId(AuthUtil.getTenantId(),"主管");
boolean isManager = Func.isNotEmpty(AuthUtil.getUserRole())&&AuthUtil.getUserRole().contains("主管")?true:false;
Long lastManagerUserId = null;
if(isManager){
users = deptUserUtil.getUserListByRoleIdAndDeptId(roleId,String.valueOf(curDeptId),true,AuthUtil.getUserId());
lastManagerUserId = Func.isEmpty(users)?null:users.get(0).getId();
}
/**
* 判斷條件
*/
//如果發起人是總監或者經理不是部門最高領導 沒有的職位跳過經理職位
if(null!=managerUser){
if(AuthUtil.getUser().getUserId().longValue()==managerUser.longValue()){
managerUser=null;//經理
}
}
//跳過總監
if(null!=generalManager){
//跳過總監
if(AuthUtil.getUser().getUserId().longValue()==generalManager.longValue()){
//跳過經理
managerUser=null;//經理
//跳過總監職位
generalManager=null;
}
}
Kv variables =DeskUtil.createKV(curDeptId,"采購訂單",bean.getOrderNumber(),bean.getApplicantName(),isManager,bean.getCcUser(),bean.getCcUserName())
.set("taskUser", TaskUtil.getTaskUser(AuthUtil.getUser().getUserId().toString()))
.set("category", bean.getCategory())//申請類型
.set("changes", bean.getChanges())//價格是否變動
.set("managerSkip", Func.isEmpty(managerUser))
.set("managerUser",TaskUtil.getTaskUser(String.valueOf(managerUser==null ? "" : managerUser)))//經理
.set("generalManagerSkip", Func.isEmpty(generalManager))
.set("generalManager",TaskUtil.getTaskUser(String.valueOf(generalManager==null ? "" : generalManager)))//總監
.set("companyBossSkip",Func.isEmpty(companyBoss))
.set("companyBossUser", TaskUtil.getTaskUser(String.valueOf(companyBoss==null ? "" : companyBoss)))//總經理
.set("lastManagerSkip",Func.isEmpty(lastManagerUserId))
.set("lastManagerUser",TaskUtil.getTaskUser(String.valueOf(lastManagerUserId)));
//開啟流程
if (isStartProcess) {
String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PURCHASE_ORDER_KEY);//獲取表名
R<BladeFlow> result = flowClient.startProcessInstanceById(bean.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(bean.getId())), variables);
if (result.isSuccess()) {
log.debug("流程已啟動,流程ID:" + result.getData().getProcessInstanceId());
// 返回流程id寫入leave
bean.setProcessInstanceId(result.getData().getProcessInstanceId());
updateById(bean);
} else {
throw new ServiceException("開啟流程失敗");
}
} else {
//開啟流程 TaskId ProcessInstanceId
if(!Func.isEmpty(bean.getFlow())&&!Func.isEmpty(bean.getFlow().getTaskId())&&!Func.isEmpty(bean.getProcessInstanceId())){
variables.put(ProcessConstant.PASS_KEY, true);
flowClient.completeTask(bean.getFlow().getTaskId(),bean.getProcessInstanceId(),bean.getFlow().getComment(),variables);
}
}
return true;
}
//2.指定到角色

/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄騫 (smallchill@163.com)
*/
package org.springblade.desk.management.service.impl;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.management.constant.AuthorityConstant;
import org.springblade.desk.management.entity.OaAuthorityManagement;
import org.springblade.desk.management.mapper.OaAuthorityManagementMapper;
import org.springblade.desk.management.service.IOaAuthorityManagementService;
import org.springblade.desk.service.impl.AdjustPriceDetailServiceImpl;
import org.springblade.desk.service.impl.OaSerialServiceImpl;
import org.springblade.desk.utils.DeptUserUtil;
import org.springblade.desk.utils.DeskUtil;
import org.springblade.flow.core.constant.ProcessConstant;
import org.springblade.flow.core.entity.BladeFlow;
import org.springblade.flow.core.feign.IFlowClient;
import org.springblade.flow.core.utils.FlowUtil;
import org.springblade.flow.core.utils.TaskUtil;
import org.springblade.system.user.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 權限申請單
*
* @author pei
*/
@Slf4j
@Service
@AllArgsConstructor
public class OaAuthorityManagementServiceImpl extends BaseServiceImpl<OaAuthorityManagementMapper, OaAuthorityManagement> implements IOaAuthorityManagementService {
private IFlowClient flowClient;
private OaSerialServiceImpl oaSerialService;
private AdjustPriceDetailServiceImpl adjustPriceDetailServiceImpl;
private DeptUserUtil deptUserUtil;
@Override
@Transactional(rollbackFor = Exception.class)
public boolean startProcess(OaAuthorityManagement bean) {
log.info("權限申請單開啟流程bean============="+bean);
//是否啟動流程
boolean isStartProcess = false;
//是否新增數據
boolean isAdd = false;
if(bean!=null){
if(Func.isEmpty(bean.getProcessInstanceId())){
isStartProcess = true;
}
if(Func.isEmpty(bean.getId())){
isAdd = true;
bean.setTenantId(AuthUtil.getTenantId());
}
//更新業務數據
if(isAdd){
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String dateStr = format.format(now);
if(Func.isEmpty(bean.getAuthorityManagementNumber())){
bean.setAuthorityManagementNumber(oaSerialService.getSerial(AuthUtil.getTenantId(),"OaAuthorityManagement",dateStr,dateStr,5));
}
}
if(Func.isNotEmpty(bean.getObjIfo())){
//將系統權限數據轉換成string保存入庫
String str= JSONObject.toJSONString(bean.getObjIfo());
bean.setApplicationSystemValue(str);
}
saveOrUpdate(bean);
}
Long curDeptId = DeskUtil.getCurDeptId(bean.getCreateDept());
//獲取主管
Long managerUser=null;
String roleId=deptUserUtil.getRoleId(AuthUtil.getTenantId(), "主管");
List<User> users=deptUserUtil.getUserListByRoleIdAndDeptId(roleId,String.valueOf(curDeptId),false,AuthUtil.getUserId());
if(!Func.isEmpty(users)){
managerUser=users.get(0).getId();
}
log.info("獲取主管職位roleId====="+roleId+"------users========================"+users);
//獲取it部門審批人
//1.根據部門名稱獲取部門id IT部
String deptId= deptUserUtil.getDeptId(AuthUtil.getTenantId(),AuthorityConstant.IT_DEPT_NAME);
String itRoleId=deptUserUtil.getRoleId(AuthUtil.getTenantId(), AuthorityConstant.IT_ROLE_NAME);
List<User>itRoleUsers=deptUserUtil.getUserListByRoleIdAndDeptId(itRoleId,String.valueOf(deptId));
log.info("獲取it部門審批人itRoleUsers================="+itRoleUsers);
Long itRoleManager=null;
if(null!=itRoleUsers && itRoleUsers.size()>0){
itRoleManager =itRoleUsers.get(0).getId();
}
boolean isManager = Func.isNotEmpty(AuthUtil.getUserRole())&&AuthUtil.getUserRole().contains("主管")?true:false;
// 啟動流程
Kv variables =DeskUtil.createKV(curDeptId,"權限申請單",bean.getAuthorityManagementNumber(),bean.getApplicationSystem()+","+bean.getRemark(),isManager,bean.getCcUser(),bean.getCcUserName())
.set("taskUser", TaskUtil.getTaskUser(AuthUtil.getUser().getUserId().toString()))
.set("managerSkip", Func.isEmpty(managerUser))
.set("managerUser",TaskUtil.getTaskUser(String.valueOf(managerUser==null ? "" : managerUser)))//主管
.set("itRoleManager",AuthorityConstant.IT_ROLE_NAME);//IT審批人(角色名稱)
//啟動流程 isStartProcess
if (isStartProcess) {//先不開啟流程
String businessTable = FlowUtil.getBusinessTable(ProcessConstant.OA_AUTHORITY_MANAGEMENT);
R<BladeFlow> result = flowClient.startProcessInstanceById(bean.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(bean.getId())), variables);
if (result.isSuccess()) {
log.debug("流程已啟動,流程ID:" + result.getData().getProcessInstanceId());
// 返回流程id寫入業務表中
bean.setProcessInstanceId(result.getData().getProcessInstanceId());
updateById(bean);
} else {
throw new ServiceException("開啟流程失敗");
}
}
else{
if(!Func.isEmpty(bean.getFlow())&&!Func.isEmpty(bean.getFlow().getTaskId())&&!Func.isEmpty(bean.getProcessInstanceId())){
variables.put(ProcessConstant.PASS_KEY, true);
flowClient.completeTask(bean.getFlow().getTaskId(),bean.getProcessInstanceId(),bean.getFlow().getComment(),variables);
}
}
return true;
}
}
package org.springblade.desk.management.constant;
/**
* 2021-01-08
*/
public interface AuthorityConstant {
/**
* 部門名稱
*/
String IT_DEPT_NAME="IT部";
/**
* IT部門角色
*/
String IT_ROLE_NAME="IT系統權限";
}
