diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java index a189e015..796601b9 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java @@ -120,6 +120,9 @@ public class ExcelServiceImpl implements ExcelService { double temp = threadSize - maxThreadSize; maxThreadSize = (int) (Math.ceil(temp / maxThreadSize) * maxThreadSize); } + if(maxThreadSize < threadSize){ + maxThreadSize = threadSize; + } // 定义开启线程数目 int openThreadSize = 0; @@ -237,10 +240,20 @@ public class ExcelServiceImpl implements ExcelService { // 定义线程数 int threadSize = (int) Math.ceil(totalVal / size); + // 定义最大线程数 + int maxThreadSize = Runtime.getRuntime().availableProcessors(); + if (threadSize > maxThreadSize) { + double temp = threadSize - maxThreadSize; + maxThreadSize = (int) (Math.ceil(temp / maxThreadSize) * maxThreadSize); + } + if(maxThreadSize < threadSize){ + maxThreadSize = threadSize; + } + // 定义开启线程数目 int openThreadSize = 0; // 开启对应数量的线程 - ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize)); + ExecutorService exs = new ThreadPoolExecutor(threadSize, maxThreadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(maxThreadSize)); // 线程结果集 List>> futureList = new ArrayList>>(); @@ -357,10 +370,20 @@ public class ExcelServiceImpl implements ExcelService { // 定义线程数 int threadSize = (int) Math.ceil(totalVal / size); + // 定义最大线程数 + int maxThreadSize = Runtime.getRuntime().availableProcessors(); + if (threadSize > maxThreadSize) { + double temp = threadSize - maxThreadSize; + maxThreadSize = (int) (Math.ceil(temp / maxThreadSize) * maxThreadSize); + } + if(maxThreadSize < threadSize){ + maxThreadSize = threadSize; + } + // 定义开启线程数目 int openThreadSize = 0; // 开启对应数量的线程 - ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize)); + ExecutorService exs = new ThreadPoolExecutor(threadSize, maxThreadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(maxThreadSize)); // 线程结果集 List>> futureList = new ArrayList>>(); @@ -405,8 +428,6 @@ public class ExcelServiceImpl implements ExcelService { // 关闭线程池 PublicConfig.closeThreadPool(exs); } - - List userExcelInventoryInfo = ExcelFileInfoPool.getUserExcelInventoryInfo(userByPort.getNumber()); if (userExcelInventoryInfo == null) { userExcelInventoryInfo = new ArrayList<>(); @@ -612,6 +633,7 @@ public class ExcelServiceImpl implements ExcelService { public void executeImportForInventory(UserByPort userByPort) { List success = new ArrayList<>(); String number = userByPort.getNumber(); + int successCount = 0; List excelVosForInventory = ExcelFileInfoPool.getUserExcelInventoryInfo(number); for (int i = 0; i < excelVosForInventory.size(); i++) { ExcelInfoByInventory excelInfoByInventory = excelVosForInventory.get(i); @@ -648,7 +670,7 @@ public class ExcelServiceImpl implements ExcelService { } // 插入库存记录 - materialService.insertInventoryForImport(insert); + successCount += materialService.insertInventoryForImport(insert); // 将该物料同时放入默认库位中 String placeCode = excelInfoByInventory.getDepositoryCode(); @@ -725,7 +747,7 @@ public class ExcelServiceImpl implements ExcelService { } } ExcelFileInfoPool.removeUserExcelInventoryInfo(number); - log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForInventory) + ";导入人员" + userByPort.getName() + ":" + userByPort.getNumber()); + log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForInventory) + ";导入人员" + userByPort.getName() + ":" + userByPort.getNumber()+";导入总数为:"+successCount); } @@ -738,6 +760,7 @@ public class ExcelServiceImpl implements ExcelService { List success = new ArrayList<>(); String number = userByPort.getNumber(); + int successNum = 0; List excelVosForMaterialType = ExcelFileInfoPool.getUserExcelMaterialTypeInfo(number); for (int i = 0; i < excelVosForMaterialType.size(); i++) { ExcelInfoByMT excelInfoByMT = excelVosForMaterialType.get(i); @@ -751,7 +774,7 @@ public class ExcelServiceImpl implements ExcelService { } else { insert.put("materialTypeId", info.getParentId()); } - materialTypeService.insertMaterialType(insert); + successNum+=materialTypeService.insertMaterialType(insert); success.add(info); if ((i + 1) % 100 == 0 || excelVosForMaterialType.size() - 1 == i) { // 如果凑够100条或者已经循环完成 发送消息 @@ -765,7 +788,7 @@ public class ExcelServiceImpl implements ExcelService { } ExcelFileInfoPool.removeUserExcelMaterialTypeInfo(number); - log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterialType) + ";导入人员" + userByPort.getName() + ":" + userByPort.getNumber()); + log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterialType) + ";导入人员" + userByPort.getName() + ":" + userByPort.getNumber()+";导入总数"+successNum); } @@ -776,6 +799,7 @@ public class ExcelServiceImpl implements ExcelService { List success = new ArrayList<>(); String number = userByPort.getNumber(); List excelVosForMaterial = ExcelFileInfoPool.getUserExcelMaterialInfo(number); + int successNum = 0; for (int i = 0; i < excelVosForMaterial.size(); i++) { ExcelInfoForMaterial excelVo = excelVosForMaterial.get(i); Map param = new HashMap<>(); @@ -811,7 +835,7 @@ public class ExcelServiceImpl implements ExcelService { param.put("brand", excelVo.getBrand()); param.put("price", excelVo.getPrice() == null ? "0" : excelVo.getPrice()); param.put("uid", userByPort.getId()); - materialService.insertMaterial(param); + successNum += materialService.insertMaterial(param); success.add(excelVo); if ((i + 1) % 100 == 0 || excelVosForMaterial.size() - 1 == i) { // 如果凑够100条或者已经循环完成 发送消息 @@ -824,7 +848,7 @@ public class ExcelServiceImpl implements ExcelService { } } ExcelFileInfoPool.removeUserExcelMaterialInfo(number); - log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterial) + ";导入人员" + userByPort.getName() + ":" + userByPort.getNumber()); + log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterial) + ";导入人员" + userByPort.getName() + ":" + userByPort.getNumber()+";导入总数"+successNum); } diff --git a/src/main/resources/templates/pages/depository/table-stock.html b/src/main/resources/templates/pages/depository/table-stock.html index 5148c096..43b7c860 100644 --- a/src/main/resources/templates/pages/depository/table-stock.html +++ b/src/main/resources/templates/pages/depository/table-stock.html @@ -564,11 +564,17 @@ //如果上传成功 if (res.code === 200) { var re = ""; + let errMsgNum = res.data.errMsg.length; + if (errMsgNum > 0) { + re += "

