Commit 20e745be sunke

分盘/紧急/包装料按生成时间顺序进行出库

1 个父辈 8d7175e0
...@@ -126,12 +126,7 @@ public class QisdaApiController extends BaseController { ...@@ -126,12 +126,7 @@ public class QisdaApiController extends BaseController {
return "系统更新中,暂停出库,请稍后再试"; return "系统更新中,暂停出库,请稍后再试";
} }
String hSerial = request.getParameter("hSerial"); String hSerial = request.getParameter("hSerial");
String maxReelStr = request.getParameter("max"); return checkOutOutItems(hSerial);
int maxReelNum = -1;
if(maxReelStr != null){
maxReelNum = Integer.valueOf(maxReelStr);
}
return checkOutOutItems(hSerial,maxReelNum);
} }
/** /**
...@@ -1357,7 +1352,7 @@ public class QisdaApiController extends BaseController { ...@@ -1357,7 +1352,7 @@ public class QisdaApiController extends BaseController {
return tasks; return tasks;
} }
private String checkOutOutItems(String hSerial, int maxReelNum){ private String checkOutOutItems(String hSerial){
log.info("执行需求单["+hSerial+"]出库"); log.info("执行需求单["+hSerial+"]出库");
OutInfo outInfo = outInfoDao.findByHSerial(hSerial); OutInfo outInfo = outInfoDao.findByHSerial(hSerial);
if(outInfo == null){ if(outInfo == null){
...@@ -1430,12 +1425,6 @@ public class QisdaApiController extends BaseController { ...@@ -1430,12 +1425,6 @@ public class QisdaApiController extends BaseController {
} }
} }
outInfoCache.updateOutItem(outItem.getId()); outInfoCache.updateOutItem(outItem.getId());
if(maxReelNum != -1){
if(tasks.size() >= maxReelNum){
log.info("限制料盘数为:"+maxReelNum);
break;
}
}
} }
......
...@@ -916,16 +916,21 @@ public class TaskService implements ITaskService { ...@@ -916,16 +916,21 @@ public class TaskService implements ITaskService {
//if(DataCache.isProductionFor(DataCache.CUSTOMER.QISDA)){ //if(DataCache.isProductionFor(DataCache.CUSTOMER.QISDA)){
//分盘料 //分盘料,按时间顺序进行出库
for (DataLog task : waitTasks) { DataLog urgentTask = null;
if(cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) { for (DataLog task : waitTasks) {
//需要分盘的料,且不是包装料,统一都放到料串上,可以先出 if(cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) {
if(task.isCutReel() || task.isUrgentReel()){ //分盘料,紧急料和包装料,可以按时间顺序先出
log.info("出库分盘/紧急料任务"+task.getBarcode()+"["+task.getPosName()+"]"); if(task.isCutReel() || task.isUrgentReel() || task.isPackageReel()){
return task; if(urgentTask == null || urgentTask.getCreateDate().after(task.getCreateDate())){
urgentTask = task;
} }
} }
} }
}
if(urgentTask != null){
log.info("出库最先生成的分盘/紧急/包装料任务"+urgentTask.getBarcode()+"["+urgentTask.getPosName()+"]");
}
//按料架顺序,从小盘开始出库 //按料架顺序,从小盘开始出库
boolean hasFirstReelAction = false; boolean hasFirstReelAction = false;
......
...@@ -144,11 +144,10 @@ ...@@ -144,11 +144,10 @@
<div class="bg-primary kabanTitle col-md-12"> <div class="bg-primary kabanTitle col-md-12">
<%--<span><fmt:message key="allBoxView.kanban"/></span>--%> <%--<span><fmt:message key="allBoxView.kanban"/></span>--%>
<%--<span style="margin-left: 40px;" id="storageTotalPos">总容量:1000</span>--%> <%--<span style="margin-left: 40px;" id="storageTotalPos">总容量:1000</span>--%>
<%--<div class="col-md-3">--%> <div class="col-md-2">
<%--<button class="btn yellow outBtn" id="outPn"><i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>--%> <button class="btn yellow outBtn" id="viewTotal"><i class="fa fa-sign-out"></i><fmt:message key="查看统计"/></button>
<%--<button class="btn yellow outBtn" id="outOrder"><i class="fa fa-sign-out"></i><fmt:message key="工单出库"/></button>--%> </div>
<%--</div>--%> <div class="col-md-10">
<div class="col-md-">
<div id="lineMsg"></div> <div id="lineMsg"></div>
</div> </div>
</div> </div>
...@@ -255,20 +254,17 @@ ...@@ -255,20 +254,17 @@
</div> </div>
</div> </div>
<div id="orders" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false"> <div id="allUsage" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:80%;margin-left:10%;z-index:20000;"> <div class="modal-dialog" style="margin-top: 10%;width:80%;margin-left:10%;z-index:20000;">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title" id="orderNo">工单出库</h4> <h4 class="modal-title" id="orderNo">使用率</h4>
<input type="text" class="form-control filterInput" id="searchOrderNo"/>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="row theItems" id="orderList"> <div class="row theItems" id="usageList">
<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3">
<div class="bg-blue-madison partnumber-box">xxx</div>
</div>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
...@@ -278,54 +274,7 @@ ...@@ -278,54 +274,7 @@
</div> </div>
</div> </div>
<div id="orderDetail" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:80%;margin-left:10%;">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title" style="margin:10px;">
<span id="orderDetailTitle">&nbsp</span>
<span class="right" style="margin-right: 40px;">
<button class="btn yellow" onclick="outLiteOrder(true)"><i class="fa fa-sign-out"></i>套料出库</button>
<button class="btn yellow" onclick="outLiteOrder(false)"><i class="fa fa-sign-out"></i>尾料出库</button>
</span>
</h4>
<input type="text" class="form-control filterInput" id="searchOrderItemPn"/>
</div>
<div class="modal-body">
<table class="table table-striped table-hover" id="orderItemsTable">
<thead>
<tr>
<th>
#
</th>
<th>
<fmt:message key="barcode.partNumber"/>
</th>
<th>
<fmt:message key="位置"/>
</th>
<th>
<fmt:message key="数量"/>
</th>
<th>
<fmt:message key="库存"/>
</th>
<th>
<fmt:message key="操作"/>
</th>
</tr>
</thead>
<tbody class="theItems">
</tbody>
</table>
</div>
<div class="modal-footer">
<%--<button type="button" data-dismiss="modal" class="btn default" id="cancelAuthBtn">取消</button>--%>
</div>
</div>
</div>
</div>
<div id="modifyNum" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false"> <div id="modifyNum" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="width: 800px; margin-top: 10%;"> <div class="modal-dialog" style="width: 800px; margin-top: 10%;">
...@@ -407,130 +356,35 @@ ...@@ -407,130 +356,35 @@
var bgColors = ["bg-blue-madison","bg-green-haze","bg-purple-plum","bg-red-intense","bg-green","bg-yellow","bg-blue","bg-red","bg-purple","bg-blue-ebonyclay","bg-red-sunglo","bg-yellow-crusta"]; var bgColors = ["bg-blue-madison","bg-green-haze","bg-purple-plum","bg-red-intense","bg-green","bg-yellow","bg-blue","bg-red","bg-purple","bg-blue-ebonyclay","bg-red-sunglo","bg-yellow-crusta"];
$("#outOrder").click(function(){ $("#viewTotal").click(function(){
$(".filterInput").val("");
$.post("${ctx}/service/store/liteOrders", {}, function (data) {
var orderList = data;
var itemStr = "";
for(var index in orderList){
var orderNo = orderList[index].orderNo;
itemStr = itemStr + "<div class='col-lg-3 col-md-3 col-sm-6 col-xs-12' onclick='showOrderDetail(\""+orderNo+"\");'> " +
"<div class='"+bgColors[index%bgColors.length]+" partnumber-box'>"+orderNo+"</div></div>";
}
if(itemStr == ""){
itemStr = "<div style='font-size: 20px;text-align: center;'>${noReel_label}</div>";
}
$(".theItems").html(itemStr);
});
$("#orders").modal("show");
});
$('#orderItemsTable').dataTable( {
"searching": false,
"info": false,
paging: false,
"order": [[ 3, "asc" ]]
} );
showOrderDetail = function(orderNo){
$("#orders").modal("hide");
$(".filterInput").val("");
$("#orderDetailTitle").html(orderNo);
$.post("${ctx}/service/store/orderDetail", {orderNo: orderNo}, function (order) {
var itemHtml = "";
var data = order.orderItems;
var table = $('#orderItemsTable').DataTable();
table.clear();
for(var i in data){
var opStr = '<button class="btn yellow" onclick="checkoutByPartNumber(\''+data[i].pn+'\',\''+data[i].id+'\');"><i class="fa fa-sign-out"></i>补料</button>';
if(data[i].inventoryNum <= 0){
opStr = "";
}
table.row.add( [ i, data[i].pn, data[i].feederInfo,data[i].outNum+"/"+data[i].needNum,data[i].inventoryNum,opStr] );
}
table.order( [ 3, 'asc' ] ).draw();
});
$("#orderDetail").modal("show");
}
$(".filterInput").on('input propertychange',function(){
var searchStr = $(this).val();
$(".theItems").children().each(function(){
if(!searchStr || $(this).text().indexOf(searchStr) >= 0){
$(this).show();
}else{
$(this).hide();
}
});
});
var pnList = []; var sizeList = new Array();
$("#outPn").click(function(){ for(var sizeStr in totalSizeData){
$("#searchPn").val(""); var newSizeItem = totalSizeData[sizeStr];
var findAndOutHref = '${ctx}/component/storagePosFind.html'; sizeList.push(newSizeItem);
$("#findAndOut").attr("href",findAndOutHref);
var modalTitle = "${title_checkout}";
$("#modal-title").text(modalTitle);
$.post("${ctx}/service/store/storageTypeInventory", {cid: '${cids}'}, function (data) {
pnList = data;
showpnList();
});
});
showpnList = function(pnForSearch){
var itemStr = "";
for(var index in pnList){
var pn = pnList[index].partNumber;
if(!pnForSearch || pn.indexOf(pnForSearch) >= 0){
itemStr = itemStr + "<div class='col-lg-3 col-md-3 col-sm-6 col-xs-12' onclick='checkoutByPartNumber(\""+pn+"\");'> " +
"<div class='"+bgColors[index%bgColors.length]+" partnumber-box'>"+pn+"</div></div>";
}
} }
if(itemStr == ""){ sizeList.sort(function(a,b){
itemStr = "<div style='font-size: 20px;text-align: center;'>${noReel_label}</div>"; var w1 = a.w,w2 = b.w;
} if(w1 === w2){
$("#partNumberItems").html(itemStr); return a.h - b.h;
$("#allPartNumbers").modal("show");
}
$("#searchPn").on('input propertychange',function(){
var itemStr = "";
var pnForSearch = $("#searchPn").val();
if(pnForSearch == ""){
showpnList();
}
$.post("${ctx}/service/store/resolveBarcode", {code: pnForSearch}, function (data) {
var thePn = pnForSearch;
if (data.error == null) {
thePn = data.barcode.partNumber;
} }
showpnList(thePn); return w1 - w2;
}); });
var trHtml = "";
for(var sizeStr in sizeList){
var sizeItem = sizeList[sizeStr];
var tr = "<tr>" +
"<td>"+sizeItem.w + " x " + sizeItem.h +"</td>" +
"<td>"+sizeItem.usedCount+"</td>" +
"<td>"+sizeItem.totalCount+"</td>" +
"</tr>";
trHtml = trHtml + tr;
}
var html = "<table class='table table-striped table-bordered table-hover'><thead><th>尺寸</th><th>已使用</th><th>总数量</th></thead>"+trHtml+"</table>"
$("#usageList").html(html);
$("#allUsage").modal("show");
}); });
checkoutByPartNumber = function(partnumber, subSourceId) {
$.post("${ctx}/service/store/checkout.html", {pn: partnumber, subSourceId: subSourceId}, function (data) {
$("#allPartNumbers").modal("hide");
showMsg(data);
waitting();
});
}
outLiteOrder = function(outBom){
var orderNo = $("#orderDetailTitle").text();
$.post("${ctx}/service/store/outLiteOrder.html", {orderNo: orderNo, outBom: outBom}, function (data) {
showMsg(data);
waitting();
});
}
waitting = function(){ waitting = function(){
...@@ -593,34 +447,7 @@ ...@@ -593,34 +447,7 @@
}; };
//修改数量
modifyClick = function(win){
$("#reelCode").text(win.$options["barcode"]);
$("#reelNum").val(win.$options["num"]);
window.setTimeout(function() {
$("#reelNum")[0].focus();
$("#reelNum").select();
}, 500);
$("#modifyNum").modal("show");
}
$('#reelNum').keydown(function(e){
if(e.keyCode==13){
$('#confirmNumBtn').click();
}
});
$("#confirmNumBtn").click(function(){
var code = $("#reelCode").text();
var num = $("#reelNum").val();
$.post("${ctx}/service/store/modifyReelNum", {code: code, num: num}, function (data) {
if (data) {
showMsg(data);
}else{
$("#modifyNum").modal("hide");
}
});
});
var allTasks = {}; var allTasks = {};
function updateTasks(){ function updateTasks(){
...@@ -657,7 +484,7 @@ ...@@ -657,7 +484,7 @@
options['icon']='fa fa-sign-out'; options['icon']='fa fa-sign-out';
showStr = partNumber + "["+barcode+"]${out_label}"+posStr; showStr = partNumber + "["+barcode+"]${out_label}"+posStr;
}else{ }else{
options['onClick']= modifyClick; //options['onClick']= modifyClick;
} }
...@@ -759,16 +586,27 @@ ...@@ -759,16 +586,27 @@
} }
var totalSizeData = {};
//刷新库存情况 //刷新库存情况
function flushUsageItem(){ function flushUsageItem(){
$.post("${ctx}/service/store/storageList", {cids:"${cids}"}, function (storageList) { $.post("${ctx}/service/store/storageList", {cids:"${cids}"}, function (storageList) {
var newTotalSizeData = {};
for(var i in storageList){ for(var i in storageList){
var storage = storageList[i]; var storage = storageList[i];
var sizeData = storage.usageMap; var sizeData = storage.usageMap;
var sizeList = new Array(); var sizeList = new Array();
for(var sizeStr in sizeData){ for(var sizeStr in sizeData){
sizeList.push(sizeData[sizeStr]); var newSizeItem = sizeData[sizeStr];
sizeList.push(newSizeItem);
var sizeItem = newTotalSizeData[sizeStr];
if(sizeItem){
sizeItem.totalCount = sizeItem.totalCount + newSizeItem.totalCount;
sizeItem.usedCount = sizeItem.usedCount + newSizeItem.usedCount;
}else{
sizeItem = newSizeItem;
}
newTotalSizeData[sizeStr] = sizeItem;
} }
...@@ -796,6 +634,8 @@ ...@@ -796,6 +634,8 @@
} }
} }
totalSizeData = newTotalSizeData;
var allContent = $(".task-content"); var allContent = $(".task-content");
allContent.each(function(index){ allContent.each(function(index){
if(index % 2 == 1){ if(index % 2 == 1){
...@@ -877,186 +717,12 @@ ...@@ -877,186 +717,12 @@
}); });
} }
function showAlarmWindow(alarmWindow, title, msg){
var windowOptions = {
delay: false,
position: 'bottom left',
closeOnClick: false,
sound: false,
title: title,
closable: false,
messageHeight:null,
icon:false,
size: 'normal',
};
if(msg == ''){//无报警,清除报警框
if(alarmWindow){
alarmWindow.remove();
alarmWindow = null;
}
}else{
if(!alarmWindow){
windowOptions.msg = msg;
alarmWindow =Lobibox.notify('warning', windowOptions);
}else{
alarmWindow.$el.find(".lobibox-notify-msg").html(msg);
}
}
return alarmWindow;
}
///呆滞物料提醒
var inactionAlarmWindow;
flushInactionAlarm = function(){
$.post("${ctx}/service/store/inactionAlarmMsg", {cid: '${show}'}, function (data) {
inactionAlarmWindow = showAlarmWindow(inactionAlarmWindow,"${inactionAlarmTitle}",data);
});
};
//过期物料提醒
var expireWindow;
flushExpireAlarm = function(){
$.post("${ctx}/service/store/expireAlarmMsg", {cid: '${show}'}, function (data) {
expireWindow = showAlarmWindow(expireWindow,"${expireAlarmTitle}",data);
});
};
//库存报警
var storeAlarmWindow;
flushStoreAlarm = function(){
$.post("${ctx}/service/store/minStoreAlarm", {cid: '${show}'}, function (data) {
var storeAlarmMsg = "";
for(var pn in data){
var alarm = data[pn];
storeAlarmMsg = storeAlarmMsg + alarm + "<br/>";
}
storeAlarmWindow = showAlarmWindow(storeAlarmWindow,"${storeAlarmTitle}",storeAlarmMsg);
});
};
//温湿度报警
var temperatureAlarms = {};
flushTemperatureAlarms=function(){
$.post("${ctx}/service/store/temperatureAlarm", {}, function (data) {
var temperatureOptions = {
delay: false,
position: 'bottom left',
closeOnClick: false,
sound: false,
title: "ABC",
closable: false,
size: 'normal',
msg:"湿度: {0} 超出范围[{1}-{2}]<br/>湿度: {0} 超出范围[{1}-{2}]"
};
var newAlarms = [];
for(var alarmTitle in data){
temperatureOptions.title=alarmTitle;
temperatureOptions.msg = data[alarmTitle];
newAlarms.push(alarmTitle);
var alarm = temperatureAlarms[alarmTitle];
if(!alarm){
alarm =Lobibox.notify('warning', temperatureOptions);
temperatureAlarms[alarmTitle] = alarm;
}else{
alarm.$el.find(".lobibox-notify-msg").html(data[alarmTitle]);
}
}
for(var alarmKey in temperatureAlarms){
if(newAlarms.indexOf(alarmKey) < 0){
var alarmToRemove = temperatureAlarms[alarmKey];
alarmToRemove.remove();
delete alarmToRemove;
}
}
});
}
//工单信息
var orderWindows = {};
flushLiteOrders = function(){
$.post("${ctx}/service/store/liteOrderTask", {}, function (data) {
var orderOption = {
position: 'top center',
delay: false,
closeOnClick: false,
sound: false,
//closable: false,
messageHeight:null,
icon:false,
size: 'normal',
};
var newOrders = [];
for(var i in data){
var order = data[i];
var orderNo = order.orderNo;
var status = order.status;
var statusStr = "等待出库";
if(status == 1){
statusStr = "套料出库中";
}else if(status == 2){
statusStr = "套料已完成";
}else if(status == 3){
statusStr = "尾料出库中";
}else if(status == 4){
statusStr = "尾料已完成";
}else if(status == 5){
statusStr = "补料中";
}else if(status == 6){
statusStr = "补料完成";
}
var statusHtml = "<span class='orderStatus'>["+statusStr+"]</span>";
var titleStr = "<a href='#' onclick=\"showOrderDetail('"+orderNo+"')\">"+orderNo+"</a>";
var msgStr = order.finishedReelCount + "/" + order.taskReelCount + statusHtml;
newOrders.push(orderNo);
var orderWindow = orderWindows[orderNo];
if(!orderWindow){
orderOption.title=titleStr;
orderOption.msg = msgStr;
orderWindow =Lobibox.notify('success', orderOption);
orderWindows[orderNo] = orderWindow;
}else{
orderWindow.$el.find(".lobibox-notify-title").html(titleStr);
orderWindow.$el.find(".lobibox-notify-msg").html(msgStr);
}
}
for(var orderKey in orderWindows){
if(newOrders.indexOf(orderKey) < 0){
//alert(orderKey + " : " + newOrders.indexOf(orderKey));
var orderWindowToRemove = orderWindows[orderKey];
orderWindowToRemove.remove();
delete orderWindowToRemove;
}
}
});
}
flushAlarm = function(){
flushInactionAlarm();
//flushExpireAlarm();
flushStoreAlarm();
flushTemperatureAlarms();
}
flushAlarm();
setInterval(function(){
flushAlarm();
}, 5000);
setInterval(function(){ setInterval(function(){
updateTasks("all"); updateTasks("all");
flushStatus(); flushStatus();
flushLineMsg(); flushLineMsg();
flushUsageItem(); flushUsageItem();
flushLiteOrders(); //flushLiteOrders();
}, 1000); }, 1000);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!