首先看下表之间的关系:
具体图例:
![]()
发布逻辑:
- 可以针对某个角色单独发布
- 可以针对某个用户单独发布
- 在角色和用户都勾选的情况下,取两者条件的交集,即既满足勾选的角色,又满足勾选的用户。例如:发布勾选的用户为:a(学生),b(老师),c(班委,学生 ) 发布角色为:学生,则最终可以收到发布信息的为a,c
现在的问题是:
- 不管使用哪种发布条件,仅可以发布到当前用户下级的角色中。例如:计科1608班A发布表单针对所有角色为学生的用户,仅在计科1608班下级的所有角色可以接收到消息,若计算机学院下的xx 发布表单,则可以发布到计算机学院,计科1608,计科1607下的所有用户,不可发布到外国语学院中
- 若当前用户是该单位的创建者,则默认可以发布到该单位下所有用户
发布信息存储在数据库中为:
roleRange 为针对角色发布字段,userRange为针对某个用户发布字段,两者都可以为空单不能同时为空。
第一条:发布给所有角色为学生的用户
第二条:发布给用户名为xxxxx,xxxxxx,xxxxx且角色为学生或者校长
现在一个用户进入系统,角色去查有没有发布给自己的信息
先说下大概逻辑:
- 首先查找所有表单在开始时间小于现在时间,结束时间大于现在时间(不在此范围即填写日期过期)的roleRange,userRange,publishId
- 将查到的所有表单roleRange,userRange,publishId作为条件去查找最终针对当前用户发布的表单
- 其中又分为根据roleRange查一部分符合条件的信息,根据userRange查一部分符合条件的信息,然后根据不同情况对信息进行筛选融合
- publishId即为发布人,它的作用为根据发布人查询发布人所属的单位小组,在第三步中发布人的小组作为筛选条件之一(因为只能发布给当前小组下的成员)
具体实现代码:
#region 需要填写表单的数量,和数据 打死不要改!!!! //当type=1时获取数量 type=2时获取数据 [HttpPost] public dynamic NeedWriteForm(dynamic obj) { string formName = obj.name;//前台传来的表单名 用于查询 string username = HttpContext.Current.Session["username"].ToString(); long[] allowTaskId = new long[1000]; //假设一个人最多1000条待填信息,存放所有运行的表单id string sortName = obj.sortName; string sortType = obj.sortType; if (sortName == &#