| | |
| | | /// <param name="mst"></param> |
| | | internal static void CacheBitCancelUpdate(WCSTask mst) |
| | | { |
| | | LogHelper.Info($"任务取消 任务调度类型{mst.S_SCHEDULE_TYPE}"); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | //任务取消,取货完成前的,起点的loadingCount和终点unLoadingCount都清除,取货完成的只处理终点 |
| | | if (mst.S_SCHEDULE_TYPE == "WCS") |
| | |
| | | //终点数量置0 |
| | | db.Updateable<Location>().SetColumns(it => new Location() { N_CURRENT_NUM = 0 }).Where(a => a.S_CODE == mst.S_END_LOC).ExecuteCommand(); |
| | | } |
| | | else |
| | | else |
| | | { |
| | | db.Updateable<Location>().SetColumns(it => new Location() { N_CURRENT_NUM = 0 }).Where(a => a.S_CODE == mst.S_START_LOC).ExecuteCommand(); |
| | | } |
| | | db.Deleteable<LocCntrRel>().Where(a => a.S_CNTR_CODE == mst.S_CNTR_CODE).ExecuteCommand(); |
| | | db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == mst.S_CNTR_CODE).ExecuteCommand(); |
| | | |
| | | |
| | | LocationHelper.UnLockLoc(mst.S_START_LOC); |
| | | LocationHelper.UnLockLoc(mst.S_END_LOC); |
| | |
| | | if (wmsTask != null) |
| | | { |
| | | LocationHelper.UnLockLoc(wmsTask.S_END_LOC); |
| | | Reducequantity(wmsTask); |
| | | } |
| | | db.Deleteable<LocCntrRel>().Where(a => a.S_CNTR_CODE == mst.S_CNTR_CODE).ExecuteCommand(); |
| | | db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == mst.S_CNTR_CODE).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | public static void Reducequantity(WMSTask wmsTask) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | if (wmsTask.S_OP_DEF_NAME == "码盘入库") |
| | | { |
| | | //降入库单明细的分配量 |
| | | var itemlist = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == wmsTask.S_CNTR_CODE).ToList(); |
| | | if (itemlist.Count > 0) |
| | | { |
| | | LogHelper.Info($"查找到物料明细{itemlist.Count}条"); |
| | | foreach (var item in itemlist) |
| | | { |
| | | var exp = Expressionable.Create<TN_Inbound_Detail>(); |
| | | exp.And(it => it.S_IO_NO == item.S_BS_NO); |
| | | exp.And(it => it.N_BS_ROW_NO == item.S_WU); |
| | | exp.And(it => it.S_ITEM_CODE == item.S_ITEM_CODE); |
| | | exp.AndIF(!string.IsNullOrEmpty(item.S_BATCH_NO), it => it.S_BATCH_NO == item.S_BATCH_NO); |
| | | exp.AndIF(!string.IsNullOrEmpty(item.S_ERP_WH_CODE), it => it.S_ERP_WH_CODE == item.S_ERP_WH_CODE); |
| | | exp.AndIF(!string.IsNullOrEmpty(item.S_OWNER), it => it.S_OWNER == item.S_OWNER); |
| | | exp.AndIF(!string.IsNullOrEmpty(item.S_SUPPLIER_NO), it => it.S_SUPPLIER_NO == item.S_SUPPLIER_NO); |
| | | var InWorkOrder = db.Queryable<TN_Inbound_Detail>().Where(exp.ToExpression()).First(); |
| | | InWorkOrder.F_ACC_B_QTY = InWorkOrder.F_ACC_B_QTY - item.F_QTY; |
| | | db.Updateable(InWorkOrder).UpdateColumns(it => new { it.F_ACC_B_QTY }).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"未找到托盘{wmsTask.S_CNTR_CODE}的物料明细"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"作业类型为{wmsTask.S_OP_DEF_NAME} 无须降量"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | mst.S_ERR_LOC = ""; |
| | | db.Updateable(mst).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH, a.S_START_LOC, a.S_START_AREA, a.S_START_WH, a.S_ERR_LOC }).ExecuteCommand(); |
| | | |
| | | |
| | | TaskProcess.Reducequantity(wmsTask); |
| | | //NDCApi.ChangeOrderParam(mst.S_CODE, 1, startLoc.S_AGV_SITE); |
| | | //NDCApi.ChangeOrderParam(mst.S_CODE, 2, endLoc.S_AGV_SITE); |
| | | //NDCApi.ChangeOrderParam(mst.S_CODE, 4, "0"); |
| | |
| | | if (codeReader != null) |
| | | { |
| | | LogHelper.Info($"agv={codeReader.agv},ip={codeReader.ip}"); |
| | | for (int i = 1; i <= 5; i++) |
| | | for (int i = 1; i <= 3; i++) |
| | | { |
| | | //try |
| | | //{ |
| | | //var res = OITcpHelper.HexTransit(new OITcpHelper.StrTransitData { data = "4C 4F 4E 0D", host = codeReader.ip, port = 9004 }); |
| | | var res = SendHexOnce(codeReader.ip, codeReader.port, "41"); |
| | | LogHelper.Info($"扫码返回报文{res}"); |
| | | if (string.IsNullOrEmpty(res)) |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "3"); |
| | | } |
| | | else |
| | | //if (string.IsNullOrEmpty(res)) |
| | | //{ |
| | | // NDCApi.ChangeOrderParam(mst.S_CODE, 6, "3"); |
| | | //} |
| | | //else |
| | | //{ |
| | | if (res.Length >= 18) |
| | | { |
| | | res = res.Substring(2, 16); |
| | | var code = hexToStr(res); |
| | | Console.WriteLine(code); |
| | | LogHelper.Info($"托盘信息为={mst.S_CNTR_CODE},扫码结果为={code},结果:{mst.S_CNTR_CODE.Trim() == code.Trim()}"); |
| | | if (res != null && code.Trim() != "ERROR") |
| | | } |
| | | |
| | | |
| | | var code = hexToStr(res); |
| | | Console.WriteLine(code); |
| | | LogHelper.Info($"托盘信息为={mst.S_CNTR_CODE},扫码结果为={code},结果:{mst.S_CNTR_CODE.Trim() == code.Trim()}"); |
| | | if (!string.IsNullOrEmpty(code) && res.Trim() != "022503") |
| | | { |
| | | if (mst.S_CNTR_CODE.Trim() == code.Trim()) |
| | | { |
| | | if (mst.S_CNTR_CODE.Trim() == code.Trim()) |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1"); |
| | | } |
| | | else |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "2"); |
| | | } |
| | | return; |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1"); |
| | | } |
| | | else if (i == 5) |
| | | else |
| | | { |
| | | if (res != null) |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "3"); |
| | | } |
| | | else |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "4"); |
| | | } |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "2"); |
| | | } |
| | | return; |
| | | } |
| | | else if (i == 3) |
| | | { |
| | | if (!string.IsNullOrEmpty(code)) |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "3"); |
| | | } |
| | | else |
| | | { |
| | | NDCApi.ChangeOrderParam(mst.S_CODE, 6, "4"); |
| | | } |
| | | } |
| | | //} |
| | | |
| | | //} |
| | | //catch (Exception ex) |
| | |
| | | private static string SendHexOnce(string ip, int port, string hex) |
| | | { |
| | | var res = string.Empty; |
| | | Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
| | | client.Connect(ip, port); |
| | | client.ReceiveTimeout = 2000; |
| | | if (client.Connected) |
| | | try |
| | | { |
| | | client.Send(Hex2Bytes(hex)); |
| | | byte[] buffer = new byte[1024]; |
| | | try |
| | | Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
| | | //client.Connect(ip, port); |
| | | IAsyncResult connectResult = client.BeginConnect(ip, port, null, null); |
| | | if (!connectResult.AsyncWaitHandle.WaitOne(5000)) |
| | | { |
| | | client.Close(); |
| | | return ""; |
| | | } |
| | | client.ReceiveTimeout = 2000; |
| | | if (client.Connected) |
| | | { |
| | | client.Send(Hex2Bytes(hex)); |
| | | byte[] buffer = new byte[1024]; |
| | | |
| | | var length = client.Receive(buffer, SocketFlags.None); |
| | | byte[] data = new byte[length]; |
| | | Array.Copy(buffer, data, length); |
| | | res = BitConverter.ToString(data).Replace("-", ""); |
| | | |
| | | |
| | | client.Disconnect(true); |
| | | client.Dispose(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message, ex); |
| | | } |
| | | client.Disconnect(true); |
| | | client.Dispose(); |
| | | client = null; |
| | | } |
| | | client = null; |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message, ex); |
| | | } |
| | | return res; |
| | | } |
| | | |
| | |
| | | /// <param name="mst"></param> |
| | | internal static bool SendTask(WCSTask mst) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var result = false; |
| | | var start = "0"; var end = "0"; |
| | | var Trow = "0"; |
| | |
| | | Trow = "1024"; |
| | | } |
| | | |
| | | var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_CODE == mst.S_OP_CODE).First(); |
| | | if (wmsTask != null && wmsTask.N_TRAY_WEIGHT > 0) |
| | | { |
| | | // 1000 2000 3000 4000 5000 |
| | | Trow = (wmsTask.N_TRAY_WEIGHT * 4096).ToString(); |
| | | } |
| | | |
| | | |
| | | Console.WriteLine($"SendTask {mst.S_CODE}"); |
| | | Console.WriteLine("start=" + start); |