`

导入线下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...

    jeecg导入Excel

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

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

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

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

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

    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导入导出

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

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

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

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

    Excel教程中的数据分析实用技巧是提高工作效率和数据管理能力的关键。以下是一些重要的Excel数据分析方法: 1. **数据排序技巧**: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