src/main/java/com/zy/asrs/controller/MatController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/result/pandianVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/OutpandianBoxExeclListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/entity/pandianExcel.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/pakStore/locCheckOut.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/pakStore/locCheckOut.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/MatController.java
@@ -22,6 +22,7 @@ import com.zy.common.config.AdminInterceptor; import com.zy.common.entity.MatExcel; import com.zy.common.entity.OutLocBoxExcel; import com.zy.common.entity.pandianExcel; import com.zy.common.utils.BarcodeUtils; import com.zy.common.utils.QrCode; import com.zy.common.web.BaseController; @@ -361,6 +362,34 @@ return R.ok("成功出库"+listener.getTotal()+"条商品数据"); } /*********************************************盘点导入导出****************************************************************/ /** * excel导入模板下载 */ @RequestMapping(value = "/out/loc/box/excel/import/mould1") public void outLocBoxExcelImportMould1(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(), pandianExcel.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .sheet("盘点模板") .doWrite(excels); } // excel导入 @PostMapping(value = "/out/loc/box/excel/import/auth1") @ManagerAuth(memo = "导入箱号盘点出库") @Transactional public R outLocBoxExcelImport1(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/pandianVo.java
New file @@ -0,0 +1,28 @@ package com.zy.asrs.entity.result; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class pandianVo { @ExcelProperty(value = "箱号") private String batch; @ExcelProperty(value = "卷号") private String model; @ExcelProperty(value = "规格型号") private String matnr; public pandianVo() { } public pandianVo(String batch) { this.batch = batch; } public pandianVo(String batch, String model, String matnr) { this.batch = batch; this.model = model; this.matnr = matnr; } } src/main/java/com/zy/asrs/utils/OutpandianBoxExeclListener.java
New file @@ -0,0 +1,150 @@ package com.zy.asrs.utils; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.service.LocDetlService; import com.zy.asrs.service.WorkService; import com.zy.common.entity.pandianExcel; import com.zy.common.model.LocDto; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; import java.util.Map; @Slf4j public class OutpandianBoxExeclListener extends AnalysisEventListener<pandianExcel> { private int total = 0; private Long userId; List<String[]> OutLocBoxCs = new ArrayList<>(); public OutpandianBoxExeclListener() { } public OutpandianBoxExeclListener(Long userId) { this.userId = userId; } /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 50; private final List<pandianExcel> list = new ArrayList<>(); /** * 这里会一行行的返回头 */ @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { } /** * 这个每一条数据解析都会来调用 */ @Override public void invoke(pandianExcel pandianExcel, AnalysisContext analysisContext) { String batch = pandianExcel.getBatch(); if (Cools.isEmpty(batch)){ throw new CoolException("箱号参数为空"); } String[] s=new String[1]; s[0] = batch; OutLocBoxCs.add(s); total++; } /** * 所有数据解析完成了调用 * 适合事务 */ @Override @ManagerAuth public void doAfterAllAnalysed(AnalysisContext ctx) { ArrayList<LocDetl> locDetls1 = new ArrayList<>(); if (!Cools.isEmpty(OutLocBoxCs) && OutLocBoxCs.size() != 0) { LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class); WorkService workService = SpringUtils.getBean(WorkService.class); List<LocDto> locDtos = new ArrayList<>(); List<String[]> outLocBoxCList = new ArrayList<>(); List<String> outLocBoxCNew = new ArrayList<>(); for (String[] outLocBoxC:OutLocBoxCs){ total--; if (!outLocBoxCNew.contains(outLocBoxC[0])){ LocDetl locDetlSou = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC[0])); if (Cools.isEmpty(locDetlSou)){ throw new CoolException("箱号:"+outLocBoxC[0]+" 未查询到数据!!!"); } List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() .eq("loc_no", locDetlSou.getLocNo()).eq("origin", locDetlSou.getOrigin())); for (LocDetl locDetl:locDetls){ total++; String[] locDetlNow=new String[2]; locDetlNow[0] = locDetl.getBatch(); locDetlNow[1] = outLocBoxC[1]; outLocBoxCList.add(locDetlNow); outLocBoxCNew.add(outLocBoxC[0]); } } } for (String[] outLocBoxC:outLocBoxCList){ LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("batch", outLocBoxC[0])); if (Cools.isEmpty(locDetl)){ total--; continue; } // LocDto locDto = new LocDto(locDetl.getManu(), locDetl.getMatnr(), locDetl.getMaktx(),locDetl.getModel(),locDetl.getSpecs(), // locDetl.getBatch(),locDetl.getBrand(),locDetl.getBarcode(), outLocBoxC[1],locDetl.getAnfme()); // locDto.setOrigin(locDetl.getOrigin()); // locDto.setWeight(locDetl.getWeight()); LocDto locDto = new LocDto(locDetl); locDtos.add(locDto); } StockOutParam param = new StockOutParam(); List<LocDto> locDtosList = new ArrayList<>(); List<String> batchList = new ArrayList<>(); for (LocDto locDto : locDtos) { if (!batchList.contains(locDto.getBatch())){ batchList.add(locDto.getBatch()); locDtosList.add(locDto); } } for (LocDto locDto:locDtosList){ LocDetl locDetl = new LocDetl(); locDetl.setBrand(locDto.getBrand()); locDetl.setLocNo(locDto.getLocNo()); locDetl.setAnfme(locDto.getAnfme()); locDetl.setMatnr(locDto.getMatnr()); locDetl.setBatch(locDto.getBatch()); locDetl.setModel(locDto.getModel()); locDetl.setSpecs(locDto.getSpecs()); locDetl.setZpallet(locDto.getZpallet()); locDetl.setOrigin(locDto.getOrigin()); locDetl.setWeight(locDto.getWeight()); locDetls1.add(locDetl); } //if (total>0){ // workService.startupFullTakeStoreOrder(param,9999L); //} } //return locDetls1; } public int getTotal() { return total; } } src/main/java/com/zy/common/entity/pandianExcel.java
New file @@ -0,0 +1,16 @@ package com.zy.common.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.zy.asrs.entity.result.pandianVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ExcelIgnoreUnannotated public class pandianExcel extends pandianVo { private String batch; private String model; private String matnr; } src/main/webapp/static/js/pakStore/locCheckOut.js
@@ -1,6 +1,7 @@ var locDetlLayerIdx; var tableIns; var locDetlData = []; var admin; function getCol() { var cols = [ {field: 'locNo', align: 'center',title: '库位号', merge: true, style: 'font-weight: bold'} @@ -17,7 +18,7 @@ var layer = layui.layer; var layDate = layui.laydate; var form = layui.form; var admin = layui.admin; admin = layui.admin; var tableMerge = layui.tableMerge; tableIns = table.render({ @@ -136,3 +137,57 @@ 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/mould1"; 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/auth1"; 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/locCheckOut.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> @@ -100,8 +101,10 @@ <select id="staNoSelect" lay-verify="required"> <option value="">请选择站点</option> </select> <!-- 2.启动出库 --> <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">盘点出库</button> <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>