杨张扬
8 天以前 3909fbf77ad4ebc0dde600ff82710d959f74b5f4
AGV会换车,删除库存操作改成收到4执行,去线边的货位自动解绑
7个文件已修改
174 ■■■■ 已修改文件
api/ApiHelper.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/Monitor.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
device/ScanCodeHelper.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
device/TcpServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/SpecHelper.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/WCSHelper.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiHelper.cs
@@ -1092,11 +1092,6 @@
                        };
                        SpecHelper.InsertComponentDetail(target);
                    });
                    Task task27 = Task.Run(() =>
                    {
                        SpecHelper.DeleteInventoryM(cgInfo.S_ID);
                    });
                }
                else
                {
@@ -1938,13 +1933,6 @@
                                    SHIFT = model.shift,
                                };
                                SpecHelper.InsertInventoryM(target);
                            }
                        });
                        Task task26 = Task.Run(() =>
                        {
                            if (startLoc.S_AREA_CODE == Settings.Areas[1] && cginfo != null)
                            {
                                SpecHelper.DeleteInventoryM(cginfo.S_ID);
                            }
                        });
core/Monitor.cs
@@ -462,11 +462,6 @@
                            LocationHelper.LockLoc(startLoc_1.S_CODE, 2);//起点出库锁,
                            LocationHelper.LockLoc(endLoc_1.S_CODE, 1);//终点入库锁
                            LogHelper.Info($"生成满托过期出库任务成功,容器号{outTimeCg.S_CNTR_CODE},起点{startLoc_1.S_CODE},终点{endLoc_1.S_CODE}");
                            Task task27 = Task.Run(() =>
                            {
                                SpecHelper.DeleteInventoryM(outTimeCg.S_ID);
                            });
                        }
                    }
                }
@@ -943,11 +938,6 @@
                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                    LogHelper.Info($"生成满托出库复检任务成功,容器:{cntId.S_CNTR_CODE},起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}");
                    Task task27 = Task.Run(() =>
                    {
                         SpecHelper.DeleteInventoryM(cgInfo.S_ID);
                    });
                }
                else
                {
core/WCSCore.cs
@@ -35,8 +35,9 @@
                }
                else if (model.state == 1012)
                {
                    Task task5 = Task.Run(() =>
                    Task task5 = Task.Run(async () =>
                    {
                        await Task.Delay(3000);//延时3秒
                        PostScanCode(model.task_no, model.forklift_no);//反馈扫码结果
                    });
                }
@@ -86,6 +87,11 @@
                                    Task task1 = Task.Run(() =>
                                    {
                                        returnS7Ok(tN_Task);
                                    });
                                    Task task27 = Task.Run(() =>
                                    {
                                        SpecHelper.DeleteInventoryM(tN_Task);
                                    });
                                    break;
@@ -157,6 +163,11 @@
                                    break;
                                case 2:
                                    WCSHelper.End(tN_Task);//任务状态改成结束
                                    Task task16 = Task.Run(() =>
                                    {
                                        SpecHelper.RestEndLoc(tN_Task);
                                    });
                                    break;
                                case 7:
@@ -473,7 +484,6 @@
                {
                    //推送成功
                    LogHelper.Info($"NDC反馈扫码结果成功,扫码结果:{TcpServer.saoMa[agv.ScanAddress].ToString()}");
                }
                else
                {
device/ScanCodeHelper.cs
@@ -53,15 +53,20 @@
        {
            var db = new SqlHelper<TN_Task>().GetInstance();
            var task = new TN_Task();
            task = db.Queryable<TN_Task>().Where(a => a.S_EQ_NO == agvCode && a.N_B_STATE == 2).OrderByDescending(b => b.T_CREATE).First();
            if (task != null && RFID.Contains(task.S_CNTR_CODE))
            task = db.Queryable<TN_Task>().Where(a => a.S_EQ_NO == agvCode).OrderByDescending(b => b.T_START_TIME).First();
            if (task != null &&
                (
                RFID == task.S_CNTR_CODE
                || RFID.Contains(task.S_CNTR_CODE)
                || task.S_CNTR_CODE.Contains(RFID)
                ))
            {
                LogHelper.Info($"校验成功Agv:{agvCode}容器号:{RFID}");
                LogHelper.Info($"校验成功Agv:{agvCode},读卡器的容器号:{RFID},任务的容器号:{ task.S_CNTR_CODE}");
                return true;
            }
            else
            {
                LogHelper.Info($"校验失败Agv:{agvCode}容器号:{RFID}");
                LogHelper.Info($"校验失败Agv:{agvCode},读卡器的容器号:{RFID},任务的容器号:{ task?.S_CNTR_CODE ?? "任务未找到"}");
                //校验失败就取消任务
                //var task1 = Task.Run(() => 
device/TcpServer.cs
@@ -100,8 +100,6 @@
                    clients.Remove(remote_ip);
                    buffers.Remove(remote_ip);
                    isSend.Remove(remote_ip);
                    isCheck.Remove(remote_ip);
                    saoMa.Remove(remote_ip);
                    return;
                }
                else
@@ -183,7 +181,7 @@
                    {
                        //卷帘门开关
                        var plc = Settings.SafeDoorDevices.FirstOrDefault(a => a.IPAddress == remote_ip);
                        var log = string.Join(",", messageBytes.Select(x => x.ToString()));
                        var log = BitConverter.ToString(messageBytes);
                        if (plc != null &&
                            messageBytes[0] == 0x3F &&
                            messageBytes[1] == 0x00 &&
@@ -229,7 +227,7 @@
            }
            catch (Exception ex)
            {
               LogHelper.Error(ex.Message, ex);
            }
        }
wms/SpecHelper.cs
@@ -280,6 +280,90 @@
        }
        /// <summary>
        /// 重置终点货位,只针对去线边的货品
        /// </summary>
        /// <param name="tN_Task"></param>
        internal static void RestEndLoc(TN_Task tN_Task)
        {
            try
            {
                if (tN_Task.S_END_AREA == Settings.Areas[2] || tN_Task.S_TYPE.Contains("满托出库上线"))
                {
                    var db = new SqlHelper<object>().GetInstance();
                    using (var tran = db.Ado.UseTran())
                    {
                        var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == tN_Task.S_END_LOC);
                        if (endLoc != null)
                        {
                            endLoc.N_CURRENT_NUM = 0;
                            endLoc.N_LOCK_STATE = 0;
                            endLoc.S_LOCK_STATE = "无";
                            if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0)
                            {
                                LogHelper.Info($"更新终点货位成功,{JsonConvert.SerializeObject(endLoc)}");
                            }
                            else
                            {
                                LogHelper.Info($"更新终点货位失败,{JsonConvert.SerializeObject(endLoc)}");
                                tran.RollbackTran();
                                return;
                            }
                            var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == endLoc.S_CODE);
                            if (locCnt != null)
                            {
                                var cgInfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCnt.S_CNTR_CODE);
                                if (db.Deleteable<TN_Loc_Container>(locCnt).ExecuteCommand() > 0)
                                {
                                    LogHelper.Info($"删除货位容器绑定关系成功,{JsonConvert.SerializeObject(locCnt)}");
                                }
                                else
                                {
                                    LogHelper.Info($"删除货位容器绑定关系失败,{JsonConvert.SerializeObject(locCnt)}");
                                    tran.RollbackTran();
                                    return;
                                }
                                if (cgInfo != null)
                                {
                                    if (db.Deleteable<TN_CG_Detail>(cgInfo).ExecuteCommand() > 0)
                                    {
                                        LogHelper.Info($"删除容器货品明细成功,{JsonConvert.SerializeObject(cgInfo)}");
                                    }
                                    else
                                    {
                                        LogHelper.Info($"删除容器货品明细失败,{JsonConvert.SerializeObject(cgInfo)}");
                                        tran.RollbackTran();
                                        return;
                                    }
                                }
                            }
                        }
                        tran.CommitTran();
                        LogHelper.Info($"重置终点货位,成功,{JsonConvert.SerializeObject(tN_Task)}");
                        return;
                    }
                }
                else
                {
                    LogHelper.Info($"当前任务终点货位不是去线边,不需要重置终点货位,{JsonConvert.SerializeObject(tN_Task)}");
                    return;
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("重置终点货位,只针对去线边的货品 失败", ex);
            }
        }
        /// <summary>
        /// 更新余料回库明细
        /// </summary>
        public static void UpdateSurplusDetail(string taskNo,float weight)
