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