Commit c00de27b sunke

查询料盘绑定接口增加slot字段,当slot大于0时为真实绑定,其他为预绑定

需求单最后一盘E状态修改为EL
排队页面增加需求单创建时间
需求单页面增加需求时间
双层线上AGV拉走料架时调用清理料架,使料架可以重复使用
1 个父辈 3fa4b128
...@@ -373,6 +373,33 @@ public class InquiryShelfBean { ...@@ -373,6 +373,33 @@ public class InquiryShelfBean {
} }
/** /**
* 双层线上AGV拉走料架时调用清理料架,使料架可以重复使用
*/
public static void agvRemoveRfid(String realRfid){
ShelfInfo shelfToRemove = null;
for (Map<String, ShelfInfo> shelfInfoMap : hSerialShelfMap.values()) {
for (ShelfInfo shelfInfo : shelfInfoMap.values()) {
String shelfRFID = shelfInfo.getRealRfid();
if(shelfRFID.equals(realRfid)){
//已经绑定过该Temp料架
shelfToRemove = shelfInfo;
}
}
}
if(shelfToRemove != null){
String hSerial = shelfToRemove.gethSerial();
Map<String, ShelfInfo> shelfMap = hSerialShelfMap.get(hSerial);
if(shelfMap != null){
log.info("料架"+shelfToRemove.tempRfid()+"["+shelfToRemove.getRealRfid()+"]已放上AGV,从缓存中清理");
shelfMap.remove(shelfToRemove.tempRfid());
hSerialShelfMap.put(hSerial, shelfMap);
QisdaCache.saveShelfMap(hSerialShelfMap);
}
}
}
/**
* 根据tempRfid编号获取料架信息 * 根据tempRfid编号获取料架信息
*/ */
public static ShelfInfo findSameShelf(String hSerial, String rfid){ public static ShelfInfo findSameShelf(String hSerial, String rfid){
...@@ -481,6 +508,23 @@ public class InquiryShelfBean { ...@@ -481,6 +508,23 @@ public class InquiryShelfBean {
return null; return null;
} }
/**
* 获取需求单使用的所有D料架
*/
public static List<ShelfInfo> getAllDShelf(String hSerial){
List<ShelfInfo> shelfInfos = new ArrayList<>();
Map<String, ShelfInfo> shelfMap = hSerialShelfMap.get(hSerial);
if(shelfMap != null){
for (ShelfInfo shelf : shelfMap.values()) {
if(shelf.isDShelf()){
shelfInfos.add(shelf);
}
}
}
return shelfInfos;
}
public static ShelfInfo findMaxUsedShelf(String hSerial, String shelfType){ public static ShelfInfo findMaxUsedShelf(String hSerial, String shelfType){
Map<String, ShelfInfo> shelfMap = hSerialShelfMap.get(hSerial); Map<String, ShelfInfo> shelfMap = hSerialShelfMap.get(hSerial);
if(shelfMap == null){ if(shelfMap == null){
......
...@@ -2,6 +2,7 @@ package com.myproject.bean.update.qisda; ...@@ -2,6 +2,7 @@ package com.myproject.bean.update.qisda;
import com.myproject.bean.BaseMongoBean; import com.myproject.bean.BaseMongoBean;
import com.myproject.util.StorageConstants; import com.myproject.util.StorageConstants;
import org.apache.logging.log4j.util.Strings;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import java.util.*; import java.util.*;
...@@ -295,7 +296,16 @@ public class OutInfo extends BaseMongoBean { ...@@ -295,7 +296,16 @@ public class OutInfo extends BaseMongoBean {
/** /**
* 放上料架顺序 * 放上料架顺序
*/ */
public String getShelfLatest(){ public String getShelfLatest(String status){
if("E".equalsIgnoreCase(status)){
if(taskNum == 1){
return "EL";
}
if(taskFinishNum >= taskNum){
return "EL";
}
return "E";
}
if(taskNum == 1){ if(taskNum == 1){
return "L"; return "L";
} }
......
...@@ -20,6 +20,8 @@ public interface IOutInfoDao extends IMongoDao { ...@@ -20,6 +20,8 @@ public interface IOutInfoDao extends IMongoDao {
void updateStatus(String hSerial, int bindStatus, int sendStatus); void updateStatus(String hSerial, int bindStatus, int sendStatus);
void updateEndOutInfo(String hSerial, boolean endOutInfo);
void updateTaskEndTime(String hSerial, long taskEndTime); void updateTaskEndTime(String hSerial, long taskEndTime);
void updateTaskFinishNum(String hSerail, int taskFinishNum); void updateTaskFinishNum(String hSerail, int taskFinishNum);
......
...@@ -82,6 +82,15 @@ public class OutInfoDaoImpl extends AbstractMongoDao implements IOutInfoDao { ...@@ -82,6 +82,15 @@ public class OutInfoDaoImpl extends AbstractMongoDao implements IOutInfoDao {
} }
@Override @Override
public void updateEndOutInfo(String hSerial, boolean endOutInfo){
Criteria c = Criteria.where("hSerial").is(hSerial);
Query query = Query.query(c);
Update update = new Update();
update.set("endOutInfo",endOutInfo);
updateFirst(query,update);
}
@Override
public void updateTaskEndTime(String hSerial, long taskEndTime){ public void updateTaskEndTime(String hSerial, long taskEndTime){
update(hSerial, "taskEndTime", taskEndTime); update(hSerial, "taskEndTime", taskEndTime);
} }
......
...@@ -660,10 +660,33 @@ public class QisdaApi { ...@@ -660,10 +660,33 @@ public class QisdaApi {
if(result.contains("VehicleID")){ if(result.contains("VehicleID")){
return result; return result;
} }
if(result.toLowerCase().contains("wait")){
return result;
}
return ""; return "";
} catch (Exception e) { } catch (Exception e) {
log.error("从Qisda检查工单料架是否解绑"+hserial+"["+line+"])接口(GetSerialData)出错",e); log.error("从Qisda检查工单料架是否解绑"+hserial+"["+line+"])接口(GetSerialData)出错",e);
return "检查出错:" + e.getMessage(); return "检查出错:" + e.getMessage();
} }
} }
/**
* 将最后一个补料需求单的状态更新为不是最后一个需求单
* @param soseq
* @return
*/
public static String UpdateBatchRefillMark(String soseq){
String url = "http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/UpdateBatchRefillMark";
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("soseq",soseq);
try {
String result = HttpHelper.postParam(url,paramMap);
log.info("更新Qisda工单序号["+soseq+"]的最后一个需求单状态为非最后一个需求单(UpdateBatchRefillMark)返回:" + result);
return "";
} catch (Exception e) {
log.error("更新Qisda工单序号["+soseq+"]的最后一个需求单状态为非最后一个需求单(UpdateBatchRefillMark)出错",e);
return "工单序号最后一个需求单状态更新出错:" + e.getMessage();
}
}
} }
...@@ -226,10 +226,10 @@ public class QisdaApiController extends BaseController { ...@@ -226,10 +226,10 @@ public class QisdaApiController extends BaseController {
public ResultBean smallBindCount(HttpServletRequest request){ public ResultBean smallBindCount(HttpServletRequest request){
String soseqListStr = receiveParamInfo(request,"soseqList"); String soseqListStr = receiveParamInfo(request,"soseqList");
log.info("收到获取工单的小料盘绑定数量 soseqList="+soseqListStr); log.info("收到获取工单的小料盘绑定数量 soseqList="+soseqListStr);
int smallBindCount = 0;
String[] soseqList = soseqListStr.split(","); String[] soseqList = soseqListStr.split(",");
List<Map<String,String>> resultList = new ArrayList<>(); List<Map<String,String>> resultList = new ArrayList<>();
for (String soseq : soseqList) { for (String soseq : soseqList) {
int smallBindCount = 0;
List<StoragePos> bindPosList = storagePosDao.listSoSeqBindPos(soseq); List<StoragePos> bindPosList = storagePosDao.listSoSeqBindPos(soseq);
for (StoragePos storagePos : bindPosList) { for (StoragePos storagePos : bindPosList) {
Barcode reel = storagePos.getBarcode(); Barcode reel = storagePos.getBarcode();
...@@ -240,6 +240,7 @@ public class QisdaApiController extends BaseController { ...@@ -240,6 +240,7 @@ public class QisdaApiController extends BaseController {
Map<String,String> itemMap = new HashMap<>(); Map<String,String> itemMap = new HashMap<>();
itemMap.put("soseq", soseq); itemMap.put("soseq", soseq);
itemMap.put("smallCount", "" + smallBindCount); itemMap.put("smallCount", "" + smallBindCount);
log.info("soseq=["+soseq+"]小料盘绑定数量:" + smallBindCount);
resultList.add(itemMap); resultList.add(itemMap);
} }
...@@ -266,14 +267,20 @@ public class QisdaApiController extends BaseController { ...@@ -266,14 +267,20 @@ public class QisdaApiController extends BaseController {
if(pos != null){ if(pos != null){
Barcode barcode = pos.getBarcode(); Barcode barcode = pos.getBarcode();
AppendInfo appendInfo = barcode.getAppendInfo(); AppendInfo appendInfo = barcode.getAppendInfo();
int bindSlot = Integer.valueOf(appendInfo.getBindSlot()); String so = appendInfo.getSo();
if(bindSlot > 0 || barcode.hasCutInfo()) { if(!Strings.isNullOrEmpty(so)){
//已经真实绑定过 String bindSlot = appendInfo.getBindSlot();
if(barcode.hasCutInfo()) {
bindSlot = "1";
}
//已经绑定过
Map<String,String> map = new HashMap<>(); Map<String,String> map = new HashMap<>();
map.put("reelId", reelId); map.put("reelId", reelId);
map.put("so", appendInfo.getSo()); map.put("so", appendInfo.getSo());
map.put("slot", bindSlot);
bindReelInfos.add(map); bindReelInfos.add(map);
} }
}else{ }else{
//无库存,返回Not Found //无库存,返回Not Found
Map<String,String> map = new HashMap<>(); Map<String,String> map = new HashMap<>();
...@@ -290,7 +297,7 @@ public class QisdaApiController extends BaseController { ...@@ -290,7 +297,7 @@ public class QisdaApiController extends BaseController {
} }
/** /**
* 检测料盘是否绑定工单 * 关闭工单
*/ */
@RequestMapping(value = "/closeSoSeq",method = RequestMethod.POST) @RequestMapping(value = "/closeSoSeq",method = RequestMethod.POST)
@ResponseBody @ResponseBody
...@@ -349,7 +356,7 @@ public class QisdaApiController extends BaseController { ...@@ -349,7 +356,7 @@ public class QisdaApiController extends BaseController {
} }
/** /**
* 出库 * 创建需求单
*/ */
@RequestMapping(value = "/out",method = RequestMethod.POST) @RequestMapping(value = "/out",method = RequestMethod.POST)
@ResponseBody @ResponseBody
...@@ -438,8 +445,12 @@ public class QisdaApiController extends BaseController { ...@@ -438,8 +445,12 @@ public class QisdaApiController extends BaseController {
for (OutInfo outInfo : outInfoMap.values()) { for (OutInfo outInfo : outInfoMap.values()) {
int bindReelNum = getBindReelNum(outInfo); int bindReelNum = 0;
if(!outInfo.isPreTailAction()){
bindReelNum = getBindReelNum(outInfo);
outInfo.setTotalBindNum(bindReelNum); outInfo.setTotalBindNum(bindReelNum);
}
log.info("创建出库需求单["+outInfo.gethSerial()+"]" + outInfo.getAction() + " 预估需求料盘数量为:" + bindReelNum); log.info("创建出库需求单["+outInfo.gethSerial()+"]" + outInfo.getAction() + " 预估需求料盘数量为:" + bindReelNum);
outInfoDao.save(outInfo); outInfoDao.save(outInfo);
//新的需求单,更新缓存 //新的需求单,更新缓存
...@@ -521,8 +532,21 @@ public class QisdaApiController extends BaseController { ...@@ -521,8 +532,21 @@ public class QisdaApiController extends BaseController {
} }
return cutReelCount; return cutReelCount;
}else if(outInfo.isFirstReelAction()){ }else if(outInfo.isFirstReelAction()){
//首盘,每一条是一盘 //首盘
return allItems.size(); int bindNum = 0;
OutInfo cutOutInfo = soseqCache.getCutActionInfoFromCache(outInfo.getSoseq());
if(cutOutInfo != null){
for (OutItem outItem : cutOutInfo.getOutItems()) {
if(outItem.getRealLockQty()>0){
bindNum++;
}
}
}else{
//每一条有料的是一盘
bindNum = allItems.size();
}
return bindNum;
}else if(outInfo.isTailAction()){ }else if(outInfo.isTailAction()){
//尾料,根据绑定信息进行统计 //尾料,根据绑定信息进行统计
//绑定信息暂时放到ChartItem中,value1为需求量,value2为累计物料数量,value3为累计料盘数量 //绑定信息暂时放到ChartItem中,value1为需求量,value2为累计物料数量,value3为累计料盘数量
......
...@@ -397,12 +397,12 @@ public class QisdaCache { ...@@ -397,12 +397,12 @@ public class QisdaCache {
}); });
for (QisdaApiRequest apiRequest : failedList) { for (QisdaApiRequest apiRequest : failedList) {
log.info("重发通知指令[" + apiRequest.getMapKey() + "]到Qisda"); //log.info("重发通知指令[" + apiRequest.getMapKey() + "]到Qisda");
String result = HttpHelper.postParam(apiRequest.getUrl(),apiRequest.getParamMap()); String result = HttpHelper.postParam(apiRequest.getUrl(),apiRequest.getParamMap());
log.info("重发通知指令[" + apiRequest.getMapKey() + "]到Qisda返回:" + result); //log.info("重发通知指令[" + apiRequest.getMapKey() + "]到Qisda返回:" + result);
String resultStr = XmlUtil.getNodeBody("string", result); String resultStr = XmlUtil.getNodeBody("string", result);
if(resultStr.startsWith("-1") || resultStr.startsWith("0")){ if(resultStr.startsWith("-1") || resultStr.startsWith("0")){
log.info(apiRequest.getMapKey() + "Qisda接口调用失败,需要进行重发"); //log.info(apiRequest.getMapKey() + "Qisda接口调用失败,需要进行重发");
}else{ }else{
QisdaCache.removeFailedRequest(apiRequest); QisdaCache.removeFailedRequest(apiRequest);
return; return;
......
...@@ -899,12 +899,12 @@ public class QisdaDeviceController extends BaseController { ...@@ -899,12 +899,12 @@ public class QisdaDeviceController extends BaseController {
}else if(cacheTask.isLessSendReel()){ }else if(cacheTask.isLessSendReel()){
log.info("缺料补发料需要通知Qisda"); log.info("缺料补发料需要通知Qisda");
Barcode barcodeObj = barcodeManager.findByBarcode(cacheTask.getBarcode()); Barcode barcodeObj = barcodeManager.findByBarcode(cacheTask.getBarcode());
String latest = outInfo.getShelfLatest(); String latest = outInfo.getShelfLatest("");
//放到线程中 //放到线程中
QisdaApi.VMIMateriaRecAss(cacheTask, barcodeObj,latest); QisdaApi.VMIMateriaRecAss(cacheTask, barcodeObj,latest);
} else{ } else{
Barcode barcodeObj = barcodeManager.findByBarcode(cacheTask.getBarcode()); Barcode barcodeObj = barcodeManager.findByBarcode(cacheTask.getBarcode());
String latest = outInfo.getShelfLatest(); String latest = outInfo.getShelfLatest("");
QisdaApi.VMIMateriaRecAss(cacheTask, barcodeObj,latest); QisdaApi.VMIMateriaRecAss(cacheTask, barcodeObj,latest);
} }
...@@ -1315,6 +1315,18 @@ public class QisdaDeviceController extends BaseController { ...@@ -1315,6 +1315,18 @@ public class QisdaDeviceController extends BaseController {
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
/**
* 料架放上AGV时,根据RFID清理料架的缓存信息,使料架可以重复使用
*/
@RequestMapping(value = "/agvRemoveRfid")
@ResponseBody
public ResultBean agvRemoveRfid(HttpServletRequest request){
String realRfid = request.getParameter("rfid");
log.info("料架放上AGV时,清理["+realRfid+"]的缓存信息");
if(Strings.isNotBlank(realRfid)){
InquiryShelfBean.agvRemoveRfid(realRfid);
}
return ResultBean.newOkResult("料架放上AGV时,清理["+realRfid+"]的缓存信息成功");
}
} }
...@@ -757,7 +757,8 @@ public class TaskService implements ITaskService { ...@@ -757,7 +757,8 @@ public class TaskService implements ITaskService {
if(outInfo != null) { if(outInfo != null) {
InquiryShelfBean.cancelReelTask(task); InquiryShelfBean.cancelReelTask(task);
Barcode barcodeObj = barcodeManager.findByBarcode(barcode); Barcode barcodeObj = barcodeManager.findByBarcode(barcode);
QisdaApi.VMIMateriaRecAss(task, barcodeObj, "E"); String latest = outInfo.getShelfLatest("E");
QisdaApi.VMIMateriaRecAss(task, barcodeObj, latest);
} }
} }
} }
...@@ -824,7 +825,8 @@ public class TaskService implements ITaskService { ...@@ -824,7 +825,8 @@ public class TaskService implements ITaskService {
OutInfo outInfo = outInfoCache.incTaskFinishNum(taskAppendInfo.gethSerial(), 0, 0); OutInfo outInfo = outInfoCache.incTaskFinishNum(taskAppendInfo.gethSerial(), 0, 0);
if(outInfo != null) { if(outInfo != null) {
InquiryShelfBean.cancelReelTask(task); InquiryShelfBean.cancelReelTask(task);
QisdaApi.VMIMateriaRecAss(task, barcode, "E"); String latest = outInfo.getShelfLatest("E");
QisdaApi.VMIMateriaRecAss(task, barcode, latest);
} }
} }
}else if(taskAppendInfo.isUrgentAction() || taskAppendInfo.isReelCutAction()){ }else if(taskAppendInfo.isUrgentAction() || taskAppendInfo.isReelCutAction()){
...@@ -1619,7 +1621,7 @@ public class TaskService implements ITaskService { ...@@ -1619,7 +1621,7 @@ public class TaskService implements ITaskService {
DataLog task = newTask(pos); DataLog task = newTask(pos);
//手动出库的当做是工单料,放到皮带线上 //手动出库的当做是工单料,放到皮带线上
task.setUrgentReel(false); task.setUrgentReel(true);
AppendInfo appendInfo = task.getAppendInfo(); AppendInfo appendInfo = task.getAppendInfo();
appendInfo.setShelfType(StorageConstants.SHEFL_TYPE.B); appendInfo.setShelfType(StorageConstants.SHEFL_TYPE.B);
...@@ -2036,20 +2038,20 @@ public class TaskService implements ITaskService { ...@@ -2036,20 +2038,20 @@ public class TaskService implements ITaskService {
//int slotIndex = task.getAppendInfo().getSlotIndex(); //int slotIndex = task.getAppendInfo().getSlotIndex();
OutInfo outInfo = outInfoCache.incOutNum(outItem.gethSerial(),outItem.getId(), task.getNum()); OutInfo outInfo = outInfoCache.incOutNum(outItem.gethSerial(),outItem.getId(), task.getNum());
String latest = outInfo.getOutLatest(); String outLatest = outInfo.getOutLatest();
QisdaApiController.OutFinished(task, barcode, latest); QisdaApiController.OutFinished(task, barcode, outLatest);
if(task.isLessSendReel()){ if(task.isLessSendReel()){
outInfo = outInfoCache.incTaskFinishNum(outItem.gethSerial(),outItem.getSlotlocation(), task.getNum()); outInfo = outInfoCache.incTaskFinishNum(outItem.gethSerial(),outItem.getSlotlocation(), task.getNum());
if(outInfo != null) { if(outInfo != null) {
//缺料补发的需求,需要进行发料 //缺料补发的需求,需要进行发料
Barcode barcodeObj = barcodeManager.findByBarcode(task.getBarcode()); Barcode barcodeObj = barcodeManager.findByBarcode(task.getBarcode());
QisdaApi.VMIMateriaRecAss(task, barcodeObj,latest); String latest = outInfo.getShelfLatest("E");
QisdaApi.VMIMateriaRecAss(task, barcodeObj, latest);
} }
} }
if (latest.equals("L")) { if (outLatest.equals("L")) {
log.info("工单[" + outItem.getSo() + "]需求单["+outItem.gethSerial()+"]的最后一盘出库完成,发送缺料通知"); log.info("工单[" + outItem.getSo() + "]需求单["+outItem.gethSerial()+"]的最后一盘出库完成,发送缺料通知");
List<OutItem> outItemList = outItemDao.findByHSerial(outItem.gethSerial()); List<OutItem> outItemList = outItemDao.findByHSerial(outItem.gethSerial());
boolean lessBind = false; boolean lessBind = false;
......
...@@ -198,7 +198,7 @@ ...@@ -198,7 +198,7 @@
</div> </div>
</display:column> </display:column>
<display:column titleKey="Slot" sortProperty="barcode.appendInfo.slotIndex" sortable="true"> <display:column titleKey="Slot" sortProperty="barcode.appendInfo.slotIndex" sortable="true">
${pos.barcode.appendInfo.slotIndex} ${pos.barcode.appendInfo.bindSlot}
</display:column> </display:column>
<%--<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true">--%> <%--<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true">--%>
......
...@@ -138,12 +138,14 @@ ...@@ -138,12 +138,14 @@
var mdate = new Date(outInfo.mdate).Format("yyyy-MM-dd hh:mm:ss"); var mdate = new Date(outInfo.mdate).Format("yyyy-MM-dd hh:mm:ss");
var sdate = new Date(outInfo.sdate).Format("yyyy-MM-dd hh:mm:ss"); var sdate = new Date(outInfo.sdate).Format("yyyy-MM-dd hh:mm:ss");
var createDate = new Date(outInfo.createDate).Format("yyyy-MM-dd hh:mm:ss");
var infoHtml = '<div class="panel '+ pannelColor+' '+ bgClass + '">' + var infoHtml = '<div class="panel '+ pannelColor+' '+ bgClass + '">' +
'<div class="panel-heading">' + '<div class="panel-heading">' +
'<h4 class="panel-title">' + '<h4 class="panel-title">' +
'<a class="accordion-toggle" data-toggle="collapse" href="#'+outInfo.hSerial+'">' + '<a class="accordion-toggle" data-toggle="collapse" href="#'+outInfo.hSerial+'">' +
moveHandle + //outInfo.firstExecuteTime + moveHandle + //outInfo.firstExecuteTime +
'需求单:'+ outInfo.hSerial+' ['+outInfo.action+'] 工单: ' + outInfo.so +' 备料单: ' + outInfo.refno + '[' + outInfo.sendStatus +'] 工单序号:' + outInfo.soseq + '需求单:'+ outInfo.hSerial+' ['+outInfo.action+'] 工单: ' + outInfo.so +' 备料单: ' + outInfo.refno + '[' + outInfo.sendStatus +'] 工单序号:' + outInfo.soseq +
'<span class="right">创建时间: '+createDate+'</span>' +
'<span class="right">建议时间: '+sdate+'</span>' + '<span class="right">建议时间: '+sdate+'</span>' +
'<span class="right">必须时间: '+mdate+'</span>' + '<span class="right">必须时间: '+mdate+'</span>' +
//'<span class="right">['+outInfo.firstExecuteTime+']</span>' + //'<span class="right">['+outInfo.firstExecuteTime+']</span>' +
...@@ -155,6 +157,7 @@ ...@@ -155,6 +157,7 @@
'<li><i class="fa fa-briefcase"></i>备料单: '+outInfo.refno+'</li>' + '<li><i class="fa fa-briefcase"></i>备料单: '+outInfo.refno+'</li>' +
'<li><i class="fa fa-calendar"></i>建议时间:'+sdate+'</li>' + '<li><i class="fa fa-calendar"></i>建议时间:'+sdate+'</li>' +
'<li><i class="fa fa-star"></i>必须出仓日期:'+mdate+'</li>' + '<li><i class="fa fa-star"></i>必须出仓日期:'+mdate+'</li>' +
'<li><i class="fa fa-star"></i>创建时间:'+createDate+'</li>' +
'</ul>' + '</ul>' +
'<h4 class="list-inline '+bgClass+'">' + '<h4 class="list-inline '+bgClass+'">' +
'线体['+outInfo.line+']未解绑料架信息: '+outInfo.lineBindShelfInfo+'' + '线体['+outInfo.line+']未解绑料架信息: '+outInfo.lineBindShelfInfo+'' +
...@@ -217,7 +220,7 @@ ...@@ -217,7 +220,7 @@
//if(!moving){ //if(!moving){
flushOutInfos(); flushOutInfos();
//} //}
}, 1000); }, 2000);
// var dragOptions = { // var dragOptions = {
......
...@@ -115,6 +115,10 @@ ...@@ -115,6 +115,10 @@
<fmt:formatDate value="${outInfo.updateDate}" pattern="yyyy-MM-dd HH:mm"/> <fmt:formatDate value="${outInfo.updateDate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column> </display:column>
<display:column titleKey="需求时间" sortable="true" sortProperty="taskNeedOutDate">
<fmt:formatDate value="${outInfo.taskNeedOutDate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column>
<display:column titleKey="checkOut.operate" media="html" sortProperty="sendStatus" sortable="true"> <display:column titleKey="checkOut.operate" media="html" sortProperty="sendStatus" sortable="true">
<c:if test="${!outInfo.sendEnd && !outInfo.closed && !outInfo.executing}"> <c:if test="${!outInfo.sendEnd && !outInfo.closed && !outInfo.executing}">
<button class="btn yellow" id="btn${outInfo.hSerial}" onclick="executeOut('${outInfo.hSerial}')"> <button class="btn yellow" id="btn${outInfo.hSerial}" onclick="executeOut('${outInfo.hSerial}')">
......
...@@ -15,6 +15,94 @@ ...@@ -15,6 +15,94 @@
<li class="timeline-purple"> <li class="timeline-purple">
<div class="timeline-time"> <div class="timeline-time">
<span class="date">2020 </span> <span class="date">2020 </span>
<span class="time">12-24 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020122415</h2>
<div class="timeline-content">
<ul>
<li>需求单E状态除最后一盘外,其他状态使用E</li>
</ul>
</div>
</div>
</li>
<li class="timeline-green">
<div class="timeline-time">
<span class="date">2020</span>
<span class="time">12-15</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020121514</h2>
<div class="timeline-content">
<ul>
<li>AGV从双层线拉上料架时,清理料架信息,使料架可以重复使用</li>
</ul>
</div>
</div>
</li>
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">12-14 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020121414</h2>
<div class="timeline-content">
<ul>
<li>查询料盘绑定接口增加slot字段,当slot大于0时为真实绑定,其他为预绑定</li>
<li>需求单最后一盘E状态修改为EL</li>
<li>排队页面增加需求单创建时间</li>
<li>需求单页面增加需求时间</li>
</ul>
</div>
</div>
</li>
<li class="timeline-yellow">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">12-02 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020120219</h2>
<div class="timeline-content">
<ul>
<li>Fixed: 补料需求单无对应预补料需求单问题</li>
</ul>
</div>
</div>
</li>
<li class="timeline-grey">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">12-02 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2020120210</h2>
<div class="timeline-content">
<ul>
<li>Fixed:获取工单小料盘绑定数量接口参数为多个工单序号时有误的问题</li>
</ul>
</div>
</div>
</li>
<li class="timeline-purple">
<div class="timeline-time">
<span class="date">2020 </span>
<span class="time">11-27 </span> <span class="time">11-27 </span>
</div> </div>
<div class="timeline-icon"> <div class="timeline-icon">
......
...@@ -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.11.27</span> <span class="right" style="color: #a3a3a3;">Version: 2020.12.24</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!