laravel+phpoffice+easyexcel实现导入
资源包下载地址
https://download.csdn.net/download/QiZong__BK/89503486
easy-excel下载:
"dcat/easy-excel": "^1.0",
命令行:
composer require dcat/easy-excel
前端代码
<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><!-- jQuery文件。务必在bootstrap.min.js 之前引入 --><script src="https://cdn.staticfile.net/jquery/3.2.1/jquery.min.js"></script><!-- 新 Bootstrap4 核心 CSS 文件 --><link rel="stylesheet" href="https://cdn.staticfile.net/twitter-bootstrap/4.3.1/css/bootstrap.min.css"><!-- bootstrap.bundle.min.js 用于弹窗、提示、下拉菜单,包含了 popper.min.js --><script src="https://cdn.staticfile.net/popper.js/1.15.0/umd/popper.min.js"></script><!-- 最新的 Bootstrap4 核心 JavaScript 文件 --><script src="https://cdn.staticfile.net/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script></head>
<body><form action="excel_import" method="post" enctype="multipart/form-data">@csrf<div class="form-group"><label for="exampleFormControlFile1">Example file input</label><input type="file" class="form-control-file" id="exampleFormControlFile1" name="file"></div><button type="submit" class="btn btn-primary">Primary</button>
</form></body>
</html>
后端代码实现
public function excel_import(){$file_name = request()->file('file');$filename = Str::random(20) . '.' . $file_name->getClientOriginalExtension();$path_name = $file_name->storeAs('/public/uploads/', $filename, 'public');
// dd($path);$file = public_path('storage/'.$path_name);$path = $this->real_file_path($path_name);try {$import_log = new ImportLog();$import_log->item = get_class(new TaskBomModel());$import_log->operator = Admin::user()->id;$import_log->save();$type_map = TaskBomModel::TYPE_MAP;$reader = new Xlsx();$spreadsheet = $reader->load($file);//获取c列2行单元格$sku_sn = $spreadsheet->getSheet(0)->getCell('C2')->getValue();//获取C列3行单元格的内容$bom_type = $spreadsheet->getSheet(0)->getCell('C3')->getValue();$type = array_search($bom_type, $type_map);//成品表数据$bom = GoodsSkuModel::query()->where('sku_sn', $sku_sn)->first();if (empty($bom)) {throw new Exception('关联成品编码' . $sku_sn . '不存在,请确认编码是否真实存在或前往产品界面添加');}$task_bom = TaskBomModel::where('sku_id', $bom->id)->get()->toArray();if (!empty($task_bom)) {throw new Exception('该BOM已存在');}if (!empty($bom)) {$task_bom = new TaskBomModel();$task_bom->bom_name = $bom->goods_name ?? '';$task_bom->bom_code = $bom->sku_sn ?? '';$task_bom->type = $type;$task_bom->bom_sku_name = $bom->sku_name ?? '';$task_bom->product_id = $bom->goods_id ?? '';$task_bom->sku_id = $bom->id ?? '';if ($task_bom->save()){$bom_success= true;}}if ($bom_success) {$row_map = Excel::import($path)->headingRow(10)->first()->toArray();foreach ($row_map as $map) {$complete_bom_sku_sn = trim($map['完整BOM存货编码']);$complete_bom_num = trim($map['完整BOM消耗数量']);$easy_bom_sku_sn = trim($map['简易BOM存货编码']);$easy_bom_num = trim($map['简易BOM消耗数量']);//判断完整BOM有值更新完整BOM字段if ($complete_bom_sku_sn) {//配料表数据$complete_bom_map = GzGoodsSkuModel::query()->where('sku_sn', $complete_bom_sku_sn)->first();if ($complete_bom_map == null) {$fail++;//记录错误编码ImportLogDetail::query()->create(['log_id' => $import_log->id,'log' => '物料编码' . $complete_bom_sku_sn . '不存在']);} else {$complete_data[] = ['sku_id' => $complete_bom_map->id,'num' => $complete_bom_num,'type' => 1,'remark' => null];
// dd($complete_data);TaskBomModel::where('id', $task_bom->id)->update(['full_map' => $complete_data //完整BOM]);ImportLogDetail::query()->create(['log_id' => $import_log->id,'status' => 1,'log' => '物料编码' . $complete_bom_sku_sn . '导入成功']);$success++;}}//判断简易BOM有值更新简易BOM字段if ($easy_bom_sku_sn) {//配料表数据$easy_bom_map = GzGoodsSkuModel::query()->where('sku_sn', $easy_bom_sku_sn)->first();if ($easy_bom_map == null) {$fail++;//记录错误编码ImportLogDetail::query()->create(['log_id' => $import_log->id,'log' => '物料编码' . $easy_bom_sku_sn . '不存在']);} else {$easy_data[] = ['sku_id' => $easy_bom_map->id,'num' => $easy_bom_num,'type' => 1,'remark' => null];TaskBomModel::where('id', $task_bom->id)->update(['basic_map' => $easy_data //简易BOM]);ImportLogDetail::query()->create(['log_id' => $import_log->id,'status' => 1,'log' => '物料编码' . $easy_bom_sku_sn . '导入成功']);$success++;}}}}$import_log->succeed = $success;$import_log->failed = $fail;$import_log->save();$url = admin_url('import_logs');$content = <<<EOF
库存导入成功:{$success},导入失败:{$fail}
<br>请在菜单<a target="_blank" href="{$url}" >【导入日志】</a>中查看记录
EOF;return $this->response()->success($content)->refresh();} catch (Exception $e) {return $this->response()->error($e->getMessage());}}function real_file_path($cover = ""): string{if ($cover) {if (Str::contains($cover, '//')) {return $cover;}return Storage::disk('public')->path($cover);} else {return '';}}
相关文章:
laravel+phpoffice+easyexcel实现导入
资源包下载地址 https://download.csdn.net/download/QiZong__BK/89503486 easy-excel下载: "dcat/easy-excel": "^1.0", 命令行: composer require dcat/easy-excel 前端代码 <!doctype html> <html lang"en&…...
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 为什么需要多数据源? 在实际的应用开发中,有时候…...
Java项目:基于SSM框架实现的班主任助理管理系统【ssm+B/S架构+源码+数据库+开题报告+毕业论文】
一、项目简介 本项目是一套基于SSM框架实现的班主任助理管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功…...
数据在内存中的存储方式
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C语言 目录 前言 一、整数的存储 二、大小端字节序及其判断 1.什么是大小端 2.为什么有大小端 3.用c语言编写程序判断大小端 三、浮点数的存储 1.浮点数…...
Selenium 监视数据收发
实际上,在我提供的示例中,确实使用了浏览器实例。webdriver.Chrome()这行代码正是创建了一个Chrome浏览器的WebDriver实例。Selenium Wire扩展了标准的Selenium WebDriver,允许你通过这个浏览器实例来监听网络请求。 当你运行类似这样的代码…...
基于 STM32 的智能睡眠呼吸监测系统设计
本设计的硬件构成: STM32F103C8T6单片机最小系统板(包含3.3V稳压电路时钟晶振电路复位电路(上电自复位,手动复位)),心率传感器、气压传感器、液晶显示、按键、蜂鸣器、LED灯、蓝牙模块组合而成…...
Spring的事务管理、AOP实现底层
目录 spring的事务管理是如何实现的? Spring的AOP的底层实现原理 spring的事务管理是如何实现的? 首先,spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的整套流程来执行具体的操作逻辑ÿ…...
基于SpringBoot的篮球竞赛预约平台
你好,我是计算机学姐码农小野!如果你对篮球竞赛预约平台感兴趣或有相关需求,欢迎私信联系我。 开发语言: Java 数据库: MySQL 技术: SpringBootMySql 工具: MyEclipse、Tomcat 系统展示…...
学生用小台灯什么牌子的好?列举出几款学生用台灯推荐
眼睛是我们感知世界的窗口,但近年来,儿童青少年的视力健康却受到了严重困扰。数据显示,近视问题在儿童群体中呈现出明显的增长趋势,这给他们的学习和生活带来了诸多不便。虽然现代科技的快速发展使得电子产品成为了我们生活中不可…...
软件测试面试题:项目中的MQ是如何测试的?
通常,咱们会从两个方面来考虑:正常情况和异常情况。 首先,咱们得确保消息队列在正常工作时结果正确。比如,消息发送出去的时候,所有的字段都得齐全,接收方收到的消息也得一样。咱们得确保系统能够正确无误…...
Python爬取国家医保平台公开数据
国家医保服务平台数据爬取python爬虫数据爬取医疗公开数据 定点医疗机构查询定点零售药店查询医保机构查询药品分类与代码查询 等等,数据都能爬 接口地址:/ebus/fuwu/api/nthl/api/CommQuery/queryFixedHospital 签名参数:signData {dat…...
B站大课堂-自动化精品视频(个人存档)
基础知识 工业通信协议 Modbus 施耐德研发,有基于以太网的 ModbusTCP 协议和使用 485/232 串口通信的 ModbusRTU/ASCII。 Modbus 协议面世较早、协议简洁高效、商用免费、功能灵活、实现简单,是目前应用最广泛的现场总线协议。 我的笔记里边有一些推荐…...
C++_STL---priority_queue
priority_queue的相关介绍 优先级队列是一种容器适配器,根据严格的排序标准,它的第一个元素总是它所包含的元素中最大(小)的。该容器适配器类似于堆,在堆中可以随时插入元素,并且可以检索最大(小)堆元素(优先级队列中位于顶部的元…...
可移动天线辅助宽带通信的性能分析和优化
可移动天线辅助宽带通信的性能分析和优化 可移动天线 (MA) 已成为一种很有前景的技术,通过在发射器 (Tx) 和/或接收器 (Rx) 处实现天线的本地移动来实现更有利的信道条件,从而增强无线通信性能。 由于现有的MA辅助无线通信研究主要考虑平坦衰落信道中的…...
h5兼容table ,如何实现h5在app内使用h5渲染table表格而且实现横屏预览?
压图地址 横屏div 通过css 实现 transform: rotate(90deg); transformOrigin: 50vw 50vw ; height: 100vw; width: 100vh;<divclass"popup-box":style"{transform: originSet 0 ? rotate(90deg) : ,transformOrigin: originSet 0 ? 50vw 50vw : ,height…...
在windows上安装objection
安装命令pip install objection -i https://mirrors.aliyun.com/pypi/simple hook指定进程 objection -g 测试 explore 进程名不定是包名,也可能是app名字,如“测试”就是app的名字 若出现如下错误,说明python 缺少setuptools 直接安装setu…...
人脸特征68点识别 C++
1、加载一张图片 main函数: cv::Mat img cv::imread("5.jpg");vector<Point2f> points_vec dectectFace68(img);2、人脸68特征识别函数 在这里vector<Point2f> dectectFace68(Mat src) {vector<Point2f> points_vec;int* pResults …...
部署LVS-DR 群集
1 LVS-DR 集群 LVS-DR (Linux Virtual Server Director Server ) 工作模式, 是生产环境中最常用的一种工作模式 1.1:LVS-DR工作原理 LVS-DR 模式, Director Server 作为群集的访问入口, 不作为网关使用,…...
nginx的正向代理和反向代理
概念 正向代理以及缓存配置 代理:客户端不再是直接访问服务端,通过代理服务器访问服务端。 正向代理:面向客户端,我们通过代理服务器的ip地址访问目标服务器。 服务端只知道代理服务器的地址,真正的客户端ip可以隐…...
米国政府呼吁抛弃 C 和 C++
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 很多观点认为C 或 C永远不可被…...
大模型部署成本优化:面向测试从业者的云服务省钱技巧
随着大模型在自动化测试、缺陷智能分析、测试用例生成等领域的应用日益深入,其部署与调用成本已成为测试团队必须面对的核心挑战。高昂的GPU算力费用、未被充分利用的资源以及复杂的定价模型,都可能使技术创新的预算捉襟见肘。一、理解成本构成ÿ…...
图深度学习文献宝库LiteratureDL4Graph:一站式掌握图神经网络研究进展
图深度学习文献宝库LiteratureDL4Graph:一站式掌握图神经网络研究进展 【免费下载链接】LiteratureDL4Graph 项目地址: https://gitcode.com/gh_mirrors/li/LiteratureDL4Graph 想要快速掌握图神经网络(GNN)和图深度学习的最新研究进展吗?Litera…...
蓝桥杯备赛:Floyd、Bellman-Ford、Dijkstra,三大最短路算法到底怎么选?(附场景对比与代码模板)
蓝桥杯竞赛:Floyd、Bellman-Ford、Dijkstra三大最短路算法实战指南 在算法竞赛的战场上,最短路问题就像是一道必考题,而Floyd、Bellman-Ford和Dijkstra这三大算法则是解题的利器。但很多选手在面对具体问题时常常陷入选择困难:该用…...
SolidWorks卸载后注册表残留?3步彻底清理+重装避坑指南(附工具)
SolidWorks卸载后注册表残留?3步彻底清理重装避坑指南(附工具) 每次开机都被"Windows正在配置SolidWorks"的弹窗骚扰?重装软件时总提示"已存在相同版本"?这大概率是注册表残留的幽灵在作祟。作为…...
EmuELEC 3.9 vs 4.0+:不同版本写入EMMC的详细操作指南(附常见问题解决)
EmuELEC 3.9与4.0版本EMMC写入全流程实战解析 1. 版本差异与核心机制解析 EmuELEC作为开源游戏系统,其3.9与4.0版本在EMMC写入机制上存在根本性架构差异。理解这些差异是避免操作失误的前提。 3.9版本的技术特点: 采用传统的installtointernal.sh脚本…...
告别手动点鼠标!用Python脚本批量跑Simulink仿真,效率提升10倍
告别手动点鼠标!用Python脚本批量跑Simulink仿真,效率提升10倍 在工程仿真领域,Simulink无疑是建模与分析的利器。但当面对参数扫描、蒙特卡洛分析或设计迭代等需要大量重复仿真的场景时,手动操作不仅效率低下,还容易…...
新手零基础入门CAN总线:借助快马AI生成可运行代码理解通信机制
作为一个刚接触嵌入式开发的菜鸟,最近被导师要求学习CAN总线协议。面对手册里密密麻麻的寄存器配置和报文格式说明,我一度怀疑自己是不是选错了专业方向。直到发现了InsCode(快马)平台,用它的AI生成功能快速搭建了一个可运行的CAN通信demo&am…...
Qwen2.5-14B-Instruct+Pixel Script Temple:高校戏剧系AI辅助教学实战案例
Qwen2.5-14B-InstructPixel Script Temple:高校戏剧系AI辅助教学实战案例 1. 项目背景与价值 在高校戏剧教育领域,剧本创作一直是教学难点。传统教学模式下,学生需要花费大量时间在格式规范、基础场景构建等基础性工作上,而教师…...
告别重复操作:用快马生成智能浏览器扩展,极速提升前端调试与数据提取效率
作为一名前端开发者,每天都要和网页元素打交道。调试样式、提取数据这些重复性工作,如果全靠手动操作,不仅效率低下还容易出错。最近我发现用InsCode(快马)平台可以快速生成定制化的浏览器扩展,把那些繁琐操作变成一键自动化&…...
霞鹜文楷GB:开源楷体字体的国标规范解决方案
霞鹜文楷GB:开源楷体字体的国标规范解决方案 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB 在数字时代的中文排版领域,如何在保持视…...
