行政机构处理

省、市、县、乡/镇、村、组,以及这些地区的医疗机构,行政单位,都存储在base_org表中。

省、市、县、乡/镇、村、组,属于行政区划。

政府部门:行政单位。

行政区划、行政单位、医疗机构,在base_org表中,根据字段org_type区分。

base_org表的字段:

字段 字段含义 使用说明
org_id id,主键  
org_code 编码  
org_name 名称  
org_type 机构类型,1.行政区划,2.行政机构,3.医疗机构  
parent_id 父级id 根据这个字段,可以查到所属上级行政区划。
org_seq 从省级顶级开始,到此条记录,所有的org_id按顺序的排列,以"."分隔。比如:0.1.12.123.1234. 根据这个字段,可以一次查到所有上级行政区划。也可以通过这个字段,查到所有下级,下下级……行政区划。只要以此org_seq开头即可。
fp_code 当前机构所属的省级行政区划的code

相比一级一级的查,下面这几个字段,可以更快的定位所属的省市县。比如,此条记录是村里的组,那如果要查组所属的省或市,就要一层一层往上推,使用SQL也会比较麻烦,不能一下子查出来。

但如果在维护的过程中,存储了这几个字段,在查询和统计时,就可以快速查到了。

fp_name 当前机构所属的省级行政区划的name 同上
fc_code 当前机构所属的市级行政区划的code 同上
fc_name 当前机构所属的市级行政区划的name 同上
fr_code 当前机构所属的县级行政区划的code 同上
fr_name 当前机构所属的县级行政区划的code

同上。如果没有存储这几个字段,那要查一个省下每个市的统计数据,就要先根据省的orgid,查到下级所有市的orgseq。然后逐个统计每个市里所有的级别的数据。那么逐个统计就会比较慢。最快的SQL查询方法是分组group by一次查出所有的市统计数据。因为orgseq下级又会有很多子级,那么,要使用group by,就只能对substring(orgseq,N)的结果进行group by了。虽然显得不那么简洁,但是也比逐个统计市级效率和速度要快。

 

补充:在实际的开发中,由于用group by substring(orgseq,N)的语法略微复杂,有些开发人员对语法不熟悉,会不想用这种方式。所以,在实际的开发中,我们采用的是用Java代码来处理这个过程。具体方式如下:

要做的功能:查某个县级下所有乡镇的统计数据,并展示出每个县的统计值。

做法:步骤1.通过seq like '县的seq%' 查出某个县下所有的数据的list。

        步骤2.查出县下所有的乡镇对象组成的list。

     步骤3.循环第2步乡镇的list,

      for(乡镇i : 乡镇的list){

        new map存储这个乡镇的统计数据

        new 乡镇的num;

        for(数据j : 第一步的数据list){

          if ( 数据j.seq contains(乡镇i.seq) ){

            则,乡镇的num累加。

            把乡镇的num存入map中。

          }

        }

      }

posted @ 2021-05-11 21:40  夏天的尾巴%  阅读(70)  评论(0编辑  收藏  举报