跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 开发了一个二代身份证的验证系统,和大家交流一下

开发了一个二代身份证的验证系统,和大家交流一下

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
6 帖子 4 发布者 4.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • G 离线
    G 离线
    ghosthand
    写于 最后由 编辑
    #1

    开发这么一个系统可能会和大家常用的功能会有点差别,因为这个系统会设计到硬件的接入。还好厂商提供了ActiveX控件给我们使用,但是ActiveX使用是有局限性的,他只能在IE中运行,不过CHOME浏览器还有火狐浏览器可以通过安装ActiveX的支持插件来支持。
    这套系统的重点在于js和xml以及python之间的通讯,下面和大家分享一下:(第一次发布OE的技术贴,不好的地方大家请多多指教)

    首先利用了xml文件建立一个菜单项,并创建该菜单项的动作

    &lt;record model=&quot;ir.actions.client&quot; id=&quot;action_detection&quot;&gt;<br />			&lt;field name=&quot;name&quot;&gt;认证系统&lt;/field&gt;<br />		&nbsp; &nbsp; &lt;field name=&quot;tag&quot;&gt;detection.action&lt;/field&gt;<br />		&lt;/record&gt;
    



    这时候会调用js文件中对应的事件:

    openerp.kerry_visitor = function(session){<br />	var detection = session.detection = {};<br />	KerryObj=new session.web.Model(&#039;kerry.visitor&#039;);<br />&nbsp; &nbsp; session.web.client_actions.add(&#039;detection.action&#039;,&#039;session.detection.action&#039;);<br />&nbsp; &nbsp; detection.action = session.web.Widget.extend({<br />&nbsp; &nbsp; 	//使用的XML模板<br />&nbsp; &nbsp; 	template:&quot;detection.action&quot;,<br />&nbsp; &nbsp; 	//每次载入时的处理<br />&nbsp; &nbsp; 	start: function () {<br />		},<br />&nbsp; &nbsp; });<br />};
    


    在这里创建了一个web.client的对象,并指定了一个XML的模板文件“template:"detection.action"”,在这个模板文件中添加了身份证读卡器的activex

    <br />&lt;OBJECT id=&quot;CVR_IDCard&quot; classid=&quot;clsid:10946843-7507-44FE-ACE8-2B3483D179B7&quot;<br />	codebase=&quot;IDCardReader.cab&quot; name=&quot;CVR_IDCard&quot; width=&quot;0&quot; height=&quot;0&quot; &gt;<br />&nbsp; &nbsp; &lt;/OBJECT&gt;<br />
    


    这时候就可以在js中创建这个activex的对象了

    <br />CVR_IDCard&nbsp; = document.getElementById(&quot;CVR_IDCard&quot;);<br />
    


    创建完对象后就可以使用这个对象的方法了,也就是身份证读卡器的方法。
    例如:

    var strReadResult = CVR_IDCard.ReadCard();
    

    执行一次读卡操作

    既然可以获取到身份证的数据了,我们如何和数据库进行通讯呢?这时候有两种方式可以选择,一种是在JS中通过ODBC操作postgresql,不过这种方式比较麻烦,而且容易出错,所以最终放弃了。第二种是通过JS与PYTHON的通讯,将数据传入python并通过python与postgresql进行操作,这时候我们可以使用很多OE自带的方法去操作数据库,比较方便可靠。下面介绍一下JS与python通讯的方式:

    KerryObj.call(&#039;writeRecords&#039;,[,&quot;_StrandedPersonnel&quot;,message]).then(function(result){<br />			});
    


    KerryObj:是一个功能模块的实例,通过如下语句创建的:

    KerryObj=new session.web.Model(&#039;kerry.visitor&#039;);
    

    大家可以看到里面有一个类名“'kerry.visitor”,其实就是调用该类下的一个方法,方法名为“writeRecords”,_StrandedPersonnel是我自定义的一个控制ID,message是一个数组,里面存放了一些字符串数据。好了 现在来看一下kerry.visitor'类下的writeRecords方法的头部:

    def writeRecords(self,cr,uid,_ids,ctrl,info,context=None):
    


    ctrl对应了JS传过来的_StrandedPersonnel,是一个控制码
    而info对应了js传过来的message

    elif ctrl == &#039;_StrandedPersonnel&#039;:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_name = info[0]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_sex = info[1]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_class = info[2]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_birthday = info[3]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_address = info[4]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_cardid = info[5]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_img = info[6]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _computer_name = info[7]<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _pos = &#039;&#039;
    


    在这里把info的数据分别传给了一些变量进行操作。
    到这里其实已经完成这个系统整个的通讯了,剩余部分就是判断认证,以及数据库的操作了,还有从python返回给js的数值了,返回的值会通过js中的

    function(result)
    

    语句获取到。

    应JEFF老师的要求第一次发帖子,和大家交流一下,如果发现问题,希望大家提出宝贵的意见。

    1 条回复 最后回复
    0
    • O 离线
      O 离线
      oE菜鸟是我哦
      写于 最后由 编辑
      #2

      ;D谢谢分享

      1 条回复 最后回复
      0
      • W 离线
        W 离线
        winson97
        写于 最后由 编辑
        #3

        技术性很强的贴子,我现在用的比较简单:身份证读卡器自带程序可以设置快捷键:例F2 姓名  F3 身份证号……,操作时打开读卡器程序,身份证往读卡器一放,程序显示身份证信息,这时回到OE,在录入姓名的地方按F2……,几个快捷键录入完毕。

        1 条回复 最后回复
        0
        • wjfonhandW 离线
          wjfonhandW 离线
          wjfonhand
          写于 最后由 编辑
          #4

          很棒的技术分享!

          GoodERP -- Odoo China fork

          1 条回复 最后回复
          0
          • G 离线
            G 离线
            ghosthand
            写于 最后由 编辑
            #5

            [quote author=winson97 link=topic=14626.msg25310#msg25310 date=1384561000]
            技术性很强的贴子,我现在用的比较简单:身份证读卡器自带程序可以设置快捷键:例F2 姓名  F3 身份证号……,操作时打开读卡器程序,身份证往读卡器一放,程序显示身份证信息,这时回到OE,在录入姓名的地方按F2……,几个快捷键录入完毕。
            [/quote]
            如果自己用ActiveX去开发的话,完全可以达到全自动的,无需按任何按键,我们的保安每天只要坐着,然后有人进出的话让访客自己刷一下卡就可以自动录入啦。

            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 标签
            • 热门
            • 用户
            • 群组