Excel 校验发动机项目设计分享

Excel 校验引擎项目设计分享Excel 校验引擎项目设计分享需求:校验EXCEL文件中每一列,每一个单元格的内容,

Excel 校验引擎项目设计分享
Excel 校验引擎项目设计分享
需求:
     校验EXCEL文件中每一列,每一个单元格的内容,输出校验报告。
     校验规则实现可配置的形式。
     支持代码的扩展,比如增加校验规则,增加校验结果的处理方式,只需要实现相应的接口,并修改配置文件的内容即可。

设计方案:
     规则的配置以XML配置。

配置文件分为两部分:
第一部分是 校验器 validator的配置,定义validator的名称和class路径。扩展增加的校验器只需要在配置文件里面定义。程序会自动调用该校验器进行校验。
第二部分是每一个列对应的配置。
<item name="END_AREA" alias="目的站">
        <rule type="required" level=”WARN”/>
        <rule type="address"/>
        <rule type=”String”>
               <property name=”minLength”>1</property>
               <property name=”maxLength”>5</property>
        </rule>
          <rule type="repeat">
             <property name="unite">true</property>
        </rule>
</item>
每一个列上可以对应多个规则 rule, type的值为第一部分定义的校验器的别名。Item里面的每个rule都实现自己单独的校验方式。不依赖,不干扰。每个校验器都可以定义校验级别level,校验级别涉及到后面对校验结果更灵活的处理。  每个validator也可以有自己私有的属性 property。比如需要校验某一列的值是字符串,并且长度大于 1 小于 5.则新建一个实现了 Ivalidator接口的类。定义该类的私有属性为

实现接口的方法为校验的逻辑操作

。最大长度,最小长度的值在配置文件里面配置
<rule type=”String”>
               <property name=”minLength”>1</property>
               <property name=”maxLength”>5</property>
</rule>。
一般情况下,校验器是针对每个列的。也就是校验器只对某列的内容进行校验。特殊情况下,我们需要对 多个列之间的内容进行联合校验。比如校验 假入有两列内容重复话,校验结果就判定这两行内容是重复的。可以在配置文件中进行如下配置。
<item name="FROM_AREA" alias="始发站" description="">
        <rule type="repeat">
             <property name="unite">true</property>
        </rule>
    </item>
<item name="END_AREA" alias="目的站">
          <rule type="repeat">
             <property name="unite">true</property>
        </rule>
    </item>
<!-- 重复性校验 -->
       <bean id="repeat"  alias="始发站" description="">
        <rule type="required"/>
        <rule type="address"/>
        <rule type="repeat">
             <property name="unite">true</property>
        </rule>
    </item>
    <item name="END_AREA" alias="目的站">
        <rule type="required"/>
        <rule type="address"/>
          <rule type="repeat">
             <property name="unite">true</property>
        </rule>
    </item>
    <item name="VOLUME_RATE" alias="轻货费率">
        <rule type="required"/>
    <rule type="integer">
        <property name="scale">+</property>
    </rule>
    </item>
    <item name="WEIGHT_RATE" alias="重货费率">
        <rule type="required"/>
        <rule type="float">
            <property name="scale">+</property>
            <property name="precision">2</property>
        </rule>
    </item>
    <item name="PER_LOWEST_PRICE" alias="最低一票">
        <rule type="required"/>
    <rule type="integer">
        <property name="scale">+</property>
    </rule>
    </item>
    <item name="TRANSPORT_TIME" alias="运行时效">
        <rule type="required"/>
    </item>
    <item name="TRANSPORT_TYPE_CODE" alias="运输方式">
         <rule type="required"/>
         <rule type="transportType"/>
        <rule type="repeat">
        <property name="unite">true</property>
        </rule>
    </item>
    <item name="PRICE_PATTERN" alias="运价模式">
        <rule type="valueBoundValidator" level="error">
             <property name="bound">D2S|D2D|S2D|S2S</property>
        </rule>
        <rule type="repeat">
        <property name="unite">true</property>
        </rule>
    </item>
    <item name="COMPANY_CODE" alias="物流公司编号">
        <rule type="required"/>
        <rule type="company"/>
        <rule type="repeat">
        <property name="unite">true</property>
        </rule>
    </item>
    </items>
</data-validate-config>