From 1fdf9f31d9e57bfbae8269cda2ea2d1bd006789a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E6=99=94?= Date: Fri, 15 Sep 2023 17:06:15 +0800 Subject: [PATCH] =?UTF-8?q?AGV=E5=87=BA=E5=85=A5=E5=BA=93=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ICSManufactureService.cs | 12 +- .../ICSSoft.DataProject/ICSSubmitService.cs | 147 +++++++++++++++++- .../ICSWareHouseLotInfoService.cs | 2 +- 3 files changed, 153 insertions(+), 8 deletions(-) diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs index b256dcd..8b69ff1 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs @@ -557,6 +557,10 @@ namespace ICSSoft.DataProject ServiceUnBindAgvPod.UnOrBindAgvPodClient client = new ServiceUnBindAgvPod.UnOrBindAgvPodClient(); ServiceUnBindAgvPod.UnBindAgvPodOperationResult agvresult = new ServiceUnBindAgvPod.UnBindAgvPodOperationResult(); agvresult = client.StartCallAgvTask(AGVInfo); + if (agvresult.code == -1 || agvresult.code == 5) + { + throw new Exception(agvresult.message); + } #endregion } else @@ -570,19 +574,23 @@ namespace ICSSoft.DataProject ServiceCallAgvTask.CallAgvTaskpositionCodePath AGVLineInfo = new ServiceCallAgvTask.CallAgvTaskpositionCodePath(); AGVInfo.reqCode = Year + Month + Day + Hour + Minute + Second; AGVInfo.podCode = ContainerCode; - AGVInfo.taskTyp = "F02"; + AGVInfo.taskTyp = "A01"; AGVLineInfo.positionCode = chkdt.Rows[0]["Desks"].ToString(); AGVLineInfo.type = "00"; AGVLineList.Add(AGVLineInfo); AGVLineInfo = new ServiceCallAgvTask.CallAgvTaskpositionCodePath(); AGVLineInfo.positionCode = areadt.Rows[0]["F_Define1"].ToString();//空料架区位置编码待提供 - AGVLineInfo.type = "04"; + AGVLineInfo.type = "02"; AGVLineList.Add(AGVLineInfo); AGVInfo.positionCodePath = AGVLineList.ToArray(); ServiceCallAgvTask.CallAgvTaskOperationResult agvresult = new ServiceCallAgvTask.CallAgvTaskOperationResult(); ServiceCallAgvTask.StartAgvTaskClient client = new ServiceCallAgvTask.StartAgvTaskClient(); agvresult = client.StartCallAgvTask(AGVInfo); + if (agvresult.code == -1 || agvresult.code == 5) + { + throw new Exception(agvresult.message); + } #endregion } } diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs index a29c451..0779a2c 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs @@ -7606,16 +7606,36 @@ WHERE WorkPoint='{0}' AND Quantity>ISNULL(TransferQuantity, 0) order by Transfer } else { - if (JsonData.taskCode.Contains("CK")) + string chksql = @"select EATTRIBUTE1 from ICSAGVTaskLog + where ID='{0}'"; + chksql = string.Format(chksql, JsonData.taskCode); + DataTable chkdt = DBHelper.SQlReturnData(chksql, cmd); + if (chkdt.Rows.Count == 0) { - logsql = @"update ICSAGVTaskLog set MTIME=GETDATE(),EATTRIBUTE2='已完成',EATTRIBUTE3='{1}' - WHERE TaskCode='{0}'"; - logsql = string.Format(logsql, JsonData.taskCode, JsonData.taskCode); + #region 更新AGV回调日志 + logsql = @"update ICSAGVCallBackLog set Result='失败',Message='{1}' + where ReqCode='{0}'"; + logsql = string.Format(logsql, JsonData.taskCode, "传入TaskCode不存在!"); DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + res.code = "1"; + res.message = "传入TaskCode不存在!";// "接口调用失败!"; + res.reqCode = JsonData.reqCode; + return res; } else { - ICSWareHouseLotInfoService.ActionAGVTaskEnd(JsonData.taskCode, JsonData.currentPositionCode, JsonData.taskCode, JsonData.action, JsonData.podCode, cmd, language); + if (chkdt.Rows[0]["EATTRIBUTE1"].ToString()=="出库") + { + logsql = @"update ICSAGVTaskLog set MTIME=GETDATE(),EATTRIBUTE2='已完成',EATTRIBUTE3='{1}' + WHERE ID='{0}'"; + logsql = string.Format(logsql, JsonData.taskCode, JsonData.currentPositionCode); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + } + else + { + ICSWareHouseLotInfoService.ActionAGVTaskEnd(JsonData.taskCode, JsonData.currentPositionCode, JsonData.taskCode, JsonData.action, JsonData.podCode, cmd, language); + } } } cmd.Transaction.Commit(); @@ -8846,6 +8866,123 @@ WHERE WorkPoint='{0}' AND Quantity>ISNULL(TransferQuantity, 0) order by Transfer } #endregion + #region 调用AGV搬运任务失败后调用,用于删除入库时的库位占用 + public static AGVResult AGVTaskEnd(AGVCallBackModel JsonData, string Jsonstr) + { + var language = LanguageHelper.GetName("WMSAPIInfo"); + DataTable table = new DataTable(); + string msg = ""; + using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString)) + { + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + SqlTransaction sqlTran = conn.BeginTransaction(); + cmd.Transaction = sqlTran; + try + { + #region 记录AGV回调日志 + string logsql = @"INSERT INTO ICSAGVCallBackLog + (ID,ReqCode,InputJSON,Result,Message,EATTRIBUTE1) + SELECT NEWID(),'{0}','{1}','','',GETDATE()"; + logsql = string.Format(logsql, JsonData.taskCode, Jsonstr); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + AGVResult res = new AGVResult(); + if (string.IsNullOrEmpty(JsonData.taskCode)) + { + msg = "传入AGV任务ID不能为空!"; + } + if (string.IsNullOrEmpty(JsonData.podCode)) + { + msg = "传入料架不能为空!"; + } + if (string.IsNullOrEmpty(JsonData.currentPositionCode)) + { + msg = "传入入库具体点位不能为空!"; + } + if (msg != "") + { + #region 更新AGV回调日志 + logsql = @"update ICSAGVCallBackLog set Result='失败',Message='{1}' + where ReqCode='{0}'"; + logsql = string.Format(logsql, JsonData.taskCode, msg); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + res.code = "1"; + res.message = msg;// "接口调用失败!"; + res.reqCode = JsonData.reqCode; + return res; + } + else + { + string chksql = @"select EATTRIBUTE1 from ICSAGVTaskLog + where ID='{0}'"; + chksql = string.Format(chksql, JsonData.taskCode); + DataTable chkdt = DBHelper.SQlReturnData(chksql, cmd); + if (chkdt.Rows.Count == 0) + { + #region 更新AGV回调日志 + logsql = @"update ICSAGVCallBackLog set Result='失败',Message='{1}' + where ReqCode='{0}'"; + logsql = string.Format(logsql, JsonData.taskCode, "传入TaskCode不存在!"); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + res.code = "1"; + res.message = "传入TaskCode不存在!";// "接口调用失败!"; + res.reqCode = JsonData.reqCode; + return res; + } + else + { + if (chkdt.Rows[0]["EATTRIBUTE1"].ToString() == "出库") + { + logsql = @"update ICSAGVTaskLog set MTIME=GETDATE(),EATTRIBUTE2='已完成',EATTRIBUTE3='{1}' + WHERE ID='{0}'"; + logsql = string.Format(logsql, JsonData.taskCode, JsonData.currentPositionCode); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + } + else + { + ICSWareHouseLotInfoService.ActionAGVTaskEnd(JsonData.taskCode, JsonData.currentPositionCode, JsonData.taskCode, JsonData.action, JsonData.podCode, cmd, language); + } + } + } + cmd.Transaction.Commit(); + res.code = "0"; + res.message = "成功";// "接口调用成功!"; + res.reqCode = JsonData.reqCode; + return res; + } + catch (Exception ex) + { + #region 更新AGV回调日志 + string logsql = @"update ICSAGVCallBackLog set Result='失败',Message='{1}' + where ReqCode='{0}'"; + logsql = string.Format(logsql, JsonData.reqCode, ex.Message); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + if (cmd.Transaction != null) + cmd.Transaction.Rollback(); + log.Error(ex.Message); + AGVResult res = new AGVResult(); + res.code = "1"; + res.message = ex.Message;// "接口调用失败!"; + res.reqCode = JsonData.reqCode; + return res; + } + finally + { + if (conn.State == ConnectionState.Open) + { + conn.Close(); + } + conn.Dispose(); + } + } + } + #endregion + #region 临时接口(用于单独过账SAP接口 不经过WMS) /// /// 临时接口(用于单独过账SAP接口 不经过WMS) diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs index 3e51206..a0a64f9 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs @@ -3300,7 +3300,7 @@ namespace ICSSoft.DataProject sql = @"select TOP 1 A.LocationCode,A.StockInArea from ICSLocation A LEFT JOIN ICSWareHouseLotInfo B ON B.LocationCode=A.LocationCode AND B.WorkPoint=A.WorkPoint AND ISNULL(B.Quantity,0)>0 where B.LocationCode IS NULL AND A.LocationCode like ('{0}'+'-'+'{1}%') AND ISNULL(A.EATTRIBUTE1,'')!='' - AND A.LocationCode NOT IN ({2}) AND ISNULL(A.Isoccupy,'')='' + AND A.EATTRIBUTE1 NOT IN ({2}) AND ISNULL(A.Isoccupy,'')='' ORDER BY A.LocationCode"; sql = string.Format(sql, InWHCode, InLocationCode, LocationIsTaken); dt = DBHelper.SQlReturnData(sql, cmd);