3 changed files with 320 additions and 0 deletions
@ -0,0 +1,38 @@ |
|||||
|
package com.dreamchaser.depository_manage.utils; |
||||
|
|
||||
|
import java.util.Random; |
||||
|
import java.util.concurrent.*; |
||||
|
|
||||
|
public class AsyncThreadUtil { |
||||
|
|
||||
|
private ExecutorService executorService = Executors.newCachedThreadPool(); |
||||
|
|
||||
|
/** |
||||
|
* * 使用completionService收集callable结果 |
||||
|
* * @throws ExecutionException |
||||
|
* * @throws InterruptedException |
||||
|
* |
||||
|
*/ |
||||
|
public void completionServiceCount() throws InterruptedException, ExecutionException { |
||||
|
// 定义线程池
|
||||
|
|
||||
|
CompletionService completionService = new ExecutorCompletionService( |
||||
|
executorService); |
||||
|
int threadNum = 5; |
||||
|
executorService.shutdown(); |
||||
|
} |
||||
|
|
||||
|
public Callable<Integer> getTask(final int no) { |
||||
|
final Random rand = new Random(); |
||||
|
Callable<Integer> task = new Callable<Integer>() { |
||||
|
@Override |
||||
|
public Integer call() throws Exception { |
||||
|
int time = rand.nextInt(100) * 100; |
||||
|
System.out.println("thead:" + no + " time is:" + time); |
||||
|
Thread.sleep(time); |
||||
|
return no; |
||||
|
} |
||||
|
}; |
||||
|
return task; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,282 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en" xmlns:th="http://www.thymeleaf.org"> |
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<title>layui</title> |
||||
|
<meta name="renderer" content="webkit"> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> |
||||
|
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all"> |
||||
|
<link rel="stylesheet" href="/static/css/public.css" media="all"> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div class="layuimini-container"> |
||||
|
<div class="layuimini-main"> |
||||
|
|
||||
|
<!-- 状态展示--> |
||||
|
<input th:value="${mid}" style="display: none" id="mid"> |
||||
|
<input style="display: none" id="barCodeList"> |
||||
|
<script type="text/html" id="toolbarDemo"> |
||||
|
<div class="layui-btn-container"> |
||||
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加</button> |
||||
|
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除</button> |
||||
|
</div> |
||||
|
</script> |
||||
|
|
||||
|
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table> |
||||
|
|
||||
|
<script type="text/html" id="currentTableBar"> |
||||
|
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a> |
||||
|
</script> |
||||
|
</div> |
||||
|
</div> |
||||
|
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> |
||||
|
<script> |
||||
|
|
||||
|
var barCode = []; |
||||
|
function notice(){ |
||||
|
|
||||
|
}; |
||||
|
function addBarCodeByMid(){ |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
layui.use(['form', 'table','upload'], function () { |
||||
|
var $ = layui.jquery, |
||||
|
form = layui.form, |
||||
|
table = layui.table, |
||||
|
upload = layui.upload; |
||||
|
|
||||
|
var mid = $("#mid").val(); |
||||
|
table.render({ |
||||
|
elem: "#currentTableId", |
||||
|
url: '/material/findMaterialBarCode', |
||||
|
parseData: function (res) { //res 即为原始返回的数据 |
||||
|
return { |
||||
|
"status": res.status, //解析接口状态 |
||||
|
"message": res.statusInfo.message, //解析提示文本 |
||||
|
"count": res.count, //解析数据长度 |
||||
|
"data": res.data //解析数据列表 |
||||
|
}; |
||||
|
}, |
||||
|
request: { |
||||
|
pageName: 'page', //页码的参数名称,默认:page |
||||
|
limitName: 'size' //每页数据量的参数名,默认:limit |
||||
|
}, |
||||
|
where: { |
||||
|
mid:mid |
||||
|
}, |
||||
|
response: { |
||||
|
statusName: 'status' //规定数据状态的字段名称,默认:code |
||||
|
,statusCode: 200 //规定成功的状态码,默认:0 |
||||
|
,msgName: 'message' //规定状态信息的字段名称,默认:msg |
||||
|
,countName: 'count' //规定数据总数的字段名称,默认:count |
||||
|
,dataName: 'data' //规定数据列表的字段名称,默认:data |
||||
|
}, |
||||
|
toolbar: '#toolbarDemo', |
||||
|
defaultToolbar: ['filter', 'exports', 'print'], |
||||
|
cols: [ [ |
||||
|
{type: "checkbox", width: 50}, |
||||
|
{field: 'id',width:50,title:'id'}, |
||||
|
{field: 'mcode',width: 150,title: '存货编码',sort: true}, |
||||
|
{field: 'bmcode',width: 150,title: '条形码',sort: true}, |
||||
|
{field: 'mname', width: 120, title: '物料名称', sort: false}, |
||||
|
{field: 'version',width: 200,title: '规格型号',sort: false}, |
||||
|
{field: 'texture',width: 100,title: '材质'}, |
||||
|
{field: 'unit',width: 150,title: '计量单位'}, |
||||
|
{title: '操作', minWidth: 200, toolbar: '#currentTableBar', align: "center"} |
||||
|
]], |
||||
|
limits: [10, 15, 20, 25, 50], |
||||
|
limit: 10, |
||||
|
page: true, |
||||
|
skin: 'line', |
||||
|
done:function () { |
||||
|
$("[data-field='id']").css('display','none'); |
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
//监听表格复选框选择 |
||||
|
table.on('checkbox(currentTableFilter)', function (obj) { |
||||
|
console.log(obj) |
||||
|
}); |
||||
|
|
||||
|
// 用于添加关联 |
||||
|
addBarCodeByMid = function(){ |
||||
|
var mid = $("#mid").val(); |
||||
|
var req = {}; |
||||
|
req.mid = mid; |
||||
|
req.barCodeList = barCode ; |
||||
|
$.ajax({ |
||||
|
url:"/material/addBarCodeByMaterial", |
||||
|
type:"post", |
||||
|
data:JSON.stringify(req), |
||||
|
dataType:"json", |
||||
|
contentType: "application/json;charset=utf-8", |
||||
|
success:function (d) { |
||||
|
table.reload('currentTableId', { |
||||
|
url: '/material/findMaterialBarCode', |
||||
|
page: { |
||||
|
curr: 1 |
||||
|
}, |
||||
|
where:{"mid":mid} |
||||
|
}); |
||||
|
} |
||||
|
}) |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
notice = function(obj){ |
||||
|
//用于弹出扫码的结果 |
||||
|
var context = "<div style='padding: 50px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;'><ul>"; |
||||
|
for (let i = 0; i < obj.length; i++) { |
||||
|
context += "<li>"+obj[i]+"</li>"; |
||||
|
} |
||||
|
context += "</ul></div>"; |
||||
|
layer.open({ |
||||
|
type: 1 |
||||
|
,title: false //不显示标题栏 |
||||
|
,closeBtn: false |
||||
|
,area: '300px;' |
||||
|
,shade: 0.8 |
||||
|
,id: 'LAY_layuipro' //设定一个id,防止重复弹出 |
||||
|
,btn: ['确定', '取消'] |
||||
|
,btnAlign: 'c' |
||||
|
,moveType: 1 //拖拽模式,0或者1 |
||||
|
,content: context |
||||
|
,success: function(layero){ |
||||
|
var btn = layero.find('.layui-layer-btn'); |
||||
|
btn.find('.layui-layer-btn0').attr({ |
||||
|
onclick:"addBarCodeByMid()" |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* toolbar监听事件 |
||||
|
*/ |
||||
|
table.on('toolbar(currentTableFilter)', function (obj) { |
||||
|
if (obj.event === 'add') { // 监听添加操作 |
||||
|
layer.open({ |
||||
|
type: 2, |
||||
|
title: '扫码', |
||||
|
skin: 'layui-layer-rim', |
||||
|
maxmin: true, |
||||
|
shadeClose: true, //点击遮罩关闭层 |
||||
|
area: ['100%', '100%'], |
||||
|
move: '.layui-layer-title', |
||||
|
fixed: false, |
||||
|
content: '/scanBarCodeByNew', |
||||
|
end: function () { |
||||
|
var barCodeList = $("#barCodeList").val(); |
||||
|
// 根据&符合分割字符串并删除空 |
||||
|
var strings = barCodeList.split(","); |
||||
|
strings = strings.filter(item => item && item.trim()); |
||||
|
barCode = strings; |
||||
|
notice(strings); |
||||
|
table.reload('currentTableId', { |
||||
|
url: '/material/findMaterialBarCode', |
||||
|
page: { |
||||
|
curr: 1 |
||||
|
}, |
||||
|
where:{"mid":mid} |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
$(window).on("resize", function () { |
||||
|
layer.full(index); |
||||
|
}); |
||||
|
} |
||||
|
else if(obj.event === 'delete'){ |
||||
|
var checkStatus = table.checkStatus('currentTableId') |
||||
|
, data = checkStatus.data; |
||||
|
var req={}; |
||||
|
req.ids=[]; |
||||
|
for (i=0,len=data.length;i<len;i++){ |
||||
|
req.ids[i]=data[i].id; |
||||
|
} |
||||
|
if(req.ids.length > 0){ |
||||
|
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { |
||||
|
$.ajax({ |
||||
|
url: '/material/delBarCodeByMaterial', |
||||
|
dataType: 'json', |
||||
|
type: 'POST', |
||||
|
contentType: "application/json;charset=utf-8", |
||||
|
data: JSON.stringify(req), |
||||
|
beforeSend: function () { |
||||
|
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); |
||||
|
}, |
||||
|
success:function(data){ |
||||
|
layer.close(this.layerIndex); |
||||
|
if(data.status >= 300){ |
||||
|
layer.msg(data.statusInfo.message);//失败的表情 |
||||
|
return; |
||||
|
}else{ |
||||
|
layer.msg("删除成功", { |
||||
|
icon: 6,//成功的表情 |
||||
|
time: 500 //1秒关闭(如果不配置,默认是3秒) |
||||
|
}); |
||||
|
//执行搜索重载 |
||||
|
table.reload('currentTableId', { |
||||
|
url: '/material/findMaterialBarCode', |
||||
|
page: { |
||||
|
curr: 1 |
||||
|
}, |
||||
|
where:{"mid":mid} |
||||
|
}); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
}else{ |
||||
|
layer.msg("未选中记录,请确认!"); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
table.on('tool(currentTableFilter)', function (obj) { |
||||
|
let data = obj.data; |
||||
|
|
||||
|
if (obj.event === 'delete') { |
||||
|
var req={}; |
||||
|
req.id=data.id; |
||||
|
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { |
||||
|
$.ajax({ |
||||
|
url: '/material/delBarCodeByMaterial', |
||||
|
dataType:'json', |
||||
|
type:'POST', |
||||
|
contentType: "application/json;charset=utf-8", |
||||
|
data:JSON.stringify(req), |
||||
|
beforeSend:function () { |
||||
|
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); |
||||
|
}, |
||||
|
success:function(data){ |
||||
|
layer.close(this.layerIndex); |
||||
|
if(data.status >= 300){ |
||||
|
layer.msg(data.statusInfo.message);//失败的表情 |
||||
|
return; |
||||
|
}else{ |
||||
|
obj.del(); |
||||
|
layer.msg("删除成功", { |
||||
|
icon: 6,//成功的表情 |
||||
|
time: 500 //1秒关闭(如果不配置,默认是3秒) |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
}); |
||||
|
</script> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
||||
Loading…
Reference in new issue