错误总数为:" + errMsgNum + "

"; + } for (let i = 0; i < res.data.errMsg.length; i++) { var show = "

" + res.data.errMsg[i] + "

"; re += show } - for (let i = 0; i < res.data.dataList.length; i++) { + let dataNum = res.data.dataList.length; + re += "

待导入数据总数为:" + dataNum + "

"; + for (let i = 0; i < dataNum; i++) { let dataListElement = res.data.dataList[i]; var code = dataListElement["code"] === null ? '' : dataListElement["code"]; var mname = dataListElement["mname"]; diff --git a/src/main/resources/templates/pages/material/material-out.html b/src/main/resources/templates/pages/material/material-out.html index 9dc9db78..d641b3f5 100644 --- a/src/main/resources/templates/pages/material/material-out.html +++ b/src/main/resources/templates/pages/material/material-out.html @@ -85,16 +85,21 @@ @@ -169,7 +174,7 @@ let cols = [ {type: "checkbox", width: 50}, - {field: 'mcode',title: '存货编码', width: 150, templet: '#materialCode'}, + {field: 'mcode', title: '存货编码', width: 150, templet: '#materialCode'}, {field: 'mname', width: 120, title: '物料名称', sort: false}, {field: 'typeName', width: 150, title: '物料种类'}, {field: 'version', width: 200, title: '规格型号', sort: false}, @@ -270,11 +275,17 @@ if (res.code === 200) { //如果上传成功 var re = ""; - for (let i = 0; i < res.data.errMsg.length; i++) { + let errMsgNum = res.data.errMsg.length; + if (errMsgNum > 0) { + re += "

错误总数为:" + errMsgNum + "

"; + } + for (let i = 0; i < errMsgNum; i++) { var show = "

" + res.data.errMsg[i] + ":错误" + "

"; re += show } - for (let i = 0; i < res.data.dataList.length; i++) { + let dataNum = res.data.dataList.length; + re += "

待导入数据总数为:" + dataNum + "

"; + for (let i = 0; i < dataNum; i++) { var mname = res.data.dataList[i]["mname"]; var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] === undefined ? "" : res.data.dataList[i]["code"]; var version = res.data.dataList[i]["version"] == null || res.data.dataList[i]["version"] === undefined ? "" : res.data.dataList[i]["version"]; @@ -287,7 +298,7 @@ if ("WebSocket" in window) { let number = $("#number").val(); - socket = new WebSocket('ws://127.0.0.1:11111/webSocket/'+number); + socket = new WebSocket('ws://127.0.0.1:11111/webSocket/' + number); switch (socket.readyState) { case WebSocket.CONNECTING: // 连接中 @@ -310,8 +321,8 @@ } socket.addEventListener('message', function (event) { layer.close(newIndexShade); - let shadeItem = '
'; - if ($("#"+"layui-layer-shade-x"+newIndexShade).length <= 0) { + let shadeItem = '
'; + if ($("#" + "layui-layer-shade-x" + newIndexShade).length <= 0) { $('body').append(shadeItem); } let jsonObject = JSON.parse(event.data); @@ -346,9 +357,15 @@ , moveType: 1 //拖拽模式,0或者1 , content: re , yes: function (index, layero) { - if(flagForImport){ + if (flagForImport) { flagForImport = false; - let loading2 = layer.open({ type: 3, shade: [0.25, '#000'], icon: 2, speed: 0,shadeClose:true}); + let loading2 = layer.open({ + type: 3, + shade: [0.25, '#000'], + icon: 2, + speed: 0, + shadeClose: true + }); //按钮【按钮一】的回调 $.ajax({ url: "/excel/realImportMaterial", @@ -359,13 +376,13 @@ success: function () { if (socket !== null) { socket.close(); - }else{ + } else { layer.close(index); } flagForImport = true; layer.alert("数据导入完成", { icon: 0 - },function (indexForMsg,layero) { + }, function (indexForMsg, layero) { layer.close(indexForMsg); layer.close(loading2); closeShowDataMessage(); @@ -417,10 +434,8 @@ } - - closeShowDataMessage = function () { - $("#layui-layer-shade-x"+newIndexShade).remove(); + $("#layui-layer-shade-x" + newIndexShade).remove(); $("#showImportData").hide(); $("#showDataContent").empty(); if (socket !== null) { @@ -478,8 +493,7 @@ $(window).on("resize", function () { layer.full(index); }); - } - else if (obj.event === 'delete') { // 监听删除操作 + } else if (obj.event === 'delete') { // 监听删除操作 var checkStatus = table.checkStatus('currentTableId') , data = checkStatus.data; var req = {}; @@ -524,8 +538,7 @@ layer.msg("未选中记录,请确认!"); return false; } - } - else if (obj.event === 'applicationIn') { + } else if (obj.event === 'applicationIn') { // 入库申请 var checkStatus = table.checkStatus('currentTableId') , data = checkStatus.data; @@ -533,7 +546,7 @@ req.mids = ""; // 获取所有选中的id for (let i = 0, len = data.length; i < len; i++) { - req.mids += (data[i].id+","); + req.mids += (data[i].id + ","); } req.type = "In"; $.ajax({ @@ -567,8 +580,7 @@ } }) - } - else if (obj.event === 'downloadFile') { + } else if (obj.event === 'downloadFile') { window.open("/download/materialImportDownload", "_self"); } }); @@ -678,7 +690,7 @@ //监听状态操作 form.on('switch(changeState)', function (obj) { let display = $("#display").val(); - if(display !== "none"){ + if (display !== "none") { var req = new Map; if (obj.elem.checked) { req["state"] = 1 diff --git a/src/main/resources/templates/pages/materialtype/materialType_view.html b/src/main/resources/templates/pages/materialtype/materialType_view.html index ed1e7aad..fea8bd91 100644 --- a/src/main/resources/templates/pages/materialtype/materialType_view.html +++ b/src/main/resources/templates/pages/materialtype/materialType_view.html @@ -273,12 +273,17 @@ //如果上传成功 if (res.code === 200) { var re = ""; + let errMsgNum = res.data.errMsg.length; + if (errMsgNum > 0) { + re += "

错误总数为:" + errMsgNum + "

"; + } for (let i = 0; i < res.data.errMsg.length; i++) { var show = "

" + res.data.errMsg[i] + ":错误" + "

"; re += show } - console.log(res.data.dataList.length); - for (let i = 0; i < res.data.dataList.length; i++) { + let dataNum = res.data.dataList.length; + re += "

待导入数据总数为:" + dataNum + "

"; + for (let i = 0; i < dataNum; i++) { var tname = res.data.dataList[i]["tname"]; var id = res.data.dataList[i]["oldId"]; var parentId = res.data.dataList[i]["parentId"] == null ? "" : res.data.dataList[i]["parentId"];