Commit 00e6858a sunke

需求单增加查询条件, 从Qisda获取库存进行比对

1 个父辈 3a9dbd16
......@@ -61,11 +61,18 @@ public class DifferentInventoryController extends BaseController {
* @param request
* @return
*/
@RequestMapping("/qisda/diffInventory")
public String dnIn(HttpServletRequest request){
@RequestMapping("/qisda/diffInventory.html")
public String dnIn(HttpServletRequest request) throws ApiException {
String file = request.getParameter("file");
Map<String,DiffInfo> qisdaReelMap = null;
if(!Strings.isNullOrEmpty(file)){
log.info("开始比对:" + file);
qisdaReelMap = readQisda(file);
}else{
log.info("开始与Qisda比对库存");
qisdaReelMap = QisdaApiController.getInventory();
}
List<StoragePos> posList = storagePosManager.findNotEmpty();
Map<String,DiffInfo> neotelReelMap = new HashMap<>();
......@@ -80,7 +87,7 @@ public class DifferentInventoryController extends BaseController {
neotelReelMap.put(barcode.getBarcode(), diffInfo);
}
Map<String,DiffInfo> qisdaReelMap = readQisda(file);
List<DiffInfo> neotelReels = new ArrayList<>();
......@@ -106,6 +113,7 @@ public class DifferentInventoryController extends BaseController {
qisdaDiffReels.add(qisdaReelMap.get(reelId));
}
}
log.info("与Qisda库存比对完成");
request.setAttribute("boxReels", neotelReels);
request.setAttribute("qisdaReels", qisdaDiffReels);
request.setAttribute("sameDiffList", sameDiffList);
......
......@@ -2,9 +2,12 @@ package com.myproject.webapp.controller.qisda;
import com.myproject.bean.search.BaseSearchCriteria;
import com.myproject.bean.search.PageList;
import com.myproject.bean.update.qisda.OutItem;
import com.myproject.dao.mongo.ILiteOrderDao;
import com.myproject.dao.mongo.qisda.IOutInfoDao;
import com.myproject.dao.mongo.qisda.IOutItemDao;
import com.myproject.webapp.controller.storage.BaseSearchController;
import org.apache.logging.log4j.util.Strings;
import org.displaytag.properties.SortOrderEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -15,6 +18,8 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
......@@ -27,13 +32,33 @@ public class OutInfoSearchController extends BaseSearchController {
@Autowired
protected IOutInfoDao outInfoDao;
@Autowired
protected IOutItemDao outItemDao;
@RequestMapping("/outInfoSearch*")
public String onSubmit(@ModelAttribute("searchCriteria") BaseSearchCriteria searchCriteria, HttpServletRequest request) {
Query query = new Query();
Criteria criteria = new Criteria();
addLikeParam(request,criteria,"so");
String reelId = request.getParameter("reelId");
if(Strings.isNotBlank(reelId)){
Pattern pattern = Pattern.compile(reelId, Pattern.CASE_INSENSITIVE);
Criteria c = Criteria.where("reelID").regex(pattern);
List<OutItem> itemList = outItemDao.findByQuery(new Query(c));
List<String> hSerialList = new ArrayList<>();
for (OutItem outItem : itemList) {
hSerialList.add(outItem.gethSerial());
}
criteria.and("hSerial").in(hSerialList);
request.setAttribute("reelId",reelId);
}else{
addLikeParam(request,criteria,"hSerial");
}
query.addCriteria(criteria);
PageList pageList = searchCriteria.getPageList();
......
......@@ -143,13 +143,13 @@ public class QisdaController extends BaseController {
return "move";
}else{
//料串和包装料料架
if(StorageConstants.SHEFL_TYPE.isAShelf(rfid) || StorageConstants.SHEFL_TYPE.isBShelf(rfid) ){
if(currentDnInfo != null){
rfidDnMap.put(rfid, currentDnInfo);
log.info("自动绑定["+rfid+"]"+ currentDnInfo.getShowStr());
return "move";
}
}
// if(StorageConstants.SHEFL_TYPE.isAShelf(rfid) || StorageConstants.SHEFL_TYPE.isBShelf(rfid) ){
// if(currentDnInfo != null){
// rfidDnMap.put(rfid, currentDnInfo);
// log.info("自动绑定["+rfid+"]"+ currentDnInfo.getShowStr());
// return "move";
// }
// }
}
return "stop";
}
......@@ -206,9 +206,9 @@ public class QisdaController extends BaseController {
String rfid = request.getParameter("rfid");
String dnNo = request.getParameter("dnNo");
String facility = request.getParameter("facility");
if(Strings.isNullOrEmpty(rfid)){
rfid = vimRfid;
}
// if(Strings.isNullOrEmpty(rfid)){
// rfid = vimRfid;
// }
if(Strings.isNullOrEmpty(rfid)){
return "x未读到RFID";
}
......
......@@ -410,6 +410,42 @@ public class QisdaApiController extends BaseController {
return msg;
}
public static Map<String,DiffInfo> getInventory() throws ApiException{
String url = "http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/VMIStcok";
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("area","4D");
log.info("从Qisda获取库存信息进行比对");
Map<String,DiffInfo> diffInfoMap = new HashMap<>();
String result = HttpHelper.postParam(url,paramMap);
log.info("Qisda获取库存信息进行比对返回:" + result);
Map<String, Object> resultMap = JsonUtil.toMap(result);
String code = resultMap.get("code").toString();
if(code.equals("200")){
List<Map<String,Object>> data = (List<Map<String, Object>>) resultMap.get("data");
for (Map<String, Object> itemMap : data) {
DiffInfo diffInfo = new DiffInfo();
String partno = itemMap.get("partno").toString();
String facility = itemMap.get("facility").toString();
String location = itemMap.get("location").toString();
String reelid = itemMap.get("reelid").toString();
String qty = itemMap.get("qty").toString();
diffInfo.setPn(partno);
diffInfo.setReelId(reelid);
diffInfo.setLocation(location);
diffInfo.setQty(qty);
diffInfo.setFacility(facility);
diffInfoMap.put(reelid,diffInfo);
}
}else{
String errorMsg = " Qisda获取库存信息进行比对转换出错:" + resultMap.get("msg");
log.info(errorMsg);
throw new ApiException(errorMsg);
}
return diffInfoMap;
}
/**
*
......@@ -889,8 +925,10 @@ public class QisdaApiController extends BaseController {
public static Barcode VMILocationInCheck(Barcode barcode) throws ValidateException{
String url = "http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/VMILocationInCheck";
String reelid = barcode.getBarcode();
String partNum = barcode.getPartNumber();
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("reelid",reelid);
paramMap.put("partNum",partNum);
log.info("纯入库判断参数:reelid=" + reelid);
try {
......
......@@ -233,6 +233,9 @@ public class QisdaDeviceController extends BaseController {
//包装料RFID
String packageRfid = request.getParameter("packageRfid");
String hSerial = outInfoCache.getCurrentOrderHSerial();
if(hSerial.isEmpty()){
return ResultBean.newErrorResult(-2, "未找到大料架["+bigRfid+"]");
}
log.info("收到机器人[3]获取包装料摆放位置信息请求:[packageRfid=" + packageRfid + "]bigRfid=" + bigRfid + "当前工单料需求:["+hSerial+"]");
ShelfInfo packageShelf = inquiryShelfBean.findPackageShelf(hSerial, packageRfid);
......@@ -427,7 +430,7 @@ public class QisdaDeviceController extends BaseController {
taskService.updateFinishedTask(task);
String hSerial = outInfoCache.getCurrentOrderHSerial();
String hSerial = appendInfo.gethSerial();
List<String> usedRfidList = inquiryShelfBean.getUsedRfidList(hSerial);
Map<String,Object> resultMap = new HashMap<>();
......@@ -564,10 +567,10 @@ public class QisdaDeviceController extends BaseController {
if(cacheTask.isUrgentReel() || cacheTask.isCutReel()){
log.info("分盘料和紧急料不需要通知Qisda");
}else{
if(DataCache.isProductionFor(DataCache.CUSTOMER.QISDA)){
Barcode barcodeObj = barcodeManager.findByBarcode(cacheTask.getBarcode());
if(barcodeObj.needToQisda()){
String latest = outInfo.getShelfLatest();
QisdaApiController.VMIMateriaRecAss(cacheTask, barcodeObj,latest);
//发料完成,更新发料数量
int slotSeq = appendInfo.getSlotIndex();
......@@ -577,12 +580,6 @@ public class QisdaDeviceController extends BaseController {
outItem.setSendQty(sendQty);
outItemDao.save(outItem);
outInfoCache.updateOutItem(outItem.getId());
}else{
log.info("放置小车完成,条码["+barcodeObj.getBarcode()+"]不需要通知Qisda");
}
}else{
log.info("放置小车完成通知Qisda接口关闭");
}
}
}
}
......@@ -715,6 +712,9 @@ public class QisdaDeviceController extends BaseController {
int packageEmpty = 0;
String hSerial = outInfoCache.getCurrentOrderHSerial();
if(cacheTask != null){
hSerial = cacheTask.getAppendInfo().gethSerial();
}
ShelfInfo shelfInfo = inquiryShelfBean.findSameShelf(hSerial,rfid);
if(shelfInfo != null){
Map<Integer, ShelfLoc> locMap = shelfInfo.getLocMap();
......@@ -768,10 +768,12 @@ public class QisdaDeviceController extends BaseController {
log.info("当前任务数:" + resultMap);
}else{
if(!hSerial.isEmpty()){
log.info("工单总任务数为0,清空当前的工单序号["+hSerial+"]");
if(!usedRfidList.isEmpty()){
log.info("工单总任务数为0,且工单有料架已经绑定,清空当前的工单序号["+hSerial+"]");
outInfoCache.setCurrentOrderHSerial(null);
}
}
}
return ResultBean.newOkResult(resultMap);
}catch(Exception e){
......
......@@ -41,7 +41,10 @@
<div class="portlet-title">
<div class="caption">
<div><span id="currentOp"> </span>当前料架:<span id="vmiRFID"></span><input type="text" class="form-control" id="useRFID"/></div>
<div>
<span id="currentOp"> </span>
<%--当前料架:<span id="vmiRFID"></span>--%>
</div>
</div>
<ul class="nav nav-tabs">
<li class="active">
......@@ -52,30 +55,48 @@
<a href="#portlet_tab_2" data-toggle="tab" id="facilityTab">
Facility收料</a>
</li>
<li class="">
<a href="#portlet_tab_3" data-toggle="tab" id="inTab">
纯入库</a>
</li>
<%--<li class="">--%>
<%--<a href="#portlet_tab_3" data-toggle="tab" id="inTab">--%>
<%--纯入库</a>--%>
<%--</li>--%>
</ul>
</div>
<div class="portlet-body">
<div class="tab-content">
<div class="tab-pane active" id="portlet_tab_1">
<div class="row">
<div class="col-md-6 col-sm-6">
<input type="text" class="form-control" id="scan-dn" value="DNMISW1911197845"/>
<div class="col-md-5 col-sm-5">
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<span class="input-group-addon"><fmt:message key="DN单"/></span>
<input type="text" class="form-control input-xlarge" id="scan-dn" value=""/>
</div>
</div>
<div class="col-md-6 col-sm-6">
<button type="button" class="btn green" onclick="bindDn('DN')"><i class="fa fa-sign-in"></i><fmt:message key="绑定"/></button>
</div>
<div class="col-md-3 col-sm-3">
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<span class="input-group-addon"><fmt:message key="料架"/></span>
<input type="text" class="form-control input-small" id="dnRfid"/>
</div>
</div>
</div>
<div class="col-md-4 col-sm-4">
<button type="button" class="btn green margin-top-10 " onclick="bindDn('DN')"><i class="fa fa-sign-in"></i><fmt:message key="绑定"/></button>
</div>
</div>
</div>
<div class="tab-pane" id="portlet_tab_2">
<div class="row">
<div class="col-md-6 col-sm-6">
<select class="form-control" data-placeholder="Select..." id="facility">
<option value="AAA-TEST">AAA-TEST</option>
<div class="col-md-5 col-sm-5">
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<span class="input-group-addon"><fmt:message key="Facility"/></span>
<select class="form-control input-xlarge" data-placeholder="Select..." id="facility">
<option value=""></option>
<option value="S5-BACHS">S5-BACHS</option>
<option value="S9-BACHS">S9-BACHS</option>
<option value="SC-BACHS">SC-BACHS</option>
......@@ -96,9 +117,19 @@
<option value="SZ-BACHOS">SZ-BACHOS</option>
</select>
</div>
<div class="col-md-6 col-sm-6">
<button type="button" class="btn green" onclick="bindDn('Facility')"><i class="fa fa-sign-in"></i><fmt:message key="绑定"/></button>
</div>
</div>
<div class="col-md-3 col-sm-3">
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<span class="input-group-addon"><fmt:message key="料架"/></span>
<input type="text" class="form-control input-small" id="facilityRfid"/>
</div>
</div>
</div>
<div class="col-md-4 col-sm-4">
<button type="button" class="btn green margin-top-10" onclick="bindDn('Facility')"><i class="fa fa-sign-in"></i><fmt:message key="绑定"/></button>
</div>
</div>
......@@ -183,7 +214,11 @@
$.post("${ctx}/service/store/qisda/dnInfo", {}, function (dnInfo) {
$(".dataTableBody").html("");
if(dnInfo){
$("#currentOp").text("当前操作: "+ dnInfo.showStr);
var currentOp = "当前操作: "+ dnInfo.showStr;
if(currentOp != $("#currentOp").text()){
$("#currentOp").text(currentOp);
}
var data = dnInfo.items;
var thread = "";
if(dnInfo.cisIn){
......@@ -263,6 +298,7 @@
bindDn = function(type){
var params = {};
var useRFID = "";
if(type == 'DN'){
var dnNo = $("#scan-dn").val().trim();
if(dnNo == ''){
......@@ -270,17 +306,24 @@
return;
}else{
params["dnNo"] = dnNo;
var dnRfid = $("#dnRfid").val();
params["rfid"]=dnRfid;
$("#dnRfid").val("");
$("#scan-dn").val("");
}
}else if(type == 'Facility'){
var facility = $("#facility").val();
params["facility"] = facility;
var facilityRfid = $("#facilityRfid").val();
params["rfid"]=facilityRfid;
$("#facilityRfid").val("");
$("#facility").val("");
}else{
}
var useRFID = $("#useRFID").val();
params["rfid"]=useRFID;
$("#useRFID").val("");
params["stopCurrent"]=true;
$.post("${ctx}/service/store/qisda/bindDn", params, function (data) {
if(data.indexOf("c") == 0){
......@@ -311,7 +354,7 @@
}
setInterval(function(){
flushVmiRfid();
//flushVmiRfid();
flushDnItems();
}, 1000);
......
......@@ -10,6 +10,9 @@
height: 360px;
overflow-y: scroll;
}
.td-item{
display: block;
}
</style>
<!-- BEGIN PAGE HEADER-->
......@@ -134,7 +137,15 @@
var dnQty = data[i].dnQty;
var inQty = data[i].inQty;
var diff = inQty - dnQty;
table.row.add( [ index, data[i].pn, data[i].facility, data[i].company, inQty+"/"+dnQty,diff,data[i].dnDateStr] );
var diffColor = "";
if(diff < 0){
diffColor = "bg-red";
}else if(diff > 0){
diffColor = "bg-yellow";
}
var diffInfoStr = "<span class='"+diffColor+" td-item'>"+diff+"</span>";
table.row.add( [ index, data[i].pn, data[i].facility, data[i].company, inQty+"/"+dnQty,diffInfoStr,data[i].dnDateStr] );
}
table.order( [ 0, 'asc' ] ).draw();
......
......@@ -34,7 +34,7 @@
</div>
</div>
<div class="portlet-body">
<form id="searchCriteria" class="form-horizontal form-bordered" action="" method="post">
<form id="searchCriteria" class="form-horizontal form-bordered" action="${ctx}/qisda/outInfoSearch.html" method="post">
<div class="form-group">
<label class="control-label col-md-1"><fmt:message key="需求单号"/></label>
......@@ -45,6 +45,22 @@
</div>
</div>
<label class="control-label col-md-1"><fmt:message key="工单号"/></label>
<div class="col-md-2">
<div style="text-align:left" class="input-group">
<input type="text" name="so" class="form-control" value="${so}"/>
</div>
</div>
<label class="control-label col-md-1"><fmt:message key="ReelId"/></label>
<div class="col-md-2">
<div style="text-align:left" class="input-group">
<input type="text" name="reelId" class="form-control" value="${reelId}"/>
</div>
</div>
<div class="col-md-2">
<button class="btn purple" type="submit"><i class="fa fa-search"></i>
<fmt:message key="button.search"/>
......@@ -72,6 +88,9 @@
<display:column titleKey="任务" sortable="true" sortProperty="mdate">
${outInfo.taskFinishNum}/${outInfo.taskNum}
</display:column>
<display:column titleKey="创建时间" sortable="true" sortProperty="createDate">
<fmt:formatDate value="${outInfo.createDate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column>
<display:column titleKey="checkOut.operate" media="html">
<c:if test="${outInfo.sendStatus != 2 && outInfo.taskNum == 0}">
......@@ -156,6 +175,8 @@
$("#detailTitle").html(hSerial);
$("#theItems").html("");
$.post("${ctx}/service/store/qisda/outDetail", {hSerial: hSerial}, function (outInfo) {
$("#detailTitle").html("需求单: "+ outInfo.hSerial + " 工单: " + outInfo.so + " ["+outInfo.action+"]");
var data = outInfo.outItems;
var table = $('#itemsTable').DataTable();
table.clear();
......
......@@ -10,21 +10,21 @@
<fmt:message key="menu.product.component"/><span class="selected">
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/componentSearch.html?type=1" name="component">
<fmt:message key="menu.product.solder"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/componentSearch.html?type=2" name="component">
<fmt:message key="menu.product.pcb"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/componentSearch.html?type=3" name="component">
<fmt:message key="menu.product.others"/><span class="selected"></span>
</a>
</li>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/componentSearch.html?type=1" name="component">--%>
<%--<fmt:message key="menu.product.solder"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/componentSearch.html?type=2" name="component">--%>
<%--<fmt:message key="menu.product.pcb"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/componentSearch.html?type=3" name="component">--%>
<%--<fmt:message key="menu.product.others"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
</ul>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_DATALOG">
......@@ -49,6 +49,11 @@
<fmt:message key="出库"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/qisda/diffInventory.html" name="qisda">
<fmt:message key="库存"/><span class="selected"></span>
</a>
</li>
</ul>
</security:authorize>
<%--Work Order--%>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!