现在加了一些新的功能,获取列表这个地方又不得不再动了。
首先是加入自定义对象,而且对象有可能是科室,组或操作员
传来的字符窜我要先解析成成一个名单,然后再跟当前的列表比较
比如:字符串为‘departcode:0021|opercode:0039|group:0001’
我要解析成
0, 0021
2,0039
1,0001
然后在比较的时候的判断
如果是科室和操作员,我可以直接跟当前的USERLIST比较,但如果是GROUP的话,我就要查询数据库,获取出这个group的操作员列表,然后再跟当前USERLIST比较,当然,直接发送也没关系,不过在优化角度上不好。
然后再想一下这个自定义列表的实现流程:
首先是客户端先把这些信息用这个函数传给我,
function SendTextEx(MsgText,DestStr:Pansichar;Interval:integer;
ViewMode:integer=0;ValidDate:integer=72):bool;
我把这些消息写入TMSG结构体中,然后添加到列表,但是这个消息是没有processcode(流程编号)的,为了跟其他的消息区分开,我可以写一个统一的值。然后就要保存在数据库,并添加到消息列表了,这里就存在一个查看模式的问题,就是VIEWMODE,如果为0,表示查看即消除,如果为1,则必须对象列表中的每个人看了才不再提醒,这就需要把哪些看了记录下来,有两种方法:
一个是一上来保存的时候就把这个消息的对象列表保存在数据库里,这里存在一个解析的问题,如果是自定义列表,我是该在前台解析还是后台呢,如果是前台,保存到数据库的时候有点麻烦,如果是数据库中解析,那么我将消息保存其中的时候,列表也保存了下来,然后在分发的时候,我只需要在数据库中获取操作员代码列表,然后直接跟前台比较就可以了,倒是简单了一些。
一个是上来后不保存列表,只是哪个操作员处理了,会在数据库中记录一下,然后我获取列表后会跟数据库中的列表比较一下,提取出还没发送的列表,然后进行分发,这个难度差不多,而且前面获取列表的部分,两种模式是一样的。只是后面VIEWMODE为1时,会跟数据库比较一下。
这两种方法都可行,,数据库中可以用临时表,DELPHI中我要建一个结构体数组,其实差不多,获取列表的时候,第一种只要跟数据库比较就OK了,第二种,则需要先获取列表,再跟数据库进行比较,其实从性能上来,第一种更好一点,但第一种的问题在于,数据库中保存的数据可能较多,但两者都要将全部的消息写入,所以也不存在了。这里还有一个问题,还要考虑VIEWMODE为0的情况,这种情况下如果果都在数据局获取列表,性能上不是最好的,所以最好还是从当前列表中获取。
然后就是保存到临时列表的问题,VIEWMODE为0,肯定是保存在列表中的,那么为1的情况呢?如果保存在列表里,也是可行的,做一个判断,然后在获取列表时才读取数据库
OK,就采用第一种,然后消息同样保存在消息列表中,获取列表时,对VIEWMODE为1的,尽量跟当前列表进行比较。
一边写一边理清思路,写出来的东西也比较乱,有点自问自答的样子, 大家看了一笑置之则可