Commit 4d567aba sunke

空出时禁用库位

1 个父辈 edd9f66c
...@@ -91,23 +91,71 @@ public class OutInfoCache { ...@@ -91,23 +91,71 @@ public class OutInfoCache {
} }
} }
public void executeOutTask(){ public void executeOutTask(){
long now = System.currentTimeMillis(); //优先队列中最先出的需求单
OutInfo mustOutInfo = null;
//已到达建议时间的需求单
OutInfo suggestOutInfo = null;
Date now = new Date();
for (OutInfo unEndOutInfo : getCachedOutInfos()) { for (OutInfo unEndOutInfo : getCachedOutInfos()) {
//未执行过的或任务已完成的才可以执行 if(unEndOutInfo.isReelCutAction() || unEndOutInfo.isUrgentAction() || unEndOutInfo.isCheckAction()){
if(unEndOutInfo.isTaskEnd() || unEndOutInfo.isNew()){ //单独出库,分盘料或盘点料,不按时间可直接执行,距离上次任务完成5分钟后才可再次执行
long lastEndTime = unEndOutInfo.getTaskEndTime(); if(unEndOutInfo.isTaskEnd() || unEndOutInfo.isNew()){
//距离上次任务完成5分钟后才可再次执行 long lastEndTime = unEndOutInfo.getTaskEndTime();
if(now - lastEndTime >= 5 * 60 * 1000){ if(now.getTime() - lastEndTime >= 5 * 60 * 1000){
checkOutOutItems(unEndOutInfo.gethSerial()); checkOutOutItems(unEndOutInfo.gethSerial());
}
}
}else if(unEndOutInfo.isNew()){
//寻找未执行过的到达建议时间和必须出库时间的工单料(首盘或补料)
if(unEndOutInfo.isTailAction() || unEndOutInfo.isFirstReelAction()){
long firstExecuteTime = unEndOutInfo.getFirstExecuteTime();
if(firstExecuteTime < 0){
if(mustOutInfo == null || firstExecuteTime > mustOutInfo.getFirstExecuteTime()){
mustOutInfo = unEndOutInfo;
}
}else if(firstExecuteTime == 0){
//到达建议时间,且时间最早的
Date suggestDate = unEndOutInfo.getSdate();
if(suggestDate.before(now)){
if(suggestOutInfo == null || suggestDate.before(suggestOutInfo.getSdate())){
suggestOutInfo = unEndOutInfo;
}
}
}
} }
} }
}
if(mustOutInfo != null || suggestOutInfo != null){
//先看当前是否有执行中的任务
Collection<DataLog> queueTasks = taskService.getQueueTasks();
List<DataLog> allTasks = taskService.getFinishedTasks();
if(!queueTasks.isEmpty()){
allTasks.addAll(queueTasks);
}
//是否有工单料任务
boolean hasOrderTask = false;
for (DataLog dataLog : allTasks) {
if(dataLog.isCheckOutTask()){
if(!dataLog.isUrgentReel() && !dataLog.isCutReel() && !dataLog.isLessSendReel()){
//工单料(不是指定料也不是分盘料即首盘或补料)
hasOrderTask = true;
}
}
}
if(!hasOrderTask){
//无工单料任务,如果有优先执行任务先执行,如果没有执行到达建议时间的任务
if(mustOutInfo != null){
log.info("执行优先工单需求单:" + mustOutInfo.gethSerial());
checkOutOutItems(mustOutInfo.gethSerial());
}else if(suggestOutInfo != null){
log.info("执行到达建议时间工单需求单:" + suggestOutInfo.gethSerial());
checkOutOutItems(suggestOutInfo.gethSerial());
}
}
} }
} }
/** /**
......
...@@ -327,7 +327,9 @@ public class BoxChartController extends BaseController { ...@@ -327,7 +327,9 @@ public class BoxChartController extends BaseController {
@ResponseBody @ResponseBody
public void removeTaskFromQueue(HttpServletRequest request) throws Exception{ public void removeTaskFromQueue(HttpServletRequest request) throws Exception{
String taskId = request.getParameter("tid"); String taskId = request.getParameter("tid");
taskService.hideTask(taskId); //禁用库位
boolean prohibitePos = false;
taskService.hideTask(taskId, prohibitePos);
} }
/** /**
......
...@@ -96,7 +96,14 @@ public class DataLogSearchController extends BaseSearchController { ...@@ -96,7 +96,14 @@ public class DataLogSearchController extends BaseSearchController {
addFromToDateParam(request,criteria,"updateDate"); addFromToDateParam(request,criteria,"updateDate");
addIntEqParam(request,criteria,"type"); addIntEqParam(request,criteria,"type");
addStrEqParam(request,criteria,"status"); String statusStr = request.getParameter("status");
if(!Strings.isNullOrEmpty(statusStr) && statusStr.equals("UN_END")){
request.setAttribute("status",statusStr);
criteria.and("status").nin(StorageConstants.OP_STATUS.END.name(),StorageConstants.OP_STATUS.FINISHED.name());
}else{
addStrEqParam(request,criteria,"status");
}
addLikeParam(request,criteria,"sourceName"); addLikeParam(request,criteria,"sourceName");
addStrEqParam(request,criteria,"storageId"); addStrEqParam(request,criteria,"storageId");
......
...@@ -73,7 +73,7 @@ public interface ITaskService { ...@@ -73,7 +73,7 @@ public interface ITaskService {
//void checkOutInaction(String areaId, int day) throws ValidateException; //void checkOutInaction(String areaId, int day) throws ValidateException;
boolean hideTask(String taskId); boolean hideTask(String taskId, boolean prohibitePos);
Collection<String> excludePosIds(); Collection<String> excludePosIds();
......
...@@ -601,7 +601,7 @@ public class QisdaDeviceController extends BaseController { ...@@ -601,7 +601,7 @@ public class QisdaDeviceController extends BaseController {
} }
/** /**
* 取消库任务 * 取消库任务
*/ */
@RequestMapping(value = "/cancelOutTask") @RequestMapping(value = "/cancelOutTask")
@ResponseBody @ResponseBody
...@@ -618,7 +618,9 @@ public class QisdaDeviceController extends BaseController { ...@@ -618,7 +618,9 @@ public class QisdaDeviceController extends BaseController {
log.info("客户端取消["+codeStr+"]的未执行完成的出库任务结果:" + cancelResult); log.info("客户端取消["+codeStr+"]的未执行完成的出库任务结果:" + cancelResult);
return ResultBean.newOkResult(cancelResult); return ResultBean.newOkResult(cancelResult);
}else{ }else{
boolean hideResult = taskService.hideTask(task.getId()); //禁用库位
boolean prohibitePos = true;
boolean hideResult = taskService.hideTask(task.getId(),prohibitePos);
log.info("客户端取消["+codeStr+"]已完成的出库任务结果:" + hideResult); log.info("客户端取消["+codeStr+"]已完成的出库任务结果:" + hideResult);
return ResultBean.newOkResult(hideResult); return ResultBean.newOkResult(hideResult);
} }
......
...@@ -776,8 +776,14 @@ public class TaskService implements ITaskService { ...@@ -776,8 +776,14 @@ public class TaskService implements ITaskService {
return cancelTask(task); return cancelTask(task);
} }
/**
* 隐藏任务
* @param taskId
* @param prohibitePos 是否禁用库位(料仓空出时,需要禁用库位)
* @return
*/
@Override @Override
public boolean hideTask(String taskId) { public boolean hideTask(String taskId, boolean prohibitePos) {
DataLog task = null; DataLog task = null;
List<DataLog> finishedTasks = getFinishedTasks(); List<DataLog> finishedTasks = getFinishedTasks();
for (DataLog finishedTask : finishedTasks) { for (DataLog finishedTask : finishedTasks) {
...@@ -793,6 +799,19 @@ public class TaskService implements ITaskService { ...@@ -793,6 +799,19 @@ public class TaskService implements ITaskService {
AppendInfo taskAppendInfo = task.getAppendInfo(); AppendInfo taskAppendInfo = task.getAppendInfo();
boolean stopSendToQisda = task.isStopSendToQisda(); boolean stopSendToQisda = task.isStopSendToQisda();
finishedTaskMap.remove(task.getBarcode()); finishedTaskMap.remove(task.getBarcode());
if(prohibitePos){
log.info("库位["+task.getPosName()+"]料盘["+task.getBarcode()+"]空出,禁用库位");
task.setOutOrder(-task.getOutOrder());
try {
StoragePos pos = storagePosManager.get(task.getPosId());
pos.setEnabled(false);
storagePosManager.save(pos);
} catch (ValidateException e) {
}
}
task.setStopSendToQisda(true); task.setStopSendToQisda(true);
task = dataLogDao.save(task); task = dataLogDao.save(task);
......
...@@ -96,6 +96,7 @@ ...@@ -96,6 +96,7 @@
<div style="text-align:left"> <div style="text-align:left">
<select name="status" class="form-control"> <select name="status" class="form-control">
<option value=""><fmt:message key="select.all"/></option> <option value=""><fmt:message key="select.all"/></option>
<option value="UN_END" <c:if test="${status=='UN_END'}"> selected </c:if> ><fmt:message key="未完成"/></option>
<option value="WAIT" <c:if test="${status=='WAIT'}"> selected </c:if> > <fmt:message key="op.status.wait"/></option> <option value="WAIT" <c:if test="${status=='WAIT'}"> selected </c:if> > <fmt:message key="op.status.wait"/></option>
<option value="EXECUTING" <c:if test="${status=='EXECUTING'}"> selected </c:if> > <fmt:message key="op.status.executing"/></option> <option value="EXECUTING" <c:if test="${status=='EXECUTING'}"> selected </c:if> > <fmt:message key="op.status.executing"/></option>
<option value="FINISHED" <c:if test="${status=='FINISHED'}"> selected </c:if> > <fmt:message key="op.status.finished"/></option> <option value="FINISHED" <c:if test="${status=='FINISHED'}"> selected </c:if> > <fmt:message key="op.status.finished"/></option>
...@@ -125,7 +126,11 @@ ...@@ -125,7 +126,11 @@
<display:setProperty name="export.csv.filename" value="dataLog.csv" /> <display:setProperty name="export.csv.filename" value="dataLog.csv" />
<display:column property="partNumber" titleKey="dataLog.partNumber" sortable="true" sortProperty="partNumber"/> <display:column property="partNumber" titleKey="dataLog.partNumber" sortable="true" sortProperty="partNumber"/>
<display:column property="barcode" titleKey="barcode.barcode" sortable="true" sortProperty="barcode"/> <display:column property="barcode" titleKey="barcode.barcode" sortable="true" sortProperty="barcode"/>
<display:column titleKey="dataLog.storageName" sortable="true" sortProperty="posName"> <c:set var="posDisabledClass" value=""/>
<c:if test='${dataLog.outOrder < 0}'>
<c:set var="posDisabledClass" value="bg-red"/>
</c:if>
<display:column titleKey="dataLog.storageName" sortable="true" sortProperty="posName" class="${posDisabledClass}">
<c:if test="${not empty dataLog.storageName}"> <c:if test="${not empty dataLog.storageName}">
${dataLog.storageName}[${dataLog.posName}] ${dataLog.storageName}[${dataLog.posName}]
</c:if> </c:if>
......
...@@ -12,6 +12,40 @@ ...@@ -12,6 +12,40 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<ul class="timeline"> <ul class="timeline">
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">10-30 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020103017</h2>
<div class="timeline-content">
<ul>
<li>逻辑优化:库位物料取不出来时,禁用库位</li>
</ul>
</div>
</div>
</li>
<li class="timeline-yellow">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">10-29 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020102910</h2>
<div class="timeline-content">
<ul>
<li>需求单插队(接收时间晚于必须出库时间几个小时)导致的需求单未完全按照时间先后顺序执行的问题</li>
</ul>
</div>
</div>
</li>
<li class="timeline-grey"> <li class="timeline-grey">
<div class="timeline-time"> <div class="timeline-time">
<span class="date">2020 </span> <span class="date">2020 </span>
......
/** /**
* Simplified Chinese translation for bootstrap-datetimepicker * Simplified Chinese translation for bootstrap-datepicker
* Yuan Cheung <advanimal@gmail.com> * Yuan Cheung <advanimal@gmail.com>
*/ */
;(function($){ ;(function($){
$.fn.datetimepicker.dates['zh-CN'] = { $.fn.datepicker.dates['zh-CN'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], days: ["\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D", "\u661F\u671F\u65E5"],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], daysShort: ["\u5468\u65E5", "\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D", "\u5468\u65E5"],
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], daysMin: ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D", "\u65E5"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], months: ["\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708"],
monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], monthsShort: ["\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708"],
today: "今日", today: "\u4ECA\u65E5",
suffix: [], weekStart: 1
meridiem: [] };
$.fn.datepicker.dates['en'] = {
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
today: "Today",
clear: "Clear",
titleFormat: "MM yyyy", /* Leverages same syntax as 'format' */
weekStart: 0
}; };
}(jQuery)); }(jQuery));
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
<div class="page-footer-inner"> <div class="page-footer-inner">
2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a> 2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a>
</div> </div>
<span class="right" style="color: #a3a3a3;">Version: 2020.10.28</span> <span class="right" style="color: #a3a3a3;">Version: 2020.10.30</span>
<div class="scroll-to-top"> <div class="scroll-to-top">
<i class="icon-arrow-up"></i> <i class="icon-arrow-up"></i>
</div> </div>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!