`

导入线下excell业务数据按权重匹配线上数据

    博客分类:
  • RUBY
 
阅读更多
业务场景:(系统间还没有接口对调,订单号暂时需要线下处理)
线上订单需要线下第三方票据核对之后才能抽取明细对账开票。
根据第三方提供的票据匹配上双方系统的订单号。

class Report::Importcsv

    # 上传csv文件load数据到数据库临时表
	def self.import_csv(file_root,table_name='mapping_datas')
	   # xlsx 保存为csv
	   # 上传到路径:/var/lib/mysql-files/
	   new_table_name = "cope_#{table_name}_#{Time.now.to_i}"
       create_table_sql = cope_table_sql(new_table_name,table_name)
	   			
	  # 创建表数据	
	  ActiveRecord::Base.connection.execute(create_table_sql)	

	  # load 写入csv数据
      @sql = %Q(LOAD DATA INFILE '#{file_root}' INTO TABLE #{table_name} FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;)				
	  ActiveRecord::Base.connection.execute(@sql)
	end

	def self.cope_table_sql(new_table_name,table_name)
       "create table #{new_table_name}
        select * from #{table_name} where 1=2;"
	end


	################################################
	## 比对mapping
	################################################

	require 'matrix'

    def self.mapping_data_test
      # 等待匹配的数据库订单数据
      sql  = "select * from mapping_datas"
      base_a = ActiveRecord::Base.connection.execute(sql)
      compale_a = base_a.map{|_|  _[1..-1].map{|a| b = (a ? a.to_f : 'null') ; b } } 
      aaa = Matrix.columns(compale_a).to_a

      # 假设excell导入的临时表数据
      excell_sql  = "select * from cope_mapping_datas_11232131"
      base_b = ActiveRecord::Base.connection.execute(excell_sql)
      compale_b = base_b.map{|_|  _[1..-1].map{|a| b = (a ? a.to_f : 'null') ; b } } 
      bbb = Matrix.columns(compale_b).to_a

      # 完全一致的
      #ccc = compale_a & compale_b

      ddd = []
      compale_a.each_with_index do |a,i|
        eee = []
        aaa.each_with_index do |_,j|
          bbb[j].each_with_index do |b,k|	
	          if a[j] == b
	            eee << k 
	          end
          end
        end
        re = eee.flatten

        # 获取最大匹配指标的值
        h = Hash.new(0)
        re.each { | v | h.store(v, h[v]+1) }

        v = h.values.max
        ind = h.values.index(v)
        ddd << [{index:i,  mapping:h.keys[ind.to_i], size:v}]
      end

      return ddd

    end

end



:index => 原数据库id,
:mapping => excell入库id,
:size => 匹配指标(users.mobile, od.art_no, od.cas, od.package_count)命中个数

[
 [{:index=>70, :mapping=>69, :size=>4}],
 [{:index=>71, :mapping=>70, :size=>4}],
 [{:index=>72, :mapping=>71, :size=>4}],
 [{:index=>73, :mapping=>72, :size=>4}],
 [{:index=>74, :mapping=>73, :size=>4}],
 [{:index=>75, :mapping=>74, :size=>4}],
 [{:index=>76, :mapping=>75, :size=>4}],
 [{:index=>77, :mapping=>76, :size=>4}],
 [{:index=>78, :mapping=>0, :size=>2}],
 [{:index=>79, :mapping=>69, :size=>3}],
 [{:index=>80, :mapping=>0, :size=>2}],
 [{:index=>81, :mapping=>24, :size=>2}],
 [{:index=>82, :mapping=>69, :size=>3}],
 [{:index=>83, :mapping=>75, :size=>2}],
 [{:index=>84, :mapping=>75, :size=>2}],
 [{:index=>85, :mapping=>68, :size=>2}],
 [{:index=>86, :mapping=>0, :size=>2}],
 [{:index=>87, :mapping=>42, :size=>3}]
]


全部指标命中的,默认为相等,部分指标命中的为待筛查数据
0
0
分享到:
评论

相关推荐

    导入excell数据的插件

    标题中的“导入Excel数据的插件”指的是一个专门用于帮助用户将Excel电子表格数据导入到其他应用程序或系统中的工具。这种插件通常扩展了软件的功能,使得数据处理更加便捷,尤其适用于需要频繁处理大量结构化数据的...

    Delphi中从Excel导入数据的通用方法

    在Delphi编程环境中,从Excel导入数据是一项常见的需求,尤其在数据分析、报表处理或数据库集成等场景下。本文将详细探讨如何实现这个功能,并提供一个通用的方法。 首先,要完成这个任务,我们需要一个能与Excel...

    [C#.初学者]从excel中导入数据,显示在textbox控件中

    在C#编程环境中,开发Windows Forms应用程序时,我们经常需要处理用户从Excel文件中导入数据的需求。本教程将详细介绍如何实现“从Excel中导入数据并显示在TextBox控件中”的功能,主要涉及以下知识点: 1. **文件...

    jeecg导入Excel

    在导入数据前,Jeecg会进行数据验证,检查数据的合法性,如非空校验、数据类型校验、唯一性校验等,确保导入的数据符合业务规则。 5. **异常处理**: 在导入过程中,如果遇到错误,Jeecg会捕获异常,并生成详细的...

    西门子WINCC与EXCELL数据处理策略

    西门子WINCC与EXCELL的数据处理策略主要涉及如何在两个系统之间进行数据交互和处理。WINCC(SIMATIC HMI WinCC)是西门子的一款人机界面(HMI)软件,主要用于监控自动化系统的数据,而EXCELL则是微软的电子表格应用...

    C#Excell导入源代码

    这个“C#Excell导入源代码”提供了一个很好的实例,可以帮助开发者了解并掌握这一技术。 首先,我们需要知道的是.NET Framework或.NET Core提供了对Office组件的支持,其中Microsoft.Office.Interop.Excel库(通常...

    Excell教程数据分析实用技巧PPT课件.pptx

    Excell教程数据分析实用技巧PPT课件.pptx

    Excell导入Mongo工具类.rar

    标题中的"Excell导入Mongo工具类.rar"表明这是一个与Java编程相关的项目,它提供了一个工具类用于将Excel数据导入MongoDB数据库。MongoDB是一个流行的NoSQL数据库,它以JSON格式的文档存储数据,而非传统的表格结构...

    Excell教程数据分析实用技巧PPT学习教案.pptx

    此外,用户还可以通过勾选“每组数据分页”的选项,以便于生成报表时按页显示分类汇总结果。 **合并计算技巧**在需要将不同区域或表格的数据整合到一起进行汇总分析时显得尤为重要。例如,多个部门的销售数据可以...

    excell导入导出

    在开发过程中,有时我们需要在VC++环境中实现与Excel的数据交互,即导入和导出数据。本篇文章将详细探讨如何在VC++中实现Excel的导入与导出功能。 首先,要实现这个功能,你需要了解Microsoft Office的自动化接口,...

    从DATAGRID中导出数据到EXCELL国外代码

    标题"从DATAGRID中导出数据到EXCELL国外代码"表明我们要讨论的是如何将`DATAGRID`中的数据转换并保存到`EXCEL`文件中。这个过程在许多业务场景下都是必要的,比如报表生成、数据分析和数据备份。下面我们将深入探讨...

    vs2015+QT5操作Excel表格实现导入导出

    在本文中,我们将深入探讨如何使用Visual Studio 2015 (VS2015) 配合QT5库来操作Excel表格,实现数据的导入导出,以及增删功能。同时,我们还会关注如何利用QSS(Qt样式表)进行用户界面的美化。 首先,QT5是一个跨...

    Excel数据导入SQLServerl数据库

    将Excel数据相对应的导入数据库指定数据表内、或者新建表中,省去繁琐的SQL语句操作! 也可在线下载备份数据库数据

    C#读取EXCELL源码

    在C#编程环境中,Microsoft Office Interop 库为我们提供了一个接口来操作Excel文件,这使得开发者能够方便地读取、写入...在实际开发中,可以根据需求进行更复杂的功能定制,例如数据导入导出、图表生成、宏执行等。

    phpexcell实现excel导入

    在IT行业中,数据处理是一项至关重要的任务,尤其是在大数据时代,数据的导入导出能力成为了衡量一个系统灵活性的重要标准。PHP是一种广泛使用的服务器端脚本语言,尤其在Web开发领域,它有着丰富的库和工具来处理...

    将simulink示波器数据导出到excel表格教程

    在MATLAB Simulink环境中,将示波器数据导出到Excel表格是一项常见的需求,这有助于数据的存储、分析和进一步处理。以下是一份详细的步骤教程: 首先,我们需要准备一个Simulink模型,在模型中添加必要的组件。核心...

    VBA由图表获取数据源

    在探讨“VBA由图表获取数据源”这一主题时,我们深入分析VBA(Visual Basic for Applications)在Microsoft Office应用程序中的强大功能,特别是在Excel中如何利用VBA代码从图表中提取数据源信息。这一能力对于自动...

    c# datagridview和excel数据的相互导入方法

    C#中DataGridView和Excel数据的相互导入方法 C#中DataGridView控件和Excel表格是两个常用的数据存储和展示工具。它们之间的数据交换是非常重要的。本文将介绍C#中DataGridView和Excel数据的相互导入方法。 ...

    使用EXCEL记录串口数据

    在电子工程和嵌入式系统开发中,常常需要与计算机进行数据交互,其中串行通信是一种常见的接口方式。本文将详细讲解如何使用EXCEL来记录串口数据,并结合单片机AVR通过UART(通用异步收发传输器)发送的数据进行实际...

    在EXCELL表格里添加数据标签

    在Excel表格中添加数据标签是一项重要的数据可视化技巧,它能够帮助读者快速地了解图表中的具体数值,无需依赖坐标轴上的刻度。以下是如何在Excel中为图表添加数据标签的详细步骤,以及一些相关的最佳实践。 首先,...

Global site tag (gtag.js) - Google Analytics