@@ -387,18 +471,27 @@
        /// <summary>
        /// 删除WMS库存明细
        /// </summary>
        public static void DeleteInventoryM(string cg_SID)
        public static void DeleteInventoryM(TN_Task taskTn)
        {
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                if(db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == cg_SID).ExecuteCommand() > 0)
                if (taskTn.S_START_AREA == Settings.Areas[1] || taskTn.S_TYPE.Contains("满托出库上线")) //不是从满托缓存库区移出就不删除
                {
                    LogHelper.Info($"删除WMS库存明细,成功,物料主键:{cg_SID}");
                    var db = new SqlHelper<object>().GetInstance();
                    if (db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == taskTn.S_ID || it.RFID == taskTn.S_CNTR_CODE).ExecuteCommand() > 0)
                    {
                        LogHelper.Info($"删除WMS库存明细,成功,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}");
                    }
                    else
                    {
                        LogHelper.Info($"删除WMS库存明细,失败,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}");
                    }
                }
                else
                {
                    LogHelper.Info($"删除WMS库存明细,失败,物料主键:{cg_SID}");
                    LogHelper.Info($"不是从满托缓存库区搬出的货位,不需要删除库存明细,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}");
                    return;
                }
            }
            catch (Exception ex)
wms/WCSHelper.cs
@@ -187,15 +187,11 @@
            var db = new SqlHelper<TN_Task>().GetInstance();
            if (task != null)
            {
                if (task.N_B_STATE == 1)
                {
                    task.N_B_STATE = 2;
                    task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE);
                    task.T_START_TIME = System.DateTime.Now;
                    task.S_EQ_NO = forklift_no;
                    db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME, it.S_EQ_NO }).ExecuteCommand();
                }
                task.N_B_STATE = 2;
                task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE);
                task.T_START_TIME = System.DateTime.Now;
                task.S_EQ_NO = forklift_no;
                db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME, it.S_EQ_NO }).ExecuteCommand();
            }
        }
        internal static void End(TN_Task task) {
@@ -244,7 +240,7 @@
            {
                LogHelper.Info($"取消任务: {tN_Task.S_CODE} 终点是满托缓存库区: {tN_Task.S_END_AREA}");
                TaskProcess.OperateStatus(tN_Task, 7);//异常处理
                TaskProcess.CacheBitCancelUpdate(tN_Task);//异常处理
            }
            else if (tN_Task.S_START_AREA == HJ || tN_Task.S_TYPE.Contains("满托出库上线"))//起点是满托缓存库区
            {