Commit 8cda1ca8 sunke

Fixed:由接收到需求单绑定修改为只真实绑定前两个需求单时产生的替代料未解绑预绑定料盘的问题

暂时去除未维护尺寸的物料不允许入库的卡关
Fixed: 机器人抓取料盘时,未维护尺寸的物料导致获取不到架位信息
解绑线外发分盘料对应料站时,增加是否已有任务的验证
线外发分盘料时,对应站位绑定料盘全部解绑
料盘尺寸必须全部维护,未维护尺寸的物料不允许入库
检查工单料架是否解绑使用新接口,显示剩余料盘数
排队页面去掉红框显示
排队页面鼠标悬停时,如果有未解绑料架进行提示
1 个父辈 2c67990a
...@@ -398,7 +398,7 @@ public class StoragePosDaoImpl extends AbstractMongoDao implements IStoragePosDa ...@@ -398,7 +398,7 @@ public class StoragePosDaoImpl extends AbstractMongoDao implements IStoragePosDa
@Override @Override
public List<StoragePos> findBindList(String soseq, int slotlocation) { public List<StoragePos> findBindList(String soseq, int slotlocation) {
String bindSlot = "" + slotlocation; String bindSlot = "" + slotlocation;
Criteria c = Criteria.where("barcode.appendInfo.soseq").is(soseq).and("barcode.appendInfo.bindSlot").is(bindSlot); Criteria c = Criteria.where("barcode.appendInfo.soseq").is(soseq).and("barcode.appendInfo.preBindSlot").is(bindSlot);
//去除的仓位 //去除的仓位
Query q = new Query(c); Query q = new Query(c);
q.with(new Sort(Sort.Direction.ASC, "barcode.amount")); q.with(new Sort(Sort.Direction.ASC, "barcode.amount"));
......
...@@ -703,7 +703,7 @@ public class QisdaApi { ...@@ -703,7 +703,7 @@ public class QisdaApi {
log.info("程序调试阶段,暂不处理,调试完成后更改PRO"); log.info("程序调试阶段,暂不处理,调试完成后更改PRO");
return ""; return "";
} }
String url = "http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/GetSerialData"; String url = "http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/GetSerialDataNew";
Map<String,Object> paramMap = new HashMap<String,Object>(); Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("line",line); paramMap.put("line",line);
paramMap.put("hserial",hserial); paramMap.put("hserial",hserial);
......
...@@ -280,7 +280,7 @@ public class OutInfoCache { ...@@ -280,7 +280,7 @@ public class OutInfoCache {
* @param outInfo * @param outInfo
* @param eventMsg * @param eventMsg
*/ */
private OutInfo addEventItem(OutInfo outInfo, String eventMsg){ public OutInfo addEventItem(OutInfo outInfo, String eventMsg){
EventItem eventItem = EventItem.newEvent(eventMsg); EventItem eventItem = EventItem.newEvent(eventMsg);
outInfo.addEventItem(eventItem); outInfo.addEventItem(eventItem);
outInfoDao.updateEventList(outInfo.gethSerial(),outInfo.getEventItems()); outInfoDao.updateEventList(outInfo.gethSerial(),outInfo.getEventItems());
...@@ -1253,8 +1253,12 @@ public class OutInfoCache { ...@@ -1253,8 +1253,12 @@ public class OutInfoCache {
}else{ }else{
msg = "需求单"+outInfo.gethSerial()+"本次出库料盘数量为0"; msg = "需求单"+outInfo.gethSerial()+"本次出库料盘数量为0";
if(outInfo.isEndOutInfo()){ if(outInfo.isEndOutInfo()){
log.info("需求单["+outInfo.gethSerial()+"]是工单的最后一个需求单,关闭工单"+outInfo.getSo()+"["+outInfo.getSoseq()+"]"); log.info("需求单["+outInfo.gethSerial()+"]出库数量为0且是工单的最后一个需求单,关闭工单"+outInfo.getSo()+"["+outInfo.getSoseq()+"]");
closeSoSeq(outInfo.getSoseq()); closeSoSeq(outInfo.getSoseq());
}else{
String event = "需求单出库数量为0,关闭";
addEventItem(outInfo, event);
closeHSerial(outInfo.gethSerial());
} }
} }
...@@ -1573,9 +1577,9 @@ public class OutInfoCache { ...@@ -1573,9 +1577,9 @@ public class OutInfoCache {
List<StoragePos> bindPosList = storagePosDao.findBindList(outItem.getSoseq(), outItem.getSlotlocation()); List<StoragePos> bindPosList = storagePosDao.findBindList(outItem.getSoseq(), outItem.getSlotlocation());
StoragePos maxQtyReelPos = null; StoragePos maxQtyReelPos = null;
OutItem totalOutInfo = soseqCache.getCutOutItem(outItem.getSoseq(), outItem.getSlotlocation()); OutItem totalOutItem = soseqCache.getCutOutItem(outItem.getSoseq(), outItem.getSlotlocation());
if(totalOutInfo != null){ if(totalOutItem != null){
if(totalOutInfo.getSendQty() >= totalOutInfo.getQty()){ if(totalOutItem.getSendQty() >= totalOutItem.getQty()){
log.info("工单序号"+outItem.getSoseq()+"["+outItem.getSlotlocation()+"]发料总数量已达到需求单数量,不再发料"); log.info("工单序号"+outItem.getSoseq()+"["+outItem.getSlotlocation()+"]发料总数量已达到需求单数量,不再发料");
outItem.setFixedQty(-1); outItem.setFixedQty(-1);
outItemDao.save(outItem); outItemDao.save(outItem);
...@@ -1594,19 +1598,26 @@ public class OutInfoCache { ...@@ -1594,19 +1598,26 @@ public class OutInfoCache {
Collection<String> excludePosIds = taskService.excludePosIds(); Collection<String> excludePosIds = taskService.excludePosIds();
//本次发送的数量
int currentSendQty = 0;
for (StoragePos pos : bindPosList) { for (StoragePos pos : bindPosList) {
if(sendQty >= fixQty){ if(sendQty >= fixQty){
break; break;
} }
if(totalOutItem.getSendQty() + currentSendQty >= totalOutItem.getQty()){
log.info("工单序号"+outItem.getSoseq()+"["+outItem.getSlotlocation()+"]发料总数量加上本次发料数量已达到需求单数量,不再发料");
break;
}
if(excludePosIds.contains(pos.getId())){ if(excludePosIds.contains(pos.getId())){
log.info("任务列表中已有库位["+pos.getPosName()+"]的任务,忽略当前库位,继续查找下一个"); log.info("任务列表中已有库位["+pos.getPosName()+"]的任务,忽略当前库位,继续查找下一个");
continue; continue;
} }
if(maxQtyReelPos != null && maxQtyReelPos.getId().equals(pos.getId())){ if(maxQtyReelPos != null && maxQtyReelPos.getId().equals(pos.getId())){
if(totalOutInfo.getFixedQty() == totalOutInfo.getQty()){ if(totalOutItem.getFixedQty() == totalOutItem.getQty()){
//未修正过 //未修正过
fixQty = totalOutInfo.getQty() - maxQtyReelPos.getBarcode().getAmount(); fixQty = totalOutItem.getQty() - maxQtyReelPos.getBarcode().getAmount();
outItem.setFixedQty(fixQty); outItem.setFixedQty(fixQty);
outItemDao.save(outItem); outItemDao.save(outItem);
updateOutItem(outItem.getId()); updateOutItem(outItem.getId());
...@@ -1624,6 +1635,7 @@ public class OutInfoCache { ...@@ -1624,6 +1635,7 @@ public class OutInfoCache {
task = dataLogDao.save(task); task = dataLogDao.save(task);
tasks.add(task); tasks.add(task);
sendQty = sendQty + posBarcode.getAmount(); sendQty = sendQty + posBarcode.getAmount();
currentSendQty = currentSendQty + posBarcode.getAmount();
} }
return tasks; return tasks;
} }
......
...@@ -337,6 +337,25 @@ public class QisdaApiController extends BaseController { ...@@ -337,6 +337,25 @@ public class QisdaApiController extends BaseController {
OutItem cutOutItem = soseqCache.getCutOutItem(soseq, Integer.valueOf(slotserial)); OutItem cutOutItem = soseqCache.getCutOutItem(soseq, Integer.valueOf(slotserial));
if(cutOutItem != null){ if(cutOutItem != null){
if(cutOutItem.isCutMaterial()){
OutInfo cutOutInfo = soseqCache.getCutActionInfoFromCache(soseq);
cutOutInfo = outInfoCache.addEventItem(cutOutInfo,"线外发料,解绑站位["+slotserial+"]");
soseqCache.addTotalOutInfo(cutOutInfo);
//分盘料线外发料,全部分盘料进行解绑
List<StoragePos> bindPosList = storagePosDao.findBindList(soseq, Integer.valueOf(slotserial));
for (StoragePos storagePos : bindPosList) {
Barcode barcode = storagePos.getBarcode();
boolean hasTask = taskService.excludePosIds().contains(storagePos.getId());
if(hasTask){
log.info(barcode.getBarcode() + "["+storagePos.getPosName()+"]已有任务,不解绑");
}else{
log.info(reelid+"["+pn+"]线外发料,解除["+barcode.getBarcode()+"]的工单so=["+barcode.getAppendInfo().getSo()+"]soseq=["+barcode.getAppendInfo().getSoseq()+"]的站位["+slotserial+"]绑定");
storagePosDao.unbindReel(storagePos);
}
}
}
//更新发料数量,更新真实绑定数量 //更新发料数量,更新真实绑定数量
soseqCache.addToTotalSendQty(cutOutItem,outSendQty); soseqCache.addToTotalSendQty(cutOutItem,outSendQty);
int realBindQty = cutOutItem.getRealLockQty() + outSendQty; int realBindQty = cutOutItem.getRealLockQty() + outSendQty;
......
...@@ -76,7 +76,7 @@ public class StorageDataController extends BaseController { ...@@ -76,7 +76,7 @@ public class StorageDataController extends BaseController {
private UserManager userManager; private UserManager userManager;
@Autowired @Autowired
private ExpireMailUtil expireMailUtil; private IComponentManager componentManager;
@Autowired @Autowired
private ILiteOrderDao liteOrderDao; private ILiteOrderDao liteOrderDao;
...@@ -601,7 +601,10 @@ public class StorageDataController extends BaseController { ...@@ -601,7 +601,10 @@ public class StorageDataController extends BaseController {
try { try {
Barcode barcode = dataCache.resolveOneValideBarcode(code); Barcode barcode = dataCache.resolveOneValideBarcode(code);
// Component component = componentManager.findProviderPn(barcode.getPartNumber(),barcode.getProvider());
// if(component != null && !component.isSizeConfirmed()){
// throw new ValidateException("条码["+barcode.getBarcode()+"]对应的物料 "+component.getPartNumber()+" ["+component.getProvider()+"]未维护尺寸");
// }
for (DataLog dataLog : taskService.getAllTasks()) { for (DataLog dataLog : taskService.getAllTasks()) {
if(!dataLog.isPackageReel()){ if(!dataLog.isPackageReel()){
//已经在任务当中,返回对应的信息 //已经在任务当中,返回对应的信息
......
...@@ -185,6 +185,17 @@ ...@@ -185,6 +185,17 @@
<script type="text/javascript"> <script type="text/javascript">
escapeHtml = function (str){
var temp = "";
if(str.length == 0) return "";
temp = str.replace(/&/g,"&amp;");
temp = temp.replace(/</g,"&lt;");
temp = temp.replace(/>/g,"&gt;");
temp = temp.replace(/\s/g,"&nbsp;");
temp = temp.replace(/\'/g,"&#39;");
temp = temp.replace(/\"/g,"&quot;");
return temp;
}
function getOutInfoHtml(outInfo){ function getOutInfoHtml(outInfo){
//var index = parseInt(i) + 1; //var index = parseInt(i) + 1;
//var outItems = outInfo.outItems; //var outItems = outInfo.outItems;
...@@ -202,7 +213,7 @@ ...@@ -202,7 +213,7 @@
var bindShelfInfo = outInfo.lineBindShelfInfo; var bindShelfInfo = outInfo.lineBindShelfInfo;
if(bindShelfInfo){ if(bindShelfInfo){
bgClass = 'bg-red'; //bgClass = 'bg-red';
}else{ }else{
if(outInfo.firstExecuteTime > 0 && outInfo.taskNum <=0){ if(outInfo.firstExecuteTime > 0 && outInfo.taskNum <=0){
bgClass = "bg-blue"; bgClass = "bg-blue";
...@@ -213,7 +224,12 @@ ...@@ -213,7 +224,12 @@
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 createDate = new Date(outInfo.createDate).Format("yyyy-MM-dd hh:mm:ss");
var infoHtml = '<div class="panel '+ pannelColor+' '+ bgClass + '">' +
var collapseClass = "";
// if($("#"+outInfo.hSerial).hasClass("in")){
// collapseClass = " in";
// };
var infoHtml = '<div title="'+escapeHtml(outInfo.lineBindShelfInfo)+'" 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+'">' +
...@@ -224,7 +240,7 @@ ...@@ -224,7 +240,7 @@
'<span class="right">必须时间: '+mdate+'</span>' + '<span class="right">必须时间: '+mdate+'</span>' +
//'<span class="right">['+outInfo.firstExecuteTime+']</span>' + //'<span class="right">['+outInfo.firstExecuteTime+']</span>' +
'</a></h4></div>' + '</a></h4></div>' +
'<div id="'+outInfo.hSerial+'" class="panel-collapse collapse">' + '<div id="'+outInfo.hSerial+'" class="panel-collapse collapse '+collapseClass+'">' +
'<div class="panel-body bg-grey">' + '<div class="panel-body bg-grey">' +
'<ul class="list-inline">' + '<ul class="list-inline">' +
'<li><i class="fa fa-tasks"></i>工单: '+outInfo.so+'</li>' + '<li><i class="fa fa-tasks"></i>工单: '+outInfo.so+'</li>' +
...@@ -255,6 +271,9 @@ ...@@ -255,6 +271,9 @@
for(var i in data){ for(var i in data){
var outInfo = data[i]; var outInfo = data[i];
if(outInfo.preTailAction){
continue;
}
var infoHtml = getOutInfoHtml(outInfo); var infoHtml = getOutInfoHtml(outInfo);
if(outInfo.executing || outInfo.sendLess || outInfo.firstExecuteTime > 0){ if(outInfo.executing || outInfo.sendLess || outInfo.firstExecuteTime > 0){
if(!outInfo.taskEnd && (outInfo.firstReelAction || outInfo.tailAction)){ if(!outInfo.taskEnd && (outInfo.firstReelAction || outInfo.tailAction)){
...@@ -328,7 +347,7 @@ ...@@ -328,7 +347,7 @@
//if(!moving){ //if(!moving){
flushOutInfos(); flushOutInfos();
//} //}
}, 2000); }, 3000);
// var dragOptions = { // var dragOptions = {
......
...@@ -15,6 +15,97 @@ ...@@ -15,6 +15,97 @@
<li class="timeline-green"> <li class="timeline-green">
<div class="timeline-time"> <div class="timeline-time">
<span class="date">2021</span> <span class="date">2021</span>
<span class="time">07-28</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021072818</h2>
<div class="timeline-content">
<ul>
<li>Fixed:由接收到需求单绑定修改为只真实绑定前两个需求单时产生的替代料未解绑预绑定料盘的问题</li>
</ul>
</div>
</div>
</li>
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">07-27</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021072710</h2>
<div class="timeline-content">
<ul>
<li>暂时去除未维护尺寸的物料不允许入库的卡关</li>
</ul>
</div>
</div>
</li>
<li class="timeline-yellow">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">07-26</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021072618</h2>
<div class="timeline-content">
<ul>
<li>Fixed: 机器人抓取料盘时,未维护尺寸的物料导致获取不到架位信息</li>
<li>解绑线外发分盘料对应料站时,增加是否已有任务的验证</li>
</ul>
</div>
</div>
</li>
<li class="timeline-grey">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">07-26</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021072614</h2>
<div class="timeline-content">
<ul>
<li>线外发分盘料时,对应站位绑定料盘全部解绑</li>
<li>料盘尺寸必须全部维护,未维护尺寸的物料不允许入库</li>
<li>检查工单料架是否解绑使用新接口,显示剩余料盘数</li>
<li>排队页面去掉红框显示</li>
<li>排队页面鼠标悬停时,如果有未解绑料架进行提示</li>
</ul>
</div>
</div>
</li>
<li class="timeline-purple">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">07-13</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V20210721314</h2>
<div class="timeline-content">
<ul>
<li>到达出库时间时,关闭没有出库料盘的需求单</li>
<li>隐藏预补料需求单</li>
</ul>
</div>
</div>
</li>
<li class="timeline-green">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">07-06</span> <span class="time">07-06</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: 2021.07.06</span> <span class="right" style="color: #a3a3a3;">Version: 2021.07.28</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!