关于基于流程的待办事项的实现

本文介绍了如何实现基于流程的待办事项系统,包括流程、步骤和流动主体的概念,以及解决流程复杂度和并发问题的方法。通过设置标志列表和流动主体属性,实现了待办事项的自动添加和取消。操作方法包括读取代办事项和步骤流转的SQL操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于基于流程的待办事项的实现

名词定义

流程:工作流,一项工作的结束决定另一项工作的开始

步骤:流程中的每一步,每个工作

流动主体:步骤中,工作的对象

例如:员工创建一份申请提交给经理,经理批示后下达给员工。这个过程就是一个流程。它包括:创建申请、提交、批示、下达四个步骤,流动主体是申请。

 

 

问题描述

这里说的待办事项是记录在一个流程中每个操作人员需要做的事项。

因此,它是基于流程的。要求在流程走到一个步骤时,操作该步骤的人员的待办事项中自动添加一项待办事项,当走到下一步时,该项待办事项自动取消。

待办事项的问题复杂度主要取决于流程的复杂度。

影响流程的复杂度的因素有:

1、是否有并发流程。

2、流动的主体是否发生变化。

 

我们现在的流程中,有一个并发流程;流动主体有4个:工程、项目、设计单、预算补充申请单。

解决方案

给每个步骤设置一个标志(point)。创建标志列表tbl_pending_notice

给流动主体添加三个属性:当前用户(cur_uid),当前标志(cur_point),流动时间(pass_date)。

 

设置格式:

标志(point):([流程号]/[步骤号]),如起始步骤(0/1) -> (0/2) 有并发流程后编为(1/1)(2/1)

当前用户(cur_uid)([用户编号]),用户编号可以是单个用户的编号如:(34),也可以是多个用户编号的组合如:((12),(34),(56))三个并发流程,每个流程当前步骤的用户编号分别为123456

当前标志(cur_point):(([用户编号])@([标志位]))。如单流程((34)@(0/4)),三并发流程((12)@(1/1),(34)@(2/1),(56)@(3/1))

流动时间(pass_date):时间型数据。

 

操作方法

读取代办事项

设:读取用户编号34的用户(以下简称用户34)在工程上的待办事项

1、在工程表中,查找cur_uid中有没有(34),有则表示用户34在该工程中有待办事项;

2、检查在cur_point中有没有(34)@,如果没有,则数据结构损坏

3、在cur_point中,截取从(34)@后一位开始到末尾的字串;

4、在截取的字串中,截取从头开始到第一个“)”的字串,即步骤标志位

从而得到用户34在工程表中,当前的待办事项。

SQL

Declare @myid varchar(50)

SET @myid = '(34)'

 

select my_point,pass_date

,replace(n.message,'<Project name/>',a.project_name_vchr)as cur_message

from (

select substring(my_point,1,charindex(')',my_point)) as my_point

,pass_date,project_name_vchr

from (

select pass_date,project_name_vchr,cur_point,substring(cur_point,charindex(''+ @myid +'@',cur_point)+len(''+ @myid +'@'),len(cur_point)) as my_point

from tbl_project_info

where cur_uid like '%'+ @myid +'%' and charindex(''+ @myid +'@',cur_point)>0

)as a

) as a

left outer join tbl_pending_notice n on a.my_point =n.point

 

步骤流转

1、在cur_uid中,将我的用户编码替换为下一任的用户编码;

2、在cur_point中,将我的标志位替换为下一任的标志位

例:当前用户34在步骤(0/4),完成后传给用户25,步骤(0/5)

SQL

Declare @ProjectId bigint

Declare @MyId varchar(50)

Declare @NextId varchar(50)

Declare @MyPoint varchar(50)

Declare @NextPoint varchar(50)

Set @ProjectId=0

Set @MyId='(34) '

Set @NextId= '(25)'

Set @MyPoint='(34)@(0/4)'

Set @NextPoint ='(25)@(0/5)'

 

Update tbl_project_info set pass_date=getdate()

,cur_uid=replace(cur_uid,@MyId,@NextId)

,cur_point=replace(cur_point,@MyPoint,@NextPoint)

Where id=@ProjectId

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值