From ae674442480bf1126dbfa430b246cd9a706666cc Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 28 四月 2023 13:11:06 +0800
Subject: [PATCH] 商品档案数据导出和新商品编号同步

---
 src/main/java/com/zy/asrs/utils/MatExcel2Listener.java     |   79 +++++++++++++++++++
 src/main/webapp/static/js/mat/mat.js                       |   71 +++++++++++++++++
 src/main/java/com/zy/asrs/mapper/MatMapper.java            |    2 
 src/main/resources/mapper/MatMapper.xml                    |   15 +++
 src/main/webapp/views/mat/mat.html                         |    7 +
 src/main/java/com/zy/asrs/entity/Mat.java                  |    9 ++
 src/main/java/com/zy/asrs/controller/MatController.java    |   30 +++++++
 src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java |    7 +
 src/main/java/com/zy/asrs/service/MatService.java          |    4 +
 9 files changed, 219 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MatController.java b/src/main/java/com/zy/asrs/controller/MatController.java
index 876df56..0a2cf10 100644
--- a/src/main/java/com/zy/asrs/controller/MatController.java
+++ b/src/main/java/com/zy/asrs/controller/MatController.java
@@ -17,6 +17,7 @@
 import com.zy.asrs.entity.result.KeyValueVo;
 import com.zy.asrs.service.LocDetlService;
 import com.zy.asrs.service.MatService;
+import com.zy.asrs.utils.MatExcel2Listener;
 import com.zy.asrs.utils.MatExcelListener;
 import com.zy.common.CodeRes;
 import com.zy.common.config.AdminInterceptor;
@@ -33,6 +34,8 @@
 import javax.servlet.http.HttpServletResponse;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.*;
 
@@ -153,8 +156,8 @@
         return R.ok();
     }
 
-	@RequestMapping(value = "/mat/update/auth")
-	@ManagerAuth
+    @RequestMapping(value = "/mat/update/auth")
+    @ManagerAuth
     public R update(Mat mat){
         if (Cools.isEmpty(mat) || null==mat.getId()){
             return R.error();
@@ -309,6 +312,29 @@
         return R.ok("鎴愬姛鍚屾"+listener.getTotal()+"鏉″晢鍝佹暟鎹�");
     }
 
+    // 鏂板晢鍝佺紪鍙峰悓姝�
+    @PostMapping(value = "/mat/excel/importNewMatnr/auth")
+    @ManagerAuth(memo = "鏂板晢鍝佺紪鍙峰悓姝�")
+    @Transactional
+    public R matExcelImportNewMatnr(MultipartFile file) throws IOException {
+        MatExcel2Listener listener = new MatExcel2Listener(getUserId());
+        EasyExcel.read(file.getInputStream(), MatExcel.class, listener).sheet().doRead();
+        return R.ok("鎴愬姛鍚屾"+listener.getTotal()+"鏉″晢鍝佹暟鎹�");
+    }
+
+    @RequestMapping(value = "/mat/excel/export/auth")
+    @ManagerAuth(memo = "鍟嗗搧妗f鏁版嵁瀵煎嚭")
+    @Transactional
+    public void matExcelExport(@RequestParam Map<String, Object> param, HttpServletResponse response) throws IOException {
+        List<Mat> data = matService.exportData(param.get("matnr"), param.get("maktx"), param.get("specs"));
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+        String fileName = URLEncoder.encode("娴嬭瘯", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), Mat.class).sheet("妯℃澘").doWrite(data);
+    }
+
     /*************************************** xm-select ***********************************************/
 
     // xm-select 鎼滅储鍟嗗搧鍒楄〃
diff --git a/src/main/java/com/zy/asrs/entity/Mat.java b/src/main/java/com/zy/asrs/entity/Mat.java
index 420a5f5..0e6d939 100644
--- a/src/main/java/com/zy/asrs/entity/Mat.java
+++ b/src/main/java/com/zy/asrs/entity/Mat.java
@@ -59,9 +59,16 @@
      * 鍟嗗搧缂栧彿
      */
     @ApiModelProperty(value= "鍟嗗搧缂栧彿")
