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系統權限"; }