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