Commit dcc32d1c LN

1.设备上线时需要同步reel到韩华。

2.工单详情相同PN会有重复数据。
3.韩华RequestDeliveryOrder同时只执行一个工单,如有未关闭的返回2014。
4.
1 个父辈 1f4db1e4
......@@ -871,7 +871,10 @@ public class BaseDeviceHandler implements IDeviceHandler {
//状态变化
if(statusBean.getStatus()!=preStatus){
smfApi.deviceStatusChanges(new String[]{statusBean.getCid()},new Integer[]{statusBean.getStatus()});
//如果是从离线到上线,或者从上线到离线才通知
if(preStatus==-1||preStatus==0){
smfApi.deviceStatusChanges(new String[]{statusBean.getCid()},new Integer[]{statusBean.getStatus()});
}
}
// //判断是否刚刚上线
......
......@@ -587,7 +587,8 @@ public class LiteOrderCache {
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
log.info("工单[" + orderNo + "]出库前需要进行缺料检查");
log.info("工单[" + orderNo + "]出库前需要进行缺料检查"); //需要过滤掉刚刚查找到的库位号
List<String> findPosIds=new ArrayList<>();
//其他出库模式一次性全部生成任务
List<LiteOrderItem> newItems = new ArrayList<>();
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
......@@ -600,6 +601,7 @@ public class LiteOrderCache {
int remainReelCount = orderItem.getNeedReelCount() - orderItem.getTotalOutReelCount();
Collection<String> excludePosIds = excludeOutPosIds();
excludePosIds.addAll(findPosIds);
//此PN未完成
if (remainNum > 0 || remainReelCount > 0) {
if (outBom) {
......@@ -640,9 +642,10 @@ public class LiteOrderCache {
liteOrderItemManager.save(orderItem);
break;
} else {
findPosIds.add(pos.getId());
assignNum = assignNum + pos.getBarcode().getAmount();
assignReelCount = assignReelCount + 1;
excludePosIds.add(pos.getPosName());
// excludePosIds.add(pos.getId());
}
}
}
......
......@@ -188,7 +188,7 @@ public class DevicesStatusUtil {
if (oldMsgs != null) {
for (MsgInfo old :
oldMsgs) {
if (old.getMsgKey().equals(msg.getMsgKey()) && old.getMsg().equals(msg.getMsg())) {
if (ObjectUtil.isNotEmpty(old.getMsgKey())&&ObjectUtil.isNotEmpty(msg.getMsgKey())&& old.getMsgKey().equals(msg.getMsgKey()) && old.getMsg().equals(msg.getMsg())) {
newMsg = false;
break;
}
......
......@@ -200,6 +200,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
List<TMSRackStatus> SyncRackStatusDatas = new ArrayList<>();
List<String> storageIds = new ArrayList<>();
List<Storage> needSyncDataList=new ArrayList<>();
int i = 0;
for (String cid : cids) {
......@@ -224,6 +225,18 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
}
}
if(status==-1||status==0||status>=1){
if(status>=1){
needSyncDataList.add(storage);
log.info("设备"+cid+"状态改变,当前状态:"+status+",需要通知韩华,并同步物料信息");
}else{
log.info("设备"+cid+"状态改变,当前状态:"+status+",需要通知韩华");
}
}else {
continue;
}
int flag = 0;
if (status >= 1) {
flag = 2;
......@@ -249,8 +262,40 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
if (storageIds.size() > 0) {
tmsApis.RequestSyncRackStatusInfo(0, SyncRackStatusDatas);
}
if(needSyncDataList.size()>0){
for (Storage st :
needSyncDataList) {
SyncStorageData(st, "单个设备上线");
}
}
}
private void SyncStorageData(Storage storage,String logName) {
List<TMSPartReelPos> list = new ArrayList<>();
List<StoragePos> allPos = storagePosManager.findByStorage(storage.getId());
// if (storage.isNLShelf() || storage.isMimoG2() ||storage.isBatchStorage()) {
if (allPos != null) {
for (StoragePos pos :
allPos) {
if (pos.getBarcode() == null) {
TMSPartReelPos bean = TMSPartReelPos.newBean("", "", -1,
storage.getCid(), pos.getPosName(), 4, -1, -1);
list.add(bean);
} else {
Barcode barcode = pos.getBarcode();
TMSPartReelPos bean = TMSPartReelPos.newBean(barcode.getPartNumber(), barcode.getBarcode(), barcode.getAmount(),
storage.getCid(), pos.getPosName(), 4, barcode.getPutInDate().getTime(), -1);
list.add(bean);
}
}
List<TMSPart> result = tmsApis.RequestSyncPartReelPosInfo(0, list);
log.info(logName+ "RequestSyncPartReelPosInfo storageCID=" + storage.getCid() + ", count=" + list.size());
}
}
public void UpdateStorageConnectionInfo(String[] cids, Integer[] statusList) {
if (!TMSCommunicator.isEnable()) {
return;
......
......@@ -19,6 +19,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
......@@ -592,6 +593,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if (items.size() <= 0) {
return null;
}
//判断是否有已执行的工单,有的话创建失败
Query query =new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
if(orderList.size()>0){
log.info("RequestDelivery: 当前有未关闭的工单"+orderList.size()+",创建工单失败");
return null;
}
LiteOrder liteOrder = new LiteOrder(orderNo, items);
liteOrder.setSource("DeliveryOrder");
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
......@@ -628,7 +638,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param partCount
* @param towerLamp
*/
private void RequestDeliveryOrder(int requestID, List<String> partItem, List<Integer> partCount, boolean towerLamp) {
private synchronized void RequestDeliveryOrder(int requestID, List<String> partItem, List<Integer> partCount, boolean towerLamp) {
// 3.9 ResponseDeliveryOrder
TMSReserve tmsReserve=null;
......@@ -636,7 +646,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if (partItem == null || partCount == null || partItem.size() <= 0 || partCount.size() <= 0) {
log.info("RequestDeliveryOrder 数据不完整,直接返回");
ResponseDeliveryOrder(requestID, new ArrayList<>(), "");
ResponseDeliveryOrder(requestID, new ArrayList<>(), "","");
return;
}
String soName = "DO" + DateUtil.toDateString(new Date(), "yyyyMMddHHmmss");
......@@ -655,77 +665,88 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
LiteOrder liteOrder = createOrder(requestID, liteOrderItems, soName, true);
//能够出库成功返回2010,库存不足范围2002 Out Of Part
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) {
List<DataLog> dataLogs = taskService.getAllTasks();
if(liteOrder==null){
//同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014
List<TMSPart> parts = new ArrayList<>();
for (LiteOrderItem item :
liteOrder.getOrderItems()) {
try {
int curroNum = 0;
for (DataLog task :
dataLogs) {
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getPartNumber().equals(item.getPn())) {
int requestNum = task.getNum();
curroNum += task.getNum();
if (curroNum > item.getNeedNum()) {
requestNum = task.getNum() - (curroNum - item.getNeedNum());
liteOrderItems) {
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), 0, TMS_Code.CODE_2014, "", "");
parts.add(p);
}
ResponseDeliveryOrder(requestID, parts, "","");
}else {
//能够出库成功返回2010,库存不足范围2002 Out Of Part
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder != null) {
List<DataLog> dataLogs = taskService.getAllTasks();
List<TMSPart> parts = new ArrayList<>();
for (LiteOrderItem item :
liteOrder.getOrderItems()) {
try {
int curroNum = 0;
for (DataLog task :
dataLogs) {
if (task.isCheckOutTask() && task.getSourceName().equals(liteOrder.getOrderNo()) && task.getPartNumber().equals(item.getPn())) {
if (task.getSubSourceId().equals(item.getId())) {
int requestNum = task.getNum();
curroNum += task.getNum();
if (curroNum > item.getNeedNum()) {
requestNum = task.getNum() - (curroNum - item.getNeedNum());
}
TMSPart p = TMSPart.newBean(parts.size(), task.getPartNumber(), task.getBarcode(), requestNum, task.getNum(), TMS_Code.CODE_2010, task.getCid(), task.getPosName());
log.info("RequestDeliveryOrder pn=" + task.getPartNumber() + ",出库成功:code=" + TMS_Code.CODE_2010 + ",posName=" + task.getPosName() + ",barcode=" + task.getBarcode());
parts.add(p);
}
}
TMSPart p = TMSPart.newBean(parts.size(), task.getPartNumber(), task.getBarcode(), requestNum, task.getNum(), TMS_Code.CODE_2010, task.getCid(), task.getPosName());
log.info("RequestDeliveryOrder pn=" + task.getPartNumber() + ",出库成功:code=" + TMS_Code.CODE_2010 + ",posName=" + task.getPosName() + ",barcode=" + task.getBarcode());
parts.add(p);
}
}
if (curroNum <= 0) {
if (curroNum <= 0) {
//如果缺料返回2002,否则还是返回2010
String shortValue = item.getAppend("shortage");
if (ObjectUtil.isNotEmpty(shortValue) && shortValue.equals("true")) {
//未出库
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2002, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",出库失败缺料:code=" + TMS_Code.CODE_2002);
parts.add(p);
} else {
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2010, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",未出库成功:code=" + TMS_Code.CODE_2010);
parts.add(p);
}
//如果缺料返回2002,否则还是返回2010
String shortValue = item.getAppend("shortage");
if (ObjectUtil.isNotEmpty(shortValue) && shortValue.equals("true")) {
//未出库
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2002, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",出库失败缺料:code=" + TMS_Code.CODE_2002);
parts.add(p);
} else {
TMSPart p = TMSPart.newBean(parts.size(), item.getPn(), "", item.getNeedNum(), item.getOutNum(), TMS_Code.CODE_2010, "", "");
log.info("RequestDeliveryOrder pn=" + item.getPn() + ",未出库成功:code=" + TMS_Code.CODE_2010);
parts.add(p);
}
} catch (Exception ex) {
log.error(" RequestDeliveryOrder " + item.getPn() + ",error:" + ex.toString());
}
} catch (Exception ex) {
log.error(" RequestDeliveryOrder " + item.getPn() + ",error:" + ex.toString());
}
}
// TMSPart part = TMSPart.newBean("PN1", "Barcode1", 999, 999, TMS_Code.CODE_2002, "", "");
// parts.add(part);
ResponseDeliveryOrder(requestID, parts, liteOrder.getOrderNo());
ResponseDeliveryOrder(requestID, parts, liteOrder.getOrderNo(),"");
//如果工单执行中,发送ResponseUpdateDeliveryReserveState,否则不需要
if(liteOrder.isClosed()){
log.info("RequestDeliveryOrder 工单已关闭,不需要发送 发送ResponseUpdateDeliveryReserveState");
}else{
//如果工单执行中,发送ResponseUpdateDeliveryReserveState,否则不需要
if (liteOrder.isClosed()) {
log.info("RequestDeliveryOrder 工单已关闭,不需要发送 发送ResponseUpdateDeliveryReserveState");
} else {
tmsReserve=GetOrderInfo(liteOrder);
List<TMSReserve> tmsReserves=new ArrayList<>();
tmsReserves.add(tmsReserve);
ResponseUpdateDeliveryReserveState(requestID,tmsReserves,0);
tmsReserve = GetOrderInfo(liteOrder);
List<TMSReserve> tmsReserves = new ArrayList<>();
tmsReserves.add(tmsReserve);
ResponseUpdateDeliveryReserveState(requestID, tmsReserves, 0);
}
}
}
} catch (Exception exception) {
log.error("RequestDeliveryOrder error:" + exception.toString());
}
ResponseDeliveryOrder(requestID, new ArrayList<>(), "");
ResponseDeliveryOrder(requestID, new ArrayList<>(), "","");
}
/**
......@@ -998,7 +1019,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param Parts
* @param OrderCode
*/
public void ResponseDeliveryOrder(int requestID, List<TMSPart> Parts, String OrderCode) {
public void ResponseDeliveryOrder(int requestID, List<TMSPart> Parts, String OrderCode,String ReserveCode) {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("Topic", "ResponseDeliveryOrder");
dataMap.put("RequestID", requestID);
......@@ -1014,9 +1035,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
arrayList.add(Part.getJson());
}
if(ObjectUtil.isEmpty(ReserveCode)){
ReserveCode= OrderCode;
}
dataMap.put("PartList", arrayList);
dataMap.put("OrderCode", OrderCode);
dataMap.put("ReserveCode", OrderCode);
dataMap.put("ReserveCode", ReserveCode);
SendData(dataMap);
}
......@@ -1080,6 +1105,8 @@ public class TMSCommunicator implements WsMsgReceivedListener {
for (TMSReserve Reserve : ReserveList) {
Map<String, Object> dataMap2 = new HashMap<>();
dataMap2.put("ReserveCode", Reserve.getReserveCode());
//
dataMap2.put("ResultCode", Reserve.getResultCode());
dataMap2.put("Date", Reserve.getDate());
List<Object> jArray2 = new ArrayList<>();
......
......@@ -83,12 +83,12 @@ public class TMS_Code {
public static final String CODE_2001 = "2001";
/**
* 2002 Out of part
* 2002 Out of part 无材料
*/
public static final String CODE_2002 = "2002";
/**
* 2003 Registered part but not on the rack
* 2003 Registered part but not on the rack 缺料
*/
public static final String CODE_2003 = "2003";
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!