11
jinxin
2025-06-23 5c4192f0b813d72a427eaca183d08d42046f1b41
C#/HH.WCS.Mobox3.WeiLi/process/TaskProcess.cs
@@ -51,6 +51,7 @@
        /// <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")
@@ -86,12 +87,11 @@
                    //终点数量置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);
@@ -99,12 +99,52 @@
                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>
@@ -190,6 +230,8 @@
                            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");
@@ -387,47 +429,52 @@
            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) 
@@ -454,28 +501,37 @@
        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;
        }
@@ -873,6 +929,7 @@
        /// <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";
@@ -887,6 +944,13 @@
                    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);