-    @ExcelProperty(value = "鍟嗗搧缂栫爜")
+    @ExcelProperty(value = "鍟嗗搧缂栧彿")
     private String matnr;
 
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鏂板晢鍝佺紪鍙�")
+    @ExcelProperty(value = "鏂板晢鍝佺紪鍙�")
+    private String matnrNew;
+
 
     /**
      * 鍟嗗搧鍚嶇О
diff --git a/src/main/java/com/zy/asrs/mapper/MatMapper.java b/src/main/java/com/zy/asrs/mapper/MatMapper.java
index d37ee63..a8a3a04 100644
--- a/src/main/java/com/zy/asrs/mapper/MatMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/MatMapper.java
@@ -17,4 +17,6 @@
 
     Mat selectByMatnr(@Param("matnr")String matnr);
 
+    List<Mat> exportData(Object matnr, Object maktx, Object specs);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/MatService.java b/src/main/java/com/zy/asrs/service/MatService.java
index 6e5e119..d17d198 100644
--- a/src/main/java/com/zy/asrs/service/MatService.java
+++ b/src/main/java/com/zy/asrs/service/MatService.java
@@ -4,10 +4,14 @@
 import com.baomidou.mybatisplus.service.IService;
 import com.zy.asrs.entity.Mat;
 
+import java.util.List;
+
 public interface MatService extends IService<Mat> {
 
     Page<Mat> getPage(Page page, String tagId, Object matnr, Object maktx, Object specs);
 
     Mat selectByMatnr(String matnr);
 
+    List<Mat> exportData(Object matnr, Object maktx, Object specs);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
index e86dce8..f8a5781 100644
--- a/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
@@ -7,6 +7,8 @@
 import com.zy.asrs.mapper.MatMapper;
 import com.zy.asrs.service.MatService;
 
+import java.util.List;
+
 @Service("matService")
 public class MatServiceImpl extends ServiceImpl<MatMapper, Mat> implements MatService {
 
@@ -21,5 +23,8 @@
         return this.baseMapper.selectByMatnr(matnr);
     }
 
-
+    @Override
+    public List<Mat> exportData(Object matnr, Object maktx, Object specs) {
+        return this.baseMapper.exportData(matnr, maktx, specs);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/utils/MatExcel2Listener.java b/src/main/java/com/zy/asrs/utils/MatExcel2Listener.java
new file mode 100644
index 0000000..79f8f29
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/MatExcel2Listener.java
@@ -0,0 +1,79 @@
+package com.zy.asrs.utils;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.Mat;
+import com.zy.asrs.entity.Tag;
+import com.zy.asrs.mapper.TagMapper;
+import com.zy.asrs.service.MatService;
+import com.zy.asrs.service.TagService;
+import com.zy.common.entity.MatExcel;
+import com.zy.common.utils.NodeUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+public class MatExcel2Listener extends AnalysisEventListener<MatExcel> {
+    private int total = 0;
+    private Long userId;
+
+    public MatExcel2Listener() {
+    }
+
+    public MatExcel2Listener(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(MatExcel excel, AnalysisContext ctx) {
+        MatService matService = SpringUtils.getBean(MatService.class);
+        Date now = new Date();
+        // 鍟嗗搧
+        Mat mat = matService.selectByMatnr(excel.getMatnr());
+        if (mat != null) {
+            mat.setMatnrNew(excel.getMatnrNew());
+            mat.setUpdateBy(this.userId);
+            mat.setUpdateTime(now);
+            if (matService.updateById(mat)) {
+                total++;
+            }
+        }
+    }
+
+    /**
+     * 鎵�鏈夋暟鎹В鏋愬畬鎴愪簡璋冪敤
+     * 閫傚悎浜嬪姟
+     */
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext ctx) {
+        log.info("鍚屾{}鏉$墿鏂欎俊鎭紒", total);
+    }
+
+    public int getTotal() {
+        return total;
+    }
+}
diff --git a/src/main/resources/mapper/MatMapper.xml b/src/main/resources/mapper/MatMapper.xml
index 5cffd06..8f6125d 100644
--- a/src/main/resources/mapper/MatMapper.xml
+++ b/src/main/resources/mapper/MatMapper.xml
@@ -8,6 +8,7 @@
         <result column="uuid" property="uuid" />
         <result column="tag_id" property="tagId" />
         <result column="matnr" property="matnr" />
+        <result column="matnr_new" property="matnrNew" />
         <result column="maktx" property="maktx" />
         <result column="name" property="name" />
         <result column="specs" property="specs" />
@@ -80,4 +81,18 @@
     <select id="selectByMatnr" resultMap="BaseResultMap">
         select top 1 * from man_mat where 1=1 and matnr = #{matnr}
     </select>
+
+    <select id="exportData" resultMap="BaseResultMap">
+        select * from man_mat
+        where 1=1
+        <if test="matnr != null and matnr != ''">
+            and matnr like '%' + #{matnr} + '%'
+        </if>
+        <if test="maktx != null and maktx != ''">
+            and maktx like '%' + #{maktx} + '%'
+        </if>
+        <if test="specs != null and specs != ''">
+            and specs like '%' + #{specs} + '%'
+        </if>
+    </select>
 </mapper>
diff --git a/src/main/webapp/static/js/mat/mat.js b/src/main/webapp/static/js/mat/mat.js
index ecf879f..7d814a0 100644
--- a/src/main/webapp/static/js/mat/mat.js
+++ b/src/main/webapp/static/js/mat/mat.js
@@ -5,6 +5,7 @@
     var cols = [
         {type: 'checkbox'}
         ,{field: 'tagId$', align: 'center',title: '褰掔被', templet: '#tagTpl'}
+        ,{field: 'matnrNew', align: 'center',title: '鏂板晢鍝佺紪鍙�', width: 180}
     ];
     cols.push.apply(cols, matCols);
     cols.push(
@@ -433,9 +434,79 @@
 
 // excel瀵煎嚭
 function exportExcel() {
+    // window.location.href = baseUrl + "/mat/excel/export/auth"
+    const url = baseUrl + "/mat/excel/export/auth"; //璁板緱鎷兼帴鍙傛暟
+    const xhr = new XMLHttpRequest();
 
+    var params = '';
+    $.each($('#search-box [name]').serializeArray(), function() {
+        params += this.name + '=' + this.value + '&';
+    });
+    params = params.substring(0, params.length - 1);
+
+    xhr.open('POST', url, true);
+    xhr.setRequestHeader('token', localStorage.getItem('token'));
+    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+    xhr.responseType = 'blob'; // 杩斿洖绫诲瀷blob
+    xhr.onload = function(e) {
+        if (this.status === 200) {
+            const blob = this.response;
+            const reader = new FileReader();
+            reader.readAsDataURL(blob); // 杞崲涓篵ase64锛屽彲浠ョ洿鎺ユ斁鍏琛ㄦ儏href
+            reader.onload = function(e) {
+                const a = document.createElement('a');
+                a.download = new Date().getTime() + '_export_data.xlsx';
+                a.href = e.target.result;
+                document.documentElement.appendChild(a);
+                a.click();
+                a.remove(); // 绛変环浜巇ocument.documentElement.removeChild(a);
+            };
+        }
+    };
+    xhr.send(params); // 鍙戦�乤jax璇锋眰
 }
 
+// 鍚屾鏂板晢鍝佺紪鍙�
+function importNewMatnr() {
+    $("#importNewMatnr").trigger("click");
+}
+function uploadNewMatnr(obj){
+    if(!obj.files) {
+        return;
+    }
+    var file = obj.files[0];
+    var filename = file.name
+    var filenameArr = filename.split(".")
+    var filetype = filenameArr[filenameArr.length - 1] //鏂囦欢绫诲瀷
+    if (filetype != "xlsx") {
+        layer.msg("璇蜂笂浼爔lsx鏍煎紡鏂囦欢");
+        return;
+    }
+
+    admin.confirm('纭鍚屾 [' + file.name +'] 鏂囦欢鍚楋紵', function (index) {
+        layer.load(1, {shade: [0.1,'#fff']});
+        var url = baseUrl + "/mat/excel/importNewMatnr/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 tableReload(child) {
     var searchData = {};
diff --git a/src/main/webapp/views/mat/mat.html b/src/main/webapp/views/mat/mat.html
index 31b2fda..95a3eb8 100644
--- a/src/main/webapp/views/mat/mat.html
+++ b/src/main/webapp/views/mat/mat.html
@@ -137,9 +137,14 @@
                 <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>
+                <li><a onclick="importNewMatnr()" style="font-size: 12px"><i class="layui-icon layui-icon-upload"></i>鍚屾鏂板晢鍝佺紪鍙�</a></li>
+                <li style="display: none"><input id="importNewMatnr" type="file" onchange="uploadNewMatnr(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>
+                <li>
+                    <a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>瀵煎嚭 Excel</a>
+                    <a href="#" id="downloadLink" style="display: none;"></a>
+                </li>
             </ul>
         </div>
 <!--        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right;margin-right: -10px">瀵煎嚭</button>-->

--
Gitblit v1.9.1