src/main/java/com/zy/asrs/controller/MatController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/result/OutLocBoxVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/OutLocBoxExcelListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/entity/OutLocBoxExcel.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/pakStore/stockOut.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/pakStore/stockOut.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/MatController.java
@@ -17,9 +17,11 @@ import com.zy.asrs.entity.result.KeyValueVo; import com.zy.asrs.service.MatService; import com.zy.asrs.utils.MatExcelListener; import com.zy.asrs.utils.OutLocBoxExcelListener; import com.zy.common.CodeRes; import com.zy.common.config.AdminInterceptor; import com.zy.common.entity.MatExcel; import com.zy.common.entity.OutLocBoxExcel; import com.zy.common.utils.BarcodeUtils; import com.zy.common.utils.QrCode; import com.zy.common.web.BaseController; @@ -331,4 +333,35 @@ } /*************************************** 数据相关 ***********************************************/ /** * excel导入模板下载 */ @RequestMapping(value = "/out/loc/box/excel/import/mould") public void outLocBoxExcelImportMould(HttpServletResponse response) throws IOException { List<OutLocBoxExcel> excels = new ArrayList<>(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("导入箱号出库模板", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), OutLocBoxExcel.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .sheet("出库模板") .doWrite(excels); } // excel导入 @PostMapping(value = "/out/loc/box/excel/import/auth") @ManagerAuth(memo = "导入箱号出库") @Transactional public R outLocBoxExcelImport(MultipartFile file) throws IOException { OutLocBoxExcelListener listener = new OutLocBoxExcelListener(getUserId()); EasyExcel.read(file.getInputStream(), OutLocBoxExcel.class, listener).sheet().doRead(); return R.ok("成功出库"+listener.getTotal()+"条商品数据"); } /*************************************** xm-select ***********************************************/ } src/main/java/com/zy/asrs/entity/result/OutLocBoxVo.java
New file @@ -0,0 +1,24 @@ package com.zy.asrs.entity.result; import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotations.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by vincent on 2021/4/13 */ @Data public class OutLocBoxVo { @ExcelProperty(value = "箱号") private String batch; public OutLocBoxVo() { } public OutLocBoxVo(String batch) { this.batch = batch; } } src/main/java/com/zy/asrs/utils/OutLocBoxExcelListener.java
New file @@ -0,0 +1,69 @@ package com.zy.asrs.utils; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.core.common.Cools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.common.entity.OutLocBoxExcel; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * Created by vincent on 2019-11-25 */ @Slf4j public class OutLocBoxExcelListener extends AnalysisEventListener<OutLocBoxExcel> { private int total = 0; private Long userId; List<String> batchs = new ArrayList<>(); public OutLocBoxExcelListener() { } public OutLocBoxExcelListener(Long userId) { this.userId = userId; } /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 50; private final List<OutLocBoxExcel> list = new ArrayList<>(); /** * 这里会一行行的返回头 */ @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { } /** * 这个每一条数据解析都会来调用 */ @Override public void invoke(OutLocBoxExcel excel, AnalysisContext ctx) { String batch = excel.getBatch(); batchs.add(batch); total++; } /** * 所有数据解析完成了调用 * 适合事务 */ @Override public void doAfterAllAnalysed(AnalysisContext ctx) { log.info("生成{}条出库任务!", total); } public int getTotal() { return total; } } src/main/java/com/zy/common/entity/OutLocBoxExcel.java
New file @@ -0,0 +1,22 @@ package com.zy.common.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.Mat; import com.zy.asrs.entity.result.OutLocBoxVo; import lombok.Data; /** * 0.A 1.B 2.C 3.D 4.E 5.F 6.G 7.H 8.I * 9.J 10.K 11.L 12.M 13.N 14.O 15.P 16.Q 17.R 18.S * 19.T 20.U 21.V 22.W 23.X 24.Y 25.Z */ @Data @ExcelIgnoreUnannotated public class OutLocBoxExcel extends OutLocBoxVo { private String batch; } src/main/webapp/static/js/pakStore/stockOut.js
@@ -1,5 +1,6 @@ var locDetlLayerIdx; var locDetlData = []; var admin; function getCol() { var cols = [ // {field: 'count', align: 'center',title: '出库数量', edit:'text', width: 130, style:'color: blue;font-weight: bold'}, @@ -19,7 +20,7 @@ var $ = layui.jquery; var layer = layui.layer; var form = layui.form; var admin = layui.admin; admin = layui.admin; tableIns = table.render({ elem: '#chooseData', @@ -175,3 +176,58 @@ tableIns.reload({data: locDetlData}); layer.close(locDetlLayerIdx); } // excel导入模板下载 function excelMouldDownload(){ layer.load(1, {shade: [0.1,'#fff']}); location.href = baseUrl + "/out/loc/box/excel/import/mould"; layer.closeAll('loading'); } // excel导入 function importExcel() { $("#importExcel").trigger("click"); } function upload(obj){ if(!obj.files) { return; } var file = obj.files[0]; admin.confirm('确认同步 [' + file.name +'] 文件吗?', function (index) { layer.load(1, {shade: [0.1,'#fff']}); var url = baseUrl + "/out/loc/box/excel/import/auth"; var form = new FormData(); form.append("file", file); xhr = new XMLHttpRequest(); xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 xhr.setRequestHeader('token', localStorage.getItem('token')); xhr.onload = uploadComplete; //请求完成 xhr.onerror = uploadFailed; //请求失败 xhr.onloadend = function () { // // 上传完成重置文件流 layer.closeAll('loading'); $("#importExcel").val(""); }; // xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】 xhr.upload.onloadstart = function(){//上传开始执行方法 ot = new Date().getTime(); //设置上传开始时间 oloaded = 0;//设置上传开始时,以上传的文件大小为0 }; xhr.send(form); }, function(index){ $("#importExcel").val(""); }); } function uploadComplete(evt) { var res = JSON.parse(evt.target.responseText); if(res.code === 200) { layer.msg(res.msg, {icon: 1}); loadTree(""); } else { layer.msg(res.msg, {icon: 2}); } } function uploadFailed(evt) { var res = JSON.parse(evt.target.responseText); layer.msg(res.msg, {icon: 2}); } src/main/webapp/views/pakStore/stockOut.html
@@ -84,6 +84,7 @@ <!-- 功能区 --> <div class="function-area"> <button id="mat-query" class="function-btn">提取库存</button> <button class="function-btn" style="width: auto;float:right;" onclick="excelMouldDownload()">导入箱号出库模板下载</button> </div> <hr> @@ -102,6 +103,9 @@ </select> <!-- 2.启动出库 --> <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">启动出库</button> <!-- 3.导入箱号出库 --> <button class="layui-btn layui-btn-lg" onclick="importExcel()" style="font-size: 12px;width: auto;">导入箱号出库</button> <span style="display: none"><input id="importExcel" type="file" onchange="upload(this)">启动出库</span> </div> </div> </script> @@ -116,6 +120,7 @@ <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/jquery/jQuery.print.js"></script> <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>