看了“XXX地方税务局社会保险费报表采集系统”,仅仅是一些简单功能,并不是站在用户的角度去考虑问题;也许是项目发包方本身不是用户的原因造成。一个核心功能尽然没有:名单核对!不经感慨:有技术实力的接不到单子,这是一个值得思考的问题。
如果换成我来架构:我只要用户输入一个“在职员工”的Excel文件,即可自动完成核对、申报功能!
(现在的做法是开发一个桌面程序客户端,让用户输入,再通过Web服务申报)
以上是一些背景话和啰嗦,下述当然是“在现有的情况下努力去做”如何做的概述(思路),应该有一些参考价值。
第一步: 新建一个Access数据库(公司只有近万人)
第二步:从As400数据库导出“在职人员名单”,包括姓名、身份证;并存入Access数据库
第三步:找到“XXX地方税务局社会保险费报表采集系统”的Access数据库,将其中的表“STAFF_INFO”中的姓名、身份证导入到相同的数据库中
第四步:将上述有关的身份证全部转换为15位(15位和18位混存时代)
难就难在两个表的身份证都有可能不是正确的(事实也是如此)--题外:为何当初(15位)的身份证没有校证码?现在有了,不知大家有没有在用户输入有关身份证的地方进行验证(应该可能将输错降到最低)。
第五步:使用“身份证”字段,通过Left Join和Right Join分别得到“未投保名单”和“已离职的投保名单”(使用Is Null进行判断)--因为存在身份证出错的问题,所以,得到的两份名单可靠度较低(同一个人同时存在于两张名单中)
第六步:将上述两个名单生成临时表(临时表能有效提高使用Join 和 Left、Right及字段包括函数的查询效率)
第七步:使用“姓名”字段,再次对两个名单进行Left Join和Right Join;得到“待投保名单”和“待除名名单”及“身份证不一致名单”。
此时名单的准确率已经很高,但还是有可能出错,即若存在同名,且公司和社保的身份证不一致时,就会同时出现在两份名单中
后记:
平时,可能很多人会假设“姓名”和“身份证”是完全正确的,未考虑这种假设不成立时如何处理。所以,架构时要特别注意作了哪些假设、什么条件下成立和不成立如何处理等等。