From 688e299d29bd76cbd30bf3d7267bdc9afad954b0 Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期二, 13 五月 2025 17:24:04 +0800 Subject: [PATCH] excel导入堆垛机异常码 --- src/main/webapp/views/locMast/locMast.html | 1 src/main/webapp/static/wms/js/locMast/locMast.js | 26 ++++++++ src/main/java/com/zy/asrs/importexcle/ImportCrnErrListener.java | 96 ++++++++++++++++++++++++++++++++ src/main/java/com/zy/asrs/entity/BasCrnError.java | 3 src/main/java/com/zy/asrs/importexcle/ImportCrnErrDto.java | 20 ++++++ src/main/java/com/zy/asrs/controller/CrnController.java | 28 +++++++++ 6 files changed, 170 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java index fea95a9..9d7b618 100644 --- a/src/main/java/com/zy/asrs/controller/CrnController.java +++ b/src/main/java/com/zy/asrs/controller/CrnController.java @@ -1,5 +1,6 @@ package com.zy.asrs.controller; +import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.ManagerAuth; @@ -14,8 +15,11 @@ import com.zy.asrs.domain.vo.CrnMsgTableVo; import com.zy.asrs.domain.vo.CrnStateTableVo; import com.zy.asrs.entity.*; +import com.zy.asrs.importexcle.ImportCrnErrDto; +import com.zy.asrs.importexcle.ImportCrnErrListener; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.mapper.TaskWrkMapper; +import com.zy.asrs.service.BasCrnErrorService; import com.zy.asrs.service.BasCrnpService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; @@ -35,9 +39,12 @@ import com.zy.core.properties.SystemProperties; import lombok.extern.slf4j.Slf4j; 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.annotation.Resource; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -66,6 +73,27 @@ @Resource private TaskWrkMapper taskWrkMapper; + @Resource + private BasCrnErrorService basCrnErrorService; + + @PostMapping("/importCrnErr") + @ManagerAuth(memo = "瀵煎叆鍫嗗灈鏈哄紓甯歌〃") + public R importCrnErr(@RequestParam("file") MultipartFile multipartFile) { + try { + importCrnErrExec(multipartFile); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.ok("瀵煎叆鎴愬姛"); + } + + @Transactional(rollbackFor = Exception.class) + public void importCrnErrExec(MultipartFile multipartFile) throws IOException { + EasyExcel.read(multipartFile.getInputStream(), ImportCrnErrDto.class, + new ImportCrnErrListener(basCrnErrorService)).sheet().doReadSync(); + } + @ManagerAuth(memo = "杩涜涓殑鍛戒护") @PostMapping("/crn/command/ongoing") diff --git a/src/main/java/com/zy/asrs/entity/BasCrnError.java b/src/main/java/com/zy/asrs/entity/BasCrnError.java index cfeea1a..a3e9034 100644 --- a/src/main/java/com/zy/asrs/entity/BasCrnError.java +++ b/src/main/java/com/zy/asrs/entity/BasCrnError.java @@ -3,7 +3,6 @@ import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; -import com.baomidou.mybatisplus.enums.IdType; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.system.entity.User; @@ -23,7 +22,7 @@ * 寮傚父浠e彿 */ @ApiModelProperty(value = "寮傚父浠e彿") - @TableId(value = "error_code", type = IdType.AUTO) + @TableId(value = "error_code") @TableField("error_code") private Long errorCode; diff --git a/src/main/java/com/zy/asrs/importexcle/ImportCrnErrDto.java b/src/main/java/com/zy/asrs/importexcle/ImportCrnErrDto.java new file mode 100644 index 0000000..e712401 --- /dev/null +++ b/src/main/java/com/zy/asrs/importexcle/ImportCrnErrDto.java @@ -0,0 +1,20 @@ +package com.zy.asrs.importexcle; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * @author pang.jiabao + * @description 瀵煎叆鍫嗗灈鏈哄紓甯镐唬鐮乨to + * @createDate 2024/9/2 9:55 + */ +@Data +public class ImportCrnErrDto { + + @ExcelProperty(value = "搴忓彿",index = 0) + private Long column1; + + @ExcelProperty(value = "寮傚父鎻忚堪",index = 1) + private String column2; + +} diff --git a/src/main/java/com/zy/asrs/importexcle/ImportCrnErrListener.java b/src/main/java/com/zy/asrs/importexcle/ImportCrnErrListener.java new file mode 100644 index 0000000..98d002c --- /dev/null +++ b/src/main/java/com/zy/asrs/importexcle/ImportCrnErrListener.java @@ -0,0 +1,96 @@ +package com.zy.asrs.importexcle; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.fastjson.JSON; +import com.zy.asrs.entity.BasCrnError; +import com.zy.asrs.service.BasCrnErrorService; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author pang.jiabao + * @description 瀵煎叆鍨涙満寮傚父琛ㄧ洃鍚櫒 + * @createDate 2024/9/2 9:56 + */ +@Slf4j +public class ImportCrnErrListener extends AnalysisEventListener<ImportCrnErrDto> { + /** + * 姣忛殧1000鏉″瓨鍌ㄦ暟鎹簱锛屽疄闄呬娇鐢ㄤ腑鍙互3000鏉★紝鐒跺悗娓呯悊list 锛屾柟渚垮唴瀛樺洖鏀� + */ + private static final int BATCH_COUNT = 400; + + private int count = 0; + + List<ImportCrnErrDto> list = new ArrayList<>(); + /** + * 鍋囪杩欎釜鏄竴涓狣AO锛屽綋鐒舵湁涓氬姟閫昏緫杩欎釜涔熷彲浠ユ槸涓�涓猻ervice銆傚綋鐒跺鏋滀笉鐢ㄥ瓨鍌ㄨ繖涓璞℃病鐢ㄣ�� + */ + private final BasCrnErrorService basCrnErrorService; + + /** + * 濡傛灉浣跨敤浜唖pring,璇蜂娇鐢ㄨ繖涓瀯閫犳柟娉曘�傛瘡娆″垱寤篖istener鐨勬椂鍊欓渶瑕佹妸spring绠$悊鐨勭被浼犺繘鏉� + */ + public ImportCrnErrListener(BasCrnErrorService basCrnErrorService) { + this.basCrnErrorService = basCrnErrorService; + } + + /** + * 杩欎釜姣忎竴鏉℃暟鎹В鏋愰兘浼氭潵璋冪敤 + */ + @SneakyThrows + @Override + public void invoke(ImportCrnErrDto data, AnalysisContext context) { + log.info("瑙f瀽鍒扮 {} 鏉℃暟鎹�:{}", ++count, JSON.toJSONString(data)); + if (!data.getColumn2().equals("<No value>")) { + list.add(data); + } + + // 杈惧埌BATCH_COUNT浜嗭紝闇�瑕佸幓瀛樺偍涓�娆℃暟鎹簱锛岄槻姝㈡暟鎹嚑涓囨潯鏁版嵁鍦ㄥ唴瀛橈紝瀹规槗OOM + if (list.size() >= BATCH_COUNT) { + saveData(); + // 瀛樺偍瀹屾垚娓呯悊 list + list.clear(); + } + } + + /** + * 鎵�鏈夋暟鎹В鏋愬畬鎴愪簡 閮戒細鏉ヨ皟鐢� + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴� + if (list.size() > 0) { + saveData(); + } + log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒"); + } + + /** + * 鍔犱笂瀛樺偍鏁版嵁搴� + */ + private void saveData() { + log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", list.size()); + List<BasCrnError> basCrnErrors = new ArrayList<>(); + list.forEach(importCrnErrDto -> { + BasCrnError basCrnError = new BasCrnError(); + basCrnError.setErrorCode(importCrnErrDto.getColumn1()); + basCrnError.setErrName(importCrnErrDto.getColumn2()); + basCrnErrors.add(basCrnError); + }); + basCrnErrorService.insertBatch(basCrnErrors); + + log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒"); + } + /** + *瑙f瀽鍑虹幇閿欒浼氳繘鍏ヨ鏂规硶 鍏蜂綋鐪嬫簮浠g爜鎴栨枃妗� + */ + @Override + public void onException(Exception exception, AnalysisContext context) throws Exception { + log.error("澶勭悊寮傚父锛�" + exception.getMessage()); + throw exception; + } +} diff --git a/src/main/webapp/static/wms/js/locMast/locMast.js b/src/main/webapp/static/wms/js/locMast/locMast.js index f7cc2e2..4b77865 100644 --- a/src/main/webapp/static/wms/js/locMast/locMast.js +++ b/src/main/webapp/static/wms/js/locMast/locMast.js @@ -1,11 +1,11 @@ var pageCurr; -layui.use(['table','laydate', 'form'], function(){ +layui.use(['table','laydate', 'form','upload','layer'], function(){ var table = layui.table; var $ = layui.jquery; var layer = layui.layer; var layDate = layui.laydate; var form = layui.form; - + var upload = layui.upload; // 鏁版嵁娓叉煋 tableIns = table.render({ elem: '#locMast', @@ -93,6 +93,28 @@ } }); + upload.render({ + elem: '#uploadExcel', // 缁戝畾鍏冪礌 + url: baseUrl+'/importCrnErr', // 涓婁紶鎺ュ彛锛屾浛鎹负浣犵殑鍚庣鎺ュ彛 + headers:{'token': localStorage.getItem('token')}, + accept: 'file', // 鍏佽涓婁紶鐨勬枃浠剁被鍨� + exts: 'xls|xlsx', // 鍏佽涓婁紶鐨勬枃浠跺悗缂� + done: function(res){ + // 涓婁紶瀹屾瘯鍥炶皟 + if(res.code === 200){ + layer.msg(res.msg); + console.log('鏂囦欢鏁版嵁:', res.data); + } else { + layer.msg(res.msg || '涓婁紶澶辫触'); + } + }, + error: function(){ + // 璇锋眰寮傚父鍥炶皟 + layer.msg('涓婁紶澶辫触锛岃閲嶈瘯'); + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 table.on('sort(locMast)', function (obj) { var searchData = {}; diff --git a/src/main/webapp/views/locMast/locMast.html b/src/main/webapp/views/locMast/locMast.html index 9323076..4b55ad9 100644 --- a/src/main/webapp/views/locMast/locMast.html +++ b/src/main/webapp/views/locMast/locMast.html @@ -90,6 +90,7 @@ <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button> <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button> <button class="layui-btn layui-btn-primary" id="btn-init" lay-event="init">鍒濆鍖�</button> +<!-- <button id="uploadExcel" class="layui-btn layui-btn-primary layui-btn-sm" >浜у搧鏍¢獙</button>--> <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button> </div> </script> -- Gitblit v1.9.1