src/main/java/com/zy/asrs/controller/LocOwnerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/LocOwner.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/Pla.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/LocOwnerExcelListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/PlaExcelListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/entity/LocOwnerExcel.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/locOwner/locOwner.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/locOwner/locOwner.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/LocOwnerController.java
@@ -1,5 +1,7 @@ package com.zy.asrs.controller; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; @@ -9,12 +11,20 @@ import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.LocOwner; import com.zy.asrs.service.LocOwnerService; import com.zy.asrs.utils.LocOwnerExcelListener; import com.zy.common.entity.LocOwnerExcel; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -139,4 +149,34 @@ return R.ok(); } /** * excel导入模板下载 */ @RequestMapping(value = "/locOwner/excel/import/mould") public void plaExcelImportMould(HttpServletResponse response) throws IOException { List<LocOwnerExcel> 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(), LocOwnerExcel.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .sheet("sheet1") .doWrite(excels); } // excel导入 @PostMapping(value = "/locOwner/excel/import/auth") @ManagerAuth(memo = "货主档案数据导入") @Transactional public R matExcelImport(MultipartFile file) throws IOException { LocOwnerExcelListener listener = new LocOwnerExcelListener(getUserId()); try { EasyExcel.read(file.getInputStream(), LocOwnerExcel.class, listener).sheet().doRead(); }catch (Exception e){ throw new CoolException("导入的数据格式错误,原因:" + e.getMessage()); } return R.ok("成功同步"+listener.getTotal()+"条pla物料数据"); } } src/main/java/com/zy/asrs/entity/LocOwner.java
@@ -1,5 +1,6 @@ package com.zy.asrs.entity; import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; @@ -19,10 +20,13 @@ private Long id; @ApiModelProperty(value= "") @ExcelProperty(value = "客户名称") private String owner; @ExcelProperty(value = "客户电话") private String phone; @ExcelProperty(value = "客户地址") private String addr; public LocOwner() {} src/main/java/com/zy/asrs/entity/Pla.java
@@ -214,7 +214,7 @@ //库位 @TableField("loc_no") //@ExcelProperty(value = "库位") @ExcelProperty(value = "库位") private String locNo; //状态 src/main/java/com/zy/asrs/utils/LocOwnerExcelListener.java
New file @@ -0,0 +1,91 @@ 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.common.Cools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.LocOwner; import com.zy.asrs.service.LocOwnerService; import com.zy.common.entity.LocOwnerExcel; import com.zy.common.entity.MatExcel; 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 LocOwnerExcelListener extends AnalysisEventListener<LocOwnerExcel> { private int total = 0; private Long userId; public LocOwnerExcelListener() { } public LocOwnerExcelListener(Long userId) { this.userId = userId; } /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 50; private final List<MatExcel> list = new ArrayList<>(); /** * 这里会一行行的返回头 */ @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { } /** * 这个每一条数据解析都会来调用 */ @Override public void invoke(LocOwnerExcel excel, AnalysisContext ctx) { LocOwnerService locOwnerService = SpringUtils.getBean(LocOwnerService.class); Date now = new Date(); // 商品 if(Cools.isEmpty(excel.getOwner())){ return; } LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner",excel.getOwner())); if (locOwner == null) { locOwner = excel; if (!locOwnerService.insert(locOwner)) { throw new CoolException("保存客户信息失败,客户名称:" + excel.getOwner()); } total++; }else { locOwner.setOwner(excel.getOwner()); locOwner.setAddr(excel.getAddr()); locOwner.setPhone(excel.getPhone()); locOwnerService.updateById(locOwner); total++; } } /** * 所有数据解析完成了调用 * 适合事务 */ @Override public void doAfterAllAnalysed(AnalysisContext ctx) { log.info("新增{}条物料信息!", total); } public int getTotal() { return total; } } src/main/java/com/zy/asrs/utils/PlaExcelListener.java
@@ -5,8 +5,10 @@ import com.core.common.Cools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.Node; import com.zy.asrs.entity.Pla; import com.zy.asrs.entity.param.GlobleParameter; import com.zy.asrs.service.NodeService; import com.zy.asrs.service.PlaService; import com.zy.common.entity.MatExcel; import com.zy.common.entity.PlaExcel; @@ -54,6 +56,7 @@ @Override public void invoke(PlaExcel excel, AnalysisContext ctx) { PlaService plaService = SpringUtils.getBean(PlaService.class); NodeService nodeService = SpringUtils.getBean(NodeService.class); Date now = new Date(); // 商品 @@ -68,6 +71,16 @@ pla.setModifyTime(new Date()); pla.setStatus(GlobleParameter.PLA_STATUS_00); pla.setStockFreeze(1); if(!Cools.isEmpty(pla.getLocNo())){ Node node = nodeService.selectByUuid(pla.getLocNo()); if(Cools.isEmpty(node)){ throw new CoolException("未能找到相应的库位信息"); } pla.setStash(node.getParentName()); pla.setLocNo(node.getUuid()); pla.setStatus(GlobleParameter.PLA_STATUS_1); pla.setPakinTime(new Date()); } if (!plaService.insert(pla)) { throw new CoolException("保存商品信息失败,商品编码:" + excel.getMatnr()); } src/main/java/com/zy/common/entity/LocOwnerExcel.java
New file @@ -0,0 +1,10 @@ package com.zy.common.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.zy.asrs.entity.LocOwner; import lombok.Data; @Data @ExcelIgnoreUnannotated public class LocOwnerExcel extends LocOwner { } src/main/webapp/static/js/locOwner/locOwner.js
@@ -1,13 +1,16 @@ var pageCurr; var admin; layui.config({ base: baseUrl + "/static/layui/lay/modules/" }).use(['table','laydate', 'form', 'admin'], function(){ }).extend({ dropdown: 'dropdown/dropdown', }).use(['table','laydate', 'form', 'admin', 'dropdown'], function(){ var table = layui.table; var $ = layui.jquery; var layer = layui.layer; var layDate = layui.laydate; var form = layui.form; var admin = layui.admin; admin = layui.admin; // 数据渲染 tableIns = table.render({ @@ -240,3 +243,56 @@ page: {curr: pageCurr} }); } // excel导入模板下载 function excelMouldDownload(){ layer.load(1, {shade: [0.1,'#fff']}); location.href = baseUrl + "/locOwner/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 + "/locOwner/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/locOwner/locOwner.html
@@ -18,9 +18,9 @@ <div class="layui-form toolbar" id="search-box"> <div class="layui-form-item"> <div class="layui-inline"> <label class="layui-form-label">客户编号:</label> <label class="layui-form-label">客户名称:</label> <div class="layui-input-inline"> <input class="layui-input" type="text" name="id" placeholder="客户编号" autocomplete="off"> <input class="layui-input" type="text" name="owner" placeholder="客户名称" autocomplete="off"> </div> </div> <div class="layui-inline">  @@ -41,7 +41,22 @@ <script type="text/html" id="toolbar"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button> <!-- <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>--> <!-- 商品/物料 数据中心 --> <div class="dropdown-menu" style="float: right"> <button id="syncData" class="layui-btn layui-btn-primary layui-border-black icon-btn layui-btn-sm"> 数据同步 <i class="layui-icon layui-icon-drop"></i></button> <ul class="dropdown-menu-nav dark"> <div class="dropdown-anchor"></div> <li class="title">1st menu</li> <li><a onclick="excelMouldDownload()" style="font-size: 12px"><i class="layui-icon layui-icon-template-1"></i>模板下载</a></li> <li><a onclick="importExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-upload"></i>导入 Excel</a></li> <li style="display: none"><input id="importExcel" type="file" onchange="upload(this)" ></li> <hr> <!-- <li class="title">2nd menu</li>--> <!-- <li><a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>导出 Excel</a></li>--> </ul> </div> <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button> </div> </script>