Commit 636ac7db sunke

清理库位时发送通知到纬创

清理所有库位时增加安全码654321
去除入库3分钟不允许出库的限制
去除有效期和在库时间显示
1 个父辈 489fd36e
......@@ -146,12 +146,14 @@ public class ServiceHandle {
tower.TowerName = storage.getName();
StatusBean statusBean = taskService.getStatus(towerId);
if(statusBean.isOnline()){
tower.StatusCode = "26";
tower.OnlineStatus = "Online";
}else{
tower.StatusCode = "18";
tower.OnlineStatus = "Offline";
}
tower.StatusCode = "18";
tower.StatusText = "Offline";
// tower.StatusCode = "18";
// tower.StatusText = "Offline";
tower.Temperature = "25";
tower.Humidity = "25";
......@@ -469,7 +471,8 @@ public class ServiceHandle {
log.info("条码["+barcodeStr+"]已被["+lockJob+"]锁定");
//xmlResult.Errorcode = "1902";
//xmlResult.Message = "Carrier is used in antoher JobList";
}else{
}
//else{
try {
log.info(jobName + "锁定["+pos.getPosName()+"]["+barcodeStr+"]");
barcode.setLockId(jobId);
......@@ -481,7 +484,7 @@ public class ServiceHandle {
} catch (ValidateException e) {
log.error("锁定出错",e);
}
}
//}
}
}
}
......
package com.myproject.webapp.controller.storage;
import StSys.RoyoTech.WebServiceClient;
import com.google.common.base.Strings;
import com.myproject.bean.form.Message;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.Storage;
import com.myproject.bean.update.StoragePos;
import com.myproject.dao.mongo.IBarcodeDao;
import com.myproject.exception.ValidateException;
......@@ -67,6 +69,11 @@ public class StoragePosUpdateController extends BaseUpdateController {
if(barcode != null){
log.info("清理库位["+storagePos.getPosName()+"]中的库存"+barcode.getBarcode());
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
if(storage != null){
WebServiceClient.NotifyCarrierUnload(barcode.getBarcode(),storage.getCid());
}
barcode = barcodeManager.findByBarcode(barcode.getBarcode());
barcode.setPosName("");
barcodeManager.save(barcode);
......
......@@ -1019,6 +1019,7 @@ public class TaskService implements ITaskService {
}
//处理客户端发上来的消息
handleMsg(statusBean);
//处理好之后清空
synchronized (storage){
//log.info("reqseq:"+statusBean.getSeq());
......@@ -1227,6 +1228,20 @@ public class TaskService implements ITaskService {
}
//dataCache.unLockOneReel(task.getCid(),task.getPartNumber());
checkoutFinished(task);
// if(dataCache.needConnectWeiChuang()){
// String result = WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
// if(!result.contains("success")){
// log.error("第一次发送["+task.getBarcode()+"]放到仓门口通知失败:" + result);
// result = WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
// if(!result.contains("success")){
// log.error("第二次发送["+task.getBarcode()+"]放到仓门口通知失败:" + result);
// result = WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
// if(!result.contains("success")){
// log.error("第三次发送["+task.getBarcode()+"]放到仓门口通知失败:" + result);
// }
// }
// }
// }
}else{
//log.error(operationKey + "触发仓位完成时,操作队列中不存在");
//从已完成列表中找,如果还找不到就忽略
......@@ -1332,13 +1347,21 @@ public class TaskService implements ITaskService {
@Override
public synchronized String checkout(StoragePos pos, String subSourceId, boolean isSingleOut){
List<DataLog> waittingTasks = getWaitingTasks();
for(DataLog waitTask : waittingTasks){
if(waitTask.getPosId() == null) continue;
if(waitTask.getPosId().equals(pos.getId())){
log.info("库位【"+pos.getPosName()+"已在等待列表中,忽略】");
return "库位【"+pos.getPosName()+"已在等待列表中,忽略】";
List<DataLog> allTasks = getWaitingTasks();
List<DataLog> executingTasks = getExecutingTasks();
List<DataLog> finishedTasks = getFinishedTasks();
allTasks.addAll(executingTasks);
allTasks.addAll(finishedTasks);
for(DataLog task : allTasks){
if(task.getPosId() == null) continue;
if(task.isCheckOutTask()){
if(task.getPosId().equals(pos.getId())){
log.info("库位【"+pos.getPosName()+"已在出库列表中,忽略】");
return "库位【"+pos.getPosName()+"已在出库列表中,忽略】";
}
}
}
if(dataCache.needConnectWeiChuang()){
......
......@@ -150,7 +150,7 @@ storage.enable.enable=Enable
storage.posSize=Position Size
storage.clearPos=Clear
storage.clearAllPos=Clear All
storage.clearPos.msg=The unrecoverable operation will clear the inventory, please confirm all the reels is out. Are you sure to continue?
storage.clearPos.msg=The unrecoverable operation will clear the inventory, please confirm all the reels is out. Please input the security code to continue.
storage.match.exactMatch=Exact Match
storage.match.fullyCompatible=Fully Compatible
storage.match.sizeCompatible=Same Size Compatible
......@@ -429,3 +429,4 @@ error.barcode.noField=[1063]There is no {0} field in the code string.
error.barcode.wrongPn=[1064]The partnumber is wrong
error.barcode.pnNotExist=[1065]x Component {0} does not exist
error.barcode.nocode=[1066]No barcode was found.
error.barcode.taskNotEnd=[1067]Task of [{0}] was not found.
\ No newline at end of file
......@@ -150,7 +150,7 @@ storage.enable.enable=Enable
storage.posSize=Position Size
storage.clearPos=Clear
storage.clearAllPos=Clear All
storage.clearPos.msg=The unrecoverable operation will clear the inventory, please confirm all the reels is out. Are you sure to continue?
storage.clearPos.msg=The unrecoverable operation will clear the inventory, please confirm all the reels is out. Please input the security code to continue.
storage.match.exactMatch=Exact Match
storage.match.fullyCompatible=Fully Compatible
storage.match.sizeCompatible=Same Size Compatible
......@@ -429,3 +429,4 @@ error.barcode.noField=[1063]There is no {0} field in the code string.
error.barcode.wrongPn=[1064]The partnumber is wrong
error.barcode.pnNotExist=[1065]x Component {0} does not exist
error.barcode.nocode=[1066]No barcode was found.
error.barcode.taskNotEnd=[1067]Task of [{0}] was not found.
......@@ -147,7 +147,7 @@ storage.enable.enable=\u542F\u7528
storage.posSize=\u4ED3\u4F4D\u5C3A\u5BF8
storage.clearPos=\u6E05\u7A7A\u4ED3\u4F4D
storage.clearAllPos=\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D
storage.clearPos.msg=\u6B64\u64CD\u4F5C\u4F1A\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D\u4E2D\u7684\u5E93\u5B58,\u4E14\u4E0D\u53EF\u6062\u590D,\u8BF7\u786E\u4FDD\u6599\u4ED3\u4E2D\u7684\u7269\u6599\u5DF2\u53D6\u51FA. \u786E\u5B9A\u8981\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D\u5417\uFF1F
storage.clearPos.msg=\u6B64\u64CD\u4F5C\u4F1A\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D\u4E2D\u7684\u5E93\u5B58,\u4E14\u4E0D\u53EF\u6062\u590D,\u8BF7\u786E\u4FDD\u6599\u4ED3\u4E2D\u7684\u7269\u6599\u5DF2\u53D6\u51FA. \u8BF7\u8F93\u5165\u5B89\u5168\u7801\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D
storage.match.exactMatch=\u5B8C\u5168\u5339\u914D
storage.match.fullyCompatible=\u5B8C\u5168\u517C\u5BB9
storage.match.sizeCompatible=\u540C\u5C3A\u5BF8\u517C\u5BB9
......@@ -420,4 +420,5 @@ error.barcode.wrongLength=[1062]\u6761\u7801[{0}]\u957F\u5EA6\u9519\u8BEF
error.barcode.noField=[1063]\u6761\u7801\u89E3\u6790\u5931\u8D25,\u672A\u627E\u5230{0}\u5B57\u6BB5
error.barcode.wrongPn=[1064]PartNumber\u4E0D\u4E00\u81F4
error.barcode.pnNotExist=[1065]x\u6863\u6848 {0} \u4E0D\u5B58\u5728
error.barcode.nocode=[1066]\u672A\u8BFB\u5230\u6761\u7801
\ No newline at end of file
error.barcode.nocode=[1066]\u672A\u8BFB\u5230\u6761\u7801
error.barcode.taskNotEnd=\u6761\u7801[{0}]\u7684\u4EFB\u52A1\u672A\u627E\u5230
\ No newline at end of file
......@@ -93,7 +93,7 @@
<display:column titleKey="component.plate.size">
${component.plateSize} x ${component.height}
</display:column>
<display:column property="validDay" titleKey="component.validDay"/>
<%--<display:column property="validDay" titleKey="component.validDay"/>--%>
<%--<display:column property="type" titleKey="类型"/>--%>
<display:column property="amount" titleKey="component.amount"/>
......
......@@ -157,26 +157,26 @@
${pos.barcode.partNumber}
</display:column>
<display:column titleKey="inOutList.type">
<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>
<c:if test="${pos.barcode.type == 1}"><fmt:message key="inOutList.type.solder"/></c:if>
<c:if test="${pos.barcode.type == 2}"><fmt:message key="inOutList.type.pcb"/></c:if>
<c:if test="${pos.barcode.type == 3}"><fmt:message key="inOutList.type.others"/></c:if>
<c:if test="${pos.barcode.type == 4}"><fmt:message key="inOutList.type.fixture"/></c:if>
</display:column>
<%--<display:column titleKey="inOutList.type">--%>
<%--<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 1}"><fmt:message key="inOutList.type.solder"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 2}"><fmt:message key="inOutList.type.pcb"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 3}"><fmt:message key="inOutList.type.others"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 4}"><fmt:message key="inOutList.type.fixture"/></c:if>--%>
<%--</display:column>--%>
<display:column property="barcode.barcode" titleKey="barcode.barcode"/>
<display:column property="barcode.inFixture" titleKey="storagePosFind.inFixture"/>
<%--<display:column property="barcode.inFixture" titleKey="storagePosFind.inFixture"/>--%>
<%--<display:column property="barcode.providerNumber" titleKey="component.providerNumber"/>--%>
<%--<display:column property="barcode.amount" titleKey="数量"/>--%>
<display:column property="barcode.lockName" titleKey="menu.inRule"/>
<%--<display:column property="barcode.lockName" titleKey="menu.inRule"/>--%>
<display:column property="posName" titleKey="checkOut.pos" sortProperty="posName" sortable="true"/>
<display:column titleKey="barcode.inStoreRemainTime" sortProperty="barcode.putInTime" sortable="true">
<c:if test="${pos.inStoreHour >= 1}">${pos.inStoreHour}<fmt:message key="solder.hour"/></c:if><c:if test="${pos.inStoreMiniute != 0}">${pos.inStoreMiniute}<fmt:message key="runStatus.minutes"/>
<c:if test="${pos.barcode.maxStorageTime != 0 }">
/${pos.barcode.maxStorageTime}<fmt:message key="solder.hour"/></c:if>
</c:if>
</display:column>
<%--<display:column titleKey="barcode.inStoreRemainTime" sortProperty="barcode.putInTime" sortable="true">--%>
<%--<c:if test="${pos.inStoreHour >= 1}">${pos.inStoreHour}<fmt:message key="solder.hour"/></c:if><c:if test="${pos.inStoreMiniute != 0}">${pos.inStoreMiniute}<fmt:message key="runStatus.minutes"/>--%>
<%--<c:if test="${pos.barcode.maxStorageTime != 0 }">--%>
<%--/${pos.barcode.maxStorageTime}<fmt:message key="solder.hour"/></c:if>--%>
<%--</c:if>--%>
<%--</display:column>--%>
<display:column titleKey="component.amount">
<c:if test="${pos.barcode.type == 1 || pos.barcode.type == 4}">-</c:if>
......
......@@ -397,6 +397,28 @@
</c:if>
<!--End of update-->
<div id="clearAllPosConfirmBox" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="width: 800px; margin-top: 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="font-weight: 500;"><span id="reelCode"></span></h4>
</div>
<div class="modal-body">
<div style="font-size:16px;margin-bottom:8px;"><fmt:message key="storage.clearPos.msg"/></div>
<div class="row">
<input class="bootbox-input bootbox-input-text form-control" autocomplete="off" type="password" id="securityCode">
</div>
<div id="codeError" style="color:red;margin-top:12px;"></div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn default"><fmt:message key="button.cancel"/></button>
<button type="button" class="btn green" onclick="confirmClearAllPos();"><fmt:message key="OK"/></button>
</div>
</div>
</div>
</div>
<c:set var="scripts" scope="request">
<script src="${ctx}/scripts/echarts.min.js"></script>
......@@ -431,7 +453,15 @@
function clearAllPos(){
if(window.confirm('${clearMsg}')){
$("#codeError").text("");
$("#securityCode").val("");
$("#clearAllPosConfirmBox").modal("show");
}
function confirmClearAllPos(){
var securityCode = $("#securityCode").val();
if(securityCode == "654321"){
$("#clearAllPosConfirmBox").modal("hide");
$("tr[id]").each(function(){
var posId = $(this).attr("id");
$.post("${ctx}/service/store/clearPos", {pid: posId}, function (data) {
......@@ -440,8 +470,9 @@
}
})
});
}else{
$("#codeError").text("安全码错误");
}
}
function clearPos(posId){
......@@ -484,8 +515,8 @@
}
function deleteStorage() {
$("#operation").val("delete");
$("#storage").submit();
//$("#operation").val("delete");
//$("#storage").submit();
}
function putinStorage() {
......@@ -559,126 +590,6 @@
$('#updatePosModal').modal('hide');
}
/*var dom = document.getElementById("humitureBox");
var humitureChart = echarts.init(dom);
var timedata = [];
var temperaturedata = [];
var humiditydata = [];
var statusMsg={"0":"${status_0}",
"1":"${status_1}",
"2":"${status_2}",
"3":"${status_3}",
"4":"${status_4}",
"5":"${status_5}",
"6":"${status_6}",
"7":"${status_7}",
"8":"${status_8}",
"9":"${status_9}",
"10":"${status_10}",
"11":"${status_11}",
"12":"${status_12}",
"13":"${status_13}",
"999":"${status_999}"
};
humitureChart.showLoading();
$.get('${ctx}/service/store/latestStatus?cid=${storage.cid}', function (latestDatas) {
humitureChart.hideLoading();
for(index in latestDatas){
var itemData = latestDatas[index];
timedata.push(new Date(itemData["createDate"]).toLocaleString());
temperaturedata.push(itemData["temperature"]);
humiditydata.push(itemData["humidity"]);
}
option = {
title: {
text: '${currentStatus}'
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['${temperature}','${humidity}']
},
xAxis: {
type: 'category',
splitLine: {
show: false
},
data: timedata
},
yAxis: [{
type: 'value',
max:'dataMax',
splitLine: {
show: false
}
}
],
series: [
{
name:'${temperature}',
type:'line',
showSymbol: false,
hoverAnimation: false,
yAxisIndex: 0,
data:temperaturedata
},
{
name:'${humidity}',
type:'line',
showSymbol: false,
hoverAnimation: false,
yAxisIndex: 0,
data:humiditydata
}
]
};
humitureChart.setOption(option);
setInterval(function () {
$.get('${ctx}/service/store/status?cid=${storage.cid}', function (statusBean) {
if(statusBean.status != '999'){
timedata.push(new Date(statusBean.time).toLocaleString());
temperaturedata.push(statusBean.temperature);
humiditydata.push(statusBean.humidity);
}
var statusTxt = statusMsg[statusBean.status];
if(!statusTxt){
statusTxt = statusBean.status;
}
humitureChart.setOption({
title: {
text:'${currentStatus}: '+ statusTxt +' '+ statusBean.error,
},
tooltip: {
trigger: 'axis'
},
series: [{
data: temperaturedata
},{
data: humiditydata
}],
xAxis:{data: timedata}
});
});
}, 1000);
});*/
</script>
</c:set>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!