From 439dd3583f2ea745aa5e70ce26f3489d75c90912 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期四, 25 一月 2024 15:07:28 +0800
Subject: [PATCH] pla增加库位导入功能 货主档案增加导入导出功能 pla表头固定

---
 src/main/java/com/zy/asrs/utils/LocOwnerExcelListener.java   |   91 ++++++++++++++++++
 src/main/java/com/zy/asrs/utils/PlaExcelListener.java        |   13 ++
 src/main/java/com/zy/common/entity/LocOwnerExcel.java        |   10 ++
 src/main/webapp/static/js/locOwner/locOwner.js               |   60 +++++++++++
 src/main/webapp/views/locOwner/locOwner.html                 |   21 +++
 src/main/java/com/zy/asrs/entity/LocOwner.java               |    4 
 src/main/java/com/zy/asrs/entity/Pla.java                    |    2 
 src/main/java/com/zy/asrs/controller/LocOwnerController.java |   40 ++++++++
 8 files changed, 235 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/LocOwnerController.java b/src/main/java/com/zy/asrs/controller/LocOwnerController.java
index f9e9513..70390d1 100644
--- a/src/main/java/com/zy/asrs/controller/LocOwnerController.java
+++ b/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("璐т富妗f瀵煎叆妯℃澘", "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 = "璐т富妗f鏁版嵁瀵煎叆")
+    @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()+"鏉la鐗╂枡鏁版嵁");
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/entity/LocOwner.java b/src/main/java/com/zy/asrs/entity/LocOwner.java
index 35fc8ce..8eec555 100644
--- a/src/main/java/com/zy/asrs/entity/LocOwner.java
+++ b/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() {}
diff --git a/src/main/java/com/zy/asrs/entity/Pla.java b/src/main/java/com/zy/asrs/entity/Pla.java
index a8a0fa2..e3029ec 100644
--- a/src/main/java/com/zy/asrs/entity/Pla.java
+++ b/src/main/java/com/zy/asrs/entity/Pla.java
@@ -214,7 +214,7 @@
 
     //搴撲綅
     @TableField("loc_no")
-    //@ExcelProperty(value = "搴撲綅")
+    @ExcelProperty(value = "搴撲綅")
     private String locNo;
 
     //鐘舵��
diff --git a/src/main/java/com/zy/asrs/utils/LocOwnerExcelListener.java b/src/main/java/com/zy/asrs/utils/LocOwnerExcelListener.java
new file mode 100644
index 0000000..9978417
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/LocOwnerExcelListener.java
@@ -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;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/utils/PlaExcelListener.java b/src/main/java/com/zy/asrs/utils/PlaExcelListener.java
index 137d1a1..fae28c7 100644
--- a/src/main/java/com/zy/asrs/utils/PlaExcelListener.java
+++ b/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());
             }
diff --git a/src/main/java/com/zy/common/entity/LocOwnerExcel.java b/src/main/java/com/zy/common/entity/LocOwnerExcel.java
new file mode 100644
index 0000000..c4c184c
--- /dev/null
+++ b/src/main/java/com/zy/common/entity/LocOwnerExcel.java
@@ -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 {
+}
diff --git a/src/main/webapp/static/js/locOwner/locOwner.js b/src/main/webapp/static/js/locOwner/locOwner.js
index 517129f..6dd579a 100644
--- a/src/main/webapp/static/js/locOwner/locOwner.js
+++ b/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鏂瑰紡锛寀rl涓烘湇鍔″櫒璇锋眰鍦板潃锛宼rue 璇ュ弬鏁拌瀹氳姹傛槸鍚﹀紓姝ュ鐞嗐��
+        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});
+}
diff --git a/src/main/webapp/views/locOwner/locOwner.html b/src/main/webapp/views/locOwner/locOwner.html
index 3efea7b..62cd683 100644
--- a/src/main/webapp/views/locOwner/locOwner.html
+++ b/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">&emsp;
@@ -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">&nbsp;鏁版嵁鍚屾 <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>

--
Gitblit v1.9.1