@ -1,26 +1,50 @@
package com.ruoyi.purchase.service.impl ;
import com.github.pagehelper.Page ;
import com.ruoyi.common.core.domain.entity.SysUser ;
import com.ruoyi.common.core.page.PageDomain ;
import com.ruoyi.common.core.page.TableSupport ;
import com.ruoyi.common.core.redis.RedisCache ;
import com.ruoyi.common.core.text.Convert ;
import com.ruoyi.common.service.ICommonService ;
import com.ruoyi.common.utils.DateUtils ;
import com.ruoyi.common.utils.ShiroUtils ;
import com.ruoyi.common.utils.StringUtils ;
import com.ruoyi.process.general.service.IProcessService ;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper ;
import com.ruoyi.purchase.domain.PurchaseOrder ;
import com.ruoyi.purchase.domain.PurchaseOrderChild ;
import com.ruoyi.purchase.domain.PurchaseOrderVo ;
import com.ruoyi.purchase.domain.PurchasePlan ;
import com.ruoyi.purchase.mapper.PurchaseOrderChildMapper ;
import com.ruoyi.purchase.mapper.PurchaseOrderMapper ;
import com.ruoyi.purchase.mapper.PurchasePlanMapper ;
import com.ruoyi.purchase.service.IPurchaseOrderService ;
import com.ruoyi.system.mapper.SysUserMapper ;
import com.ruoyi.system.service.ISysAttachFileService ;
import com.ruoyi.system.service.ISysAttachService ;
import com.ruoyi.system.service.ISysRoleService ;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder ;
import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail ;
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderDetailMapper ;
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderMapper ;
import lombok.extern.slf4j.Slf4j ;
import org.activiti.engine.TaskService ;
import org.activiti.engine.impl.persistence.entity.TaskEntityImpl ;
import org.activiti.engine.runtime.ProcessInstance ;
import org.activiti.engine.task.Task ;
import org.springframework.beans.BeanUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.util.CollectionUtils ;
import org.springframework.util.ObjectUtils ;
import java.text.SimpleDateFormat ;
import java.math.BigDecimal ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
import java.util.Set ;
import java.util.stream.Collectors ;
/ * *
* 采购订单Service业务层处理
@ -44,28 +68,66 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
@Autowired
private WarehouseStorageOrderDetailMapper storageOrderDetailMapper ;
@Autowired
private ISysAttachService attachService ;
@Autowired
private ISysAttachFileService attachFileService ;
@Autowired
private ICommonService commonService ;
@Autowired
private SysUserMapper userMapper ;
@Autowired
private TaskService taskService ;
@Autowired
private BizTodoItemMapper todoItemMapper ;
@Autowired
private IProcessService processService ;
@Autowired
private ISysRoleService roleService ;
@Autowired
private PurchaseOrderChildMapper purchaseOrderChildService ;
@Autowired
private PurchasePlanMapper purchasePlanService ;
/ * *
* 查询采购订单
*
*
* @param purchaseOrderId 采购订单ID
* @return 采购订单
* /
@Override
public PurchaseOrder selectPurchaseOrderById ( Long purchaseOrderId )
public PurchaseOrderVo selectPurchaseOrderById ( Long purchaseOrderId )
{
return purchaseOrderMapper . selectPurchaseOrderById ( purchaseOrderId ) ;
PurchaseOrderVo purchaseOrderVo = purchaseOrderMapper . selectPurchaseOrderById ( purchaseOrderId ) ;
SysUser sysUser = userMapper . selectUserByLoginName ( purchaseOrderVo . getApplyUser ( ) ) ;
if ( sysUser ! = null ) {
purchaseOrderVo . setApplyUserName ( sysUser . getUserName ( ) ) ;
}
return purchaseOrderVo ;
}
/ * *
* 查询采购订单列表
*
* @param purchaseOrder 采购订单
*
* @param purchaseOrderVo 采购订单
* @return 采购订单
* /
@Override
public List < PurchaseOrder > selectPurchaseOrderList ( PurchaseOrder purchaseOrder )
public List < PurchaseOrderVo > selectPurchaseOrderList ( PurchaseOrderVo purchaseOrderVo )
{
return purchaseOrderMapper . selectPurchaseOrderList ( purchaseOrder ) ;
// PageHelper 仅对第一个 List 分页
List < PurchaseOrderVo > list = purchaseOrderMapper . selectPurchaseOrderList ( purchaseOrderVo ) ;
return list ;
}
/ * *
@ -81,7 +143,166 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
//根据上传的物料信息做采购订单子项
purchaseOrder . setCreateTime ( DateUtils . getNowDate ( ) ) ;
purchaseOrder . setCreateBy ( ShiroUtils . getLoginName ( ) ) ;
//
// 生成采购订单编号
purchaseOrder . setPurchaseOrderCode ( redisCache . generateBillNo ( "CG" ) ) ;
// 初始化累加变量
BigDecimal materialNoRmb = BigDecimal . ZERO ;
BigDecimal materialRmb = BigDecimal . ZERO ;
BigDecimal materialNoRmbSum = BigDecimal . ZERO ;
BigDecimal materialRmbSum = BigDecimal . ZERO ;
Long materialNum = 0L ;
int supplierNum = 0 ;
if ( ! CollectionUtils . isEmpty ( purchaseOrder . getPurchaseOrderChildList ( ) ) ) {
supplierNum = purchaseOrder . getPurchaseOrderChildList ( ) . size ( ) ;
}
if ( purchaseOrder . getPurchaseOrderChildList ( ) ! = null ) {
for ( PurchaseOrderChild child : purchaseOrder . getPurchaseOrderChildList ( ) ) {
if ( child . getCorrelationCode ( ) . contains ( "," ) ) {
String [ ] correlationCodes = child . getCorrelationCode ( ) . split ( "," ) ;
String [ ] planCodes = child . getPurchasePlanCode ( ) . split ( "," ) ;
String [ ] purchaseQuoteCodes = child . getPurchaseQuoteCode ( ) . split ( "," ) ;
for ( int i = 0 ; i < planCodes . length - 1 ; i + + ) {
String planCode = planCodes [ i ] ;
String correlationCode = correlationCodes [ i ] ;
if ( planCode ! = null ) {
PurchaseOrderChild material = new PurchaseOrderChild ( ) ;
child . setPurchaseOrderCode ( purchaseOrder . getPurchaseOrderCode ( ) ) ;
// 累加物料数量和金额
//获取物料供应商采购价格
BigDecimal suplierMaterialNoRmb = child . getMaterialNoRmb ( ) ;
// 获取物料供应商采购价格
BigDecimal suplierMaterialRmb = child . getMaterialRmb ( ) ;
// 获取物料数量
Long suplierMaterialNum = child . getMaterialNum ( ) ;
if ( suplierMaterialNum = = null ) { suplierMaterialNum = 0L ; }
if ( suplierMaterialRmb = = null ) { suplierMaterialRmb = BigDecimal . ZERO ; }
if ( suplierMaterialNoRmb = = null ) { suplierMaterialNoRmb = BigDecimal . ZERO ; }
// 累加物料数量
materialNum + = suplierMaterialNum ;
// 累加不含税物料价格
materialNoRmb = materialNoRmb . add ( suplierMaterialNoRmb ) ;
// 累加含税物料价格
materialRmb = materialRmb . add ( suplierMaterialRmb ) ;
// 计算不含税物料总价
BigDecimal suplierMaterialNoRmbSumLocal = suplierMaterialNoRmb . multiply ( BigDecimal . valueOf ( suplierMaterialNum ) ) ;
// 计算物料含税总价
BigDecimal suplierMaterialRmbSumLocal = suplierMaterialRmb . multiply ( BigDecimal . valueOf ( suplierMaterialNum ) ) ;
// 累加物料总价
materialNoRmbSum = materialNoRmbSum . add ( suplierMaterialNoRmbSumLocal ) ;
// 累加物料含税总价
materialRmbSum = materialRmbSum . add ( suplierMaterialRmbSumLocal ) ;
// 设置采购报价单编号和供应商信息到QuoteChild
material . setPurchaseQuoteCode ( purchaseOrder . getPurchaseOrderCode ( ) ) ;
material . setSupplierCode ( child . getSupplierCode ( ) ) ;
material . setMaterialUnit ( child . getMaterialUnit ( ) ) ;
material . setWarehouseDept ( child . getWarehouseDept ( ) ) ;
material . setSupplierName ( child . getSupplierName ( ) ) ;
material . setMaterialCode ( child . getMaterialCode ( ) ) ;
material . setMaterialName ( child . getMaterialName ( ) ) ;
material . setMaterialBrand ( child . getMaterialBrand ( ) ) ;
material . setMaterialDescribe ( child . getMaterialDescribe ( ) ) ;
material . setMaterialPhotoUrl ( child . getMaterialPhotoUrl ( ) ) ;
material . setMaterialProcessMethod ( child . getMaterialProcessMethod ( ) ) ;
material . setMaterialNoRmb ( child . getMaterialNoRmb ( ) ) ;
material . setMaterialRmb ( child . getMaterialRmb ( ) ) ;
material . setMaterialNum ( child . getMaterialNum ( ) ) ;
material . setMaterialNoRmbSum ( child . getMaterialNoRmbSum ( ) ) ;
material . setMaterialRmbSum ( child . getMaterialRmbSum ( ) ) ;
material . setMaterialRealNum ( child . getMaterialRealNum ( ) ) ;
material . setMaterialRealNoRmb ( child . getMaterialRealNoRmb ( ) ) ;
material . setMaterialRealRmb ( child . getMaterialRealRmb ( ) ) ;
material . setMaterialRealRmbSum ( child . getMaterialRealRmbSum ( ) ) ;
material . setMaterialRealNoRmbSum ( child . getMaterialRealNoRmbSum ( ) ) ;
material . setMaterialNoRmbSum ( child . getMaterialNoRmbSum ( ) ) ;
material . setCorrelationCode ( correlationCode ) ;
material . setPurchasePlanCode ( planCode ) ;
material . setPurchaseQuoteCode ( child . getPurchaseQuoteCode ( ) ) ;
material . setEceiptStatus ( "0" ) ;
material . setPaymentStatus ( "0" ) ;
material . setDelFlag ( "0" ) ;
// 执行子表插入操作
purchaseOrderChildService . insertPurchaseOrderChild ( child ) ;
PurchasePlan plan = new PurchasePlan ( ) ;
plan . setPurchasePlanCode ( child . getPurchasePlanCode ( ) ) ;
plan . setPurchasePlanStatus ( "1" ) ;
int result = purchasePlanService . updatePurchasePlan ( plan ) ;
}
}
child . setMaterialNoRmb ( BigDecimal . ZERO ) ;
}
else if ( ( child . getCorrelationCode ( ) . contains ( "," ) = = false )
& & child . getPurchasePlanCode ( ) ! = null ) {
PurchaseOrderChild material = new PurchaseOrderChild ( ) ;
child . setPurchaseOrderCode ( purchaseOrder . getPurchaseOrderCode ( ) ) ;
//获取物料供应商采购价格
BigDecimal suplierMaterialNoRmb = child . getMaterialNoRmb ( ) ;
// 获取物料供应商采购价格
BigDecimal suplierMaterialRmb = child . getMaterialRmb ( ) ;
// 获取物料数量
Long suplierMaterialNum = child . getMaterialNum ( ) ;
// 累加物料数量
materialNum + = suplierMaterialNum ;
if ( suplierMaterialNoRmb = = null ) { suplierMaterialNoRmb = BigDecimal . ZERO ; }
if ( suplierMaterialRmb = = null ) { suplierMaterialRmb = BigDecimal . ZERO ; }
if ( suplierMaterialNum = = null ) { suplierMaterialNum = 0L ; }
// 累加不含税物料价格
materialNoRmb = materialNoRmb . add ( suplierMaterialNoRmb ) ;
// 累加含税物料价格
materialRmb = materialRmb . add ( suplierMaterialRmb ) ;
// 计算不含税物料总价
BigDecimal suplierMaterialNoRmbSumLocal = suplierMaterialNoRmb . multiply ( BigDecimal . valueOf ( suplierMaterialNum ) ) ;
// 计算物料含税总价
BigDecimal suplierMaterialRmbSumLocal = suplierMaterialRmb . multiply ( BigDecimal . valueOf ( suplierMaterialNum ) ) ;
// 累加物料总价
materialNoRmbSum = materialNoRmbSum . add ( suplierMaterialNoRmbSumLocal ) ;
// 累加物料含税总价
materialRmbSum = materialRmbSum . add ( suplierMaterialRmbSumLocal ) ;
// 设置采购报价单编号和供应商信息到QuoteChild
material . setPurchaseOrderCode ( purchaseOrder . getPurchaseOrderCode ( ) ) ;
material . setSupplierCode ( child . getSupplierCode ( ) ) ;
material . setMaterialUnit ( child . getMaterialUnit ( ) ) ;
material . setWarehouseDept ( child . getWarehouseDept ( ) ) ;
material . setSupplierName ( child . getSupplierName ( ) ) ;
material . setMaterialCode ( child . getMaterialCode ( ) ) ;
material . setMaterialName ( child . getMaterialName ( ) ) ;
material . setMaterialBrand ( child . getMaterialBrand ( ) ) ;
material . setMaterialDescribe ( child . getMaterialDescribe ( ) ) ;
material . setMaterialPhotoUrl ( child . getMaterialPhotoUrl ( ) ) ;
material . setMaterialProcessMethod ( child . getMaterialProcessMethod ( ) ) ;
material . setMaterialNoRmb ( child . getMaterialNoRmb ( ) ) ;
material . setMaterialRmb ( child . getMaterialRmb ( ) ) ;
material . setMaterialNum ( child . getMaterialNum ( ) ) ;
material . setMaterialNoRmbSum ( child . getMaterialNoRmbSum ( ) ) ;
material . setMaterialRmbSum ( child . getMaterialRmbSum ( ) ) ;
material . setMaterialRealNum ( child . getMaterialRealNum ( ) ) ;
material . setMaterialRealNoRmb ( child . getMaterialRealNoRmb ( ) ) ;
material . setMaterialRealRmb ( child . getMaterialRealRmb ( ) ) ;
material . setMaterialRealRmbSum ( child . getMaterialRmbSum ( ) ) ;
material . setMaterialRealNoRmbSum ( child . getMaterialRealNoRmbSum ( ) ) ;
material . setMaterialNoRmbSum ( child . getMaterialNoRmbSum ( ) ) ;
material . setCorrelationCode ( child . getCorrelationCode ( ) ) ;
material . setPurchasePlanCode ( child . getPurchasePlanCode ( ) ) ;
material . setPurchaseQuoteCode ( child . getPurchaseQuoteCode ( ) ) ;
material . setEceiptStatus ( "0" ) ;
material . setPaymentStatus ( "0" ) ;
material . setDelFlag ( "0" ) ;
// 执行子表插入操作
purchaseOrderChildService . insertPurchaseOrderChild ( child ) ;
PurchasePlan plan = new PurchasePlan ( ) ;
plan . setPurchasePlanCode ( child . getPurchasePlanCode ( ) ) ;
plan . setPurchasePlanStatus ( "1" ) ;
int result = purchasePlanService . updatePurchasePlan ( plan ) ;
}
}
}
// 遍历处理采购订单子表
// 设置累加的物料信息到子表
purchaseOrder . setMaterialSum ( Math . toIntExact ( materialNum ) ) ;
purchaseOrder . setNoRmbSum ( materialNoRmbSum ) ;
purchaseOrder . setRmbSum ( materialRmbSum ) ;
// 设置主表的供应商数量
purchaseOrder . setSupplierNum ( supplierNum ) ;
return purchaseOrderMapper . insertPurchaseOrder ( purchaseOrder ) ;
}
@ -137,26 +358,168 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
* 采购订单创建采购入库通知单
* * /
@Override
@Transactional ( rollbackFor = Exception . class )
public int addPurchaseOrderStorage ( WarehouseStorageOrder warehouseStorageOrder ) {
WarehouseStorageOrder warehouseStorageOrder1 = new WarehouseStorageOrder ( ) ;
warehouseStorageOrder1 . setRelatedOrderCode ( warehouseStorageOrder . getRelatedOrderCode ( ) ) ;
List < WarehouseStorageOrder > warehouseStorageOrderList = warehouseStorageOrderMapper . selectWarehouseStorageOrderList ( warehouseStorageOrder1 ) ;
List < WarehouseStorageOrderDetail > list = warehouseStorageOrder . getWarehouseStorageOrderDetailList ( ) ;
String warehouseStorageCode = redisCache . generateBillNo ( "RK" ) ;
if ( CollectionUtils . isEmpty ( warehouseStorageOrderList ) ) {
for ( WarehouseStorageOrderDetail warehouseStorageOrderDetail : list ) {
//查询暂收(采购入库)物料表中是否存在该物料
warehouseStorageOrderDetail . setWarehouseStorageCode ( warehouseStorageCode ) ;
if ( CollectionUtils . isEmpty ( warehouseStorageOrderList ) ) {
//根据物料入库部门划分入库单,入库单类型:0 仓库,1 采购,生成入库单号
List < WarehouseStorageOrderDetail > list1 = list . stream ( ) . filter ( e - > e . getMaterialDeptType ( ) . equals ( "0" ) ) . collect ( Collectors . toList ( ) ) ;
List < WarehouseStorageOrderDetail > list2 = list . stream ( ) . filter ( e - > e . getMaterialDeptType ( ) . equals ( "1" ) ) . collect ( Collectors . toList ( ) ) ;
//WarehouseStorageStatus 仓库入库状态(0待暂收、1已暂收、2待入库、3部分入库、4全部入库),
//WarehouseStorageType 仓库入库类型(0采购入库、1供应商补货、2委内入库、3公司退货、4委外入库、5生产入库),
//setWarehouseOrderType仓库订单类型(0采购订单、1生产订单、2退换货订单、3委外订单),
//WarehouseDeptType 仓库入库部门类型(0仓库,1采购 ),
if ( ! CollectionUtils . isEmpty ( list1 ) ) {
//采购入库单,物料入库列表信息读取,放入生成的入库订单号
String warehouseStorageCode = redisCache . generateBillNo ( "RK" ) ;
for ( WarehouseStorageOrderDetail warehouseStorageOrderDetail : list1 ) {
warehouseStorageOrderDetail . setWarehouseStorageCode ( warehouseStorageCode ) ;
warehouseStorageOrderDetail . setWarehouseStorageType ( "0" ) ;
warehouseStorageOrderDetail . setMaterialDeptType ( "0" ) ;
warehouseStorageOrderDetail . setWarehouseDeptType ( "0" ) ;
storageOrderDetailMapper . insertWarehouseStorageOrderDetail ( warehouseStorageOrderDetail ) ;
}
//入库代表为采购部分的入库单
warehouseStorageOrder . setWarehouseStorageCode ( warehouseStorageCode ) ;
warehouseStorageOrder . setWarehouseStorageType ( "0" ) ;
warehouseStorageOrder . setWarehouseDeptType ( "0" ) ;
warehouseStorageOrder . setWarehouseStorageStatus ( "0" ) ;
warehouseStorageOrderMapper . insertWarehouseStorageOrder ( warehouseStorageOrder ) ;
}
if ( ! CollectionUtils . isEmpty ( list2 ) ) {
String warehouseStorageCode1 = redisCache . generateBillNo ( "RK" ) ;
//仓库入库单
for ( WarehouseStorageOrderDetail warehouseStorageOrderDetail : list2 ) {
warehouseStorageOrderDetail . setWarehouseStorageCode ( warehouseStorageCode1 ) ;
warehouseStorageOrderDetail . setWarehouseStorageType ( "1" ) ;
warehouseStorageOrderDetail . setMaterialDeptType ( "0" ) ;
warehouseStorageOrderDetail . setWarehouseDeptType ( "0" ) ;
storageOrderDetailMapper . insertWarehouseStorageOrderDetail ( warehouseStorageOrderDetail ) ;
}
//入库代表为仓库部分的入库单
warehouseStorageOrder . setWarehouseStorageCode ( warehouseStorageCode1 ) ;
warehouseStorageOrder . setWarehouseStorageStatus ( "0" ) ;
warehouseStorageOrder . setWarehouseStorageType ( "1" ) ;
warehouseStorageOrder . setWarehouseOrderType ( "0" ) ;
warehouseStorageOrder . setWarehouseDeptType ( "1" ) ;
warehouseStorageOrder . setWarehouseStorageOrderDetailList ( list2 ) ;
warehouseStorageOrderMapper . insertWarehouseStorageOrder ( warehouseStorageOrder ) ;
storageOrderDetailMapper . insertWarehouseStorageOrderDetail ( warehouseStorageOrderDetail ) ;
}
}
warehouseStorageOrder . setWarehouseStorageStatus ( "0" ) ;
warehouseStorageOrder . setWarehouseQualityStatus ( "0" ) ;
warehouseStorageOrder . setWarehouseStorageType ( "0" ) ;
warehouseStorageOrder . setWarehouseOrderType ( "0" ) ;
warehouseStorageOrder . setWarehouseStorageCode ( warehouseStorageCode ) ;
return warehouseStorageOrderMapper . insertWarehouseStorageOrder ( warehouseStorageOrder ) ;
return 0 ;
}
@Override
@Transactional ( rollbackFor = Exception . class )
public ProcessInstance submitApply ( PurchaseOrder purchaseOrder ) {
SysUser user = ShiroUtils . getSysUser ( ) ;
purchaseOrder . setApplyUser ( user . getLoginName ( ) ) ;
purchaseOrder . setApplyTime ( DateUtils . getNowDate ( ) ) ;
insertPurchaseOrder ( purchaseOrder ) ;
// 启动流程
String applyTitle = user . getUserName ( ) + "发起了采购订单信息提交审批-" + DateUtils . dateTimeNow ( ) ;
String instanceType = "submit" ;
ProcessInstance processInstance = startProcessInstance ( applyTitle , instanceType , purchaseOrder , user ) ;
String processInstanceId = processInstance . getProcessInstanceId ( ) ;
// 提交实例id
purchaseOrder . setSubmitInstanceId ( processInstanceId ) ;
// 存在提交完就流程结束的情况
boolean processIsFinish = processService . judgeProcessIsFinish ( processInstanceId ) ;
if ( processIsFinish ) {
// 审核状态-审核通过
purchaseOrder . setAuditStatus ( "1" ) ;
// 使用状态-是
purchaseOrder . setUseStatus ( "1" ) ;
}
purchaseOrderMapper . updatePurchaseOrder ( purchaseOrder ) ;
return processInstance ;
}
@Override
@Transactional ( rollbackFor = Exception . class )
public ProcessInstance cancelPurchaseOrderById ( Long id ) {
PurchaseOrderVo purchaseOrderVo = purchaseOrderMapper . selectPurchaseOrderById ( id ) ;
// 审核状态-待审核
purchaseOrderVo . setAuditStatus ( "0" ) ;
SysUser user = ShiroUtils . getSysUser ( ) ;
// 启动流程
String applyTitle = user . getUserName ( ) + "发起了物料信息作废审批-" + DateUtils . dateTimeNow ( ) ;
String instanceType = "cancel" ;
PurchaseOrder purchaseOrder = new PurchaseOrder ( ) ;
BeanUtils . copyProperties ( purchaseOrderVo , purchaseOrder ) ;
ProcessInstance processInstance = startProcessInstance ( applyTitle , instanceType , purchaseOrder , user ) ;
String processInstanceId = processInstance . getProcessInstanceId ( ) ;
// 作废实例id
purchaseOrder . setCancelInstanceId ( processInstanceId ) ;
// 存在提交完就流程结束的情况
boolean processIsFinish = processService . judgeProcessIsFinish ( processInstanceId ) ;
if ( processIsFinish ) {
// 审核状态-审核通过
purchaseOrder . setAuditStatus ( "1" ) ;
// 使用状态-已作废
purchaseOrder . setUseStatus ( "2" ) ;
}
purchaseOrderMapper . updatePurchaseOrder ( purchaseOrder ) ;
return processInstance ;
}
@Override
public ProcessInstance restorePurchaseOrderById ( Long id ) {
PurchaseOrderVo purchaseOrderVo = purchaseOrderMapper . selectPurchaseOrderById ( id ) ;
// 审核状态-待审核
purchaseOrderVo . setAuditStatus ( "0" ) ;
SysUser user = ShiroUtils . getSysUser ( ) ;
// 启动流程
String applyTitle = user . getUserName ( ) + "发起了物料信息恢复审批-" + DateUtils . dateTimeNow ( ) ;
String instanceType = "restore" ;
PurchaseOrder purchaseOrder = new PurchaseOrder ( ) ;
BeanUtils . copyProperties ( purchaseOrderVo , purchaseOrder ) ;
ProcessInstance processInstance = startProcessInstance ( applyTitle , instanceType , purchaseOrder , user ) ;
String processInstanceId = processInstance . getProcessInstanceId ( ) ;
// 恢复实例id
purchaseOrder . setRestoreInstanceId ( processInstanceId ) ;
// 存在提交完就流程结束的情况
boolean processIsFinish = processService . judgeProcessIsFinish ( processInstanceId ) ;
if ( processIsFinish ) {
// 审核状态-审核通过
purchaseOrder . setAuditStatus ( "1" ) ;
// 使用状态-是
purchaseOrder . setUseStatus ( "1" ) ;
}
purchaseOrderMapper . updatePurchaseOrder ( purchaseOrder ) ;
return processInstance ;
}
private ProcessInstance startProcessInstance ( String applyTitle , String instanceType , PurchaseOrder purchaseOrder , SysUser user ) {
Long materialId = purchaseOrder . getPurchaseOrderId ( ) ;
String businessKey = materialId . toString ( ) ; // 实体类 ID,作为流程的业务 key
String key = "material" ;
Map < String , Object > variables = new HashMap < > ( ) ;
// 构造authority传参
buildAuthority ( user , variables ) ;
purchaseOrder . setApplyTitle ( applyTitle ) ;
// 启动流程
ProcessInstance processInstance = processService . submitApply ( user . getLoginName ( ) , businessKey ,
applyTitle , purchaseOrder . getPurchaseOrderCode ( ) , key , variables ) ;
String processInstanceId = processInstance . getId ( ) ;
purchaseOrder . setInstanceId ( processInstanceId ) ; // 建立双向关系
purchaseOrder . setInstanceType ( instanceType ) ;
return processInstance ;
}
private void buildAuthority ( SysUser user , Map < String , Object > variables ) {
Set < String > roleKeys = roleService . selectRoleKeys ( user . getUserId ( ) ) ;
// 角色不同审核人不同
if ( roleKeys . contains ( "fzjlRole" ) | | roleKeys . contains ( "admin" ) ) {
variables . put ( "authority" , 4 ) ;
} else if ( roleKeys . contains ( "cgzgRole" ) ) {
variables . put ( "authority" , 3 ) ;
} else if ( roleKeys . contains ( "cgjlRole" ) ) {
variables . put ( "authority" , 2 ) ;
} else if ( roleKeys . contains ( "cgyRole" ) ) {
variables . put ( "authority" , 1 ) ;
}
}
}