From 66932656ecb5310aba806fcaf356c1054b9b55d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E6=99=94?= Date: Thu, 10 Aug 2023 15:49:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=BD=E5=A8=81=E5=8F=89=E8=BD=A6=E5=9B=9E?= =?UTF-8?q?=E5=BA=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ICSSoft.DataProject/ICSSubmitService.cs | 130 +++++++++++++++++- .../ICSWareHouseLotInfoService.cs | 84 ++++++++++- .../ICSSoft.Entity/ICSMaterialBackModel.cs | 20 +++ .../ICSSoft.Entity/ICSSoft.Entity.csproj | 1 + .../Controllers/WMSBarCoreController.cs | 68 +++++++++ 5 files changed, 300 insertions(+), 3 deletions(-) create mode 100644 ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSMaterialBackModel.cs diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs index 6c5d3fd..288642d 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs @@ -73,6 +73,14 @@ namespace ICSSoft.DataProject RAISERROR('源头单据:{3} 对应区域不是指定的可以无条码发料的区域!',16,1); RETURN END + + IF ((SELECT SUM(Quantity) AS Quantity from ICSMOApply where ApplyCode='{3}' and WorkPoint='{4}')> + (select ISNULL(SUM(ISNULL(Quantity,0)),0) AS TransQty from ICSWareHouseLotInfoLog + where TransCode='{3}' and WorkPoint='{4}' and TransType=15)) + BEGIN + RAISERROR('源头单据:{3} 未满足全部拣料条件,请确认拣料数据后再进行发料!',16,1); + RETURN + END --IF (select Count(A.InvCode) AS DocCount from ICSMOApply A -- INNER JOIN ICSInventoryDetail B ON B.INVCode=A.InvCode AND B.WHCode=A.WHCode AND B.WorkPoint=A.WorkPoint -- INNER JOIN Sys_SRM_ItemsDetail C ON C.F_Define1=B.LocationCode AND C.F_Define4='SAP_NOLOT' AND C.F_Define3=B.WorkPoint @@ -7614,7 +7622,7 @@ WHERE WorkPoint='{0}' AND Quantity>ISNULL(TransferQuantity, 0) order by Transfer } #endregion - #region 叉车搬运结束后回调(入库:PTWY上架 出库:PICK出库) + #region 叉车搬运结束后回调(入库:PTWY 出库:PICK) public static ForkLiftResult ForkLiftTaskEndIn(ForkLiftCallBackModel JsonData, string Jsonstr) { var language = LanguageHelper.GetName("WMSAPIInfo"); @@ -8589,5 +8597,125 @@ WHERE WorkPoint='{0}' AND Quantity>ISNULL(TransferQuantity, 0) order by Transfer } } #endregion + + #region 根据目标点位获取回库信息 + public static DataTable MaterialBackInfoGet(ICSMaterialBackModel JsonData) + { + var language = LanguageHelper.GetName("WMSAPIInfo"); + using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString)) + { + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + try + { + if (string.IsNullOrEmpty(JsonData.OutPosition)) + { + throw new Exception("传入出库点位不能为空"); + } + else if (string.IsNullOrEmpty(JsonData.WorkPoint)) + { + throw new Exception(language.GetNameByCode("WMSAPIInfo004"));//"站点不能为空!" + } + string sql = @"select StartLocation from ICSForkLiftTaskLog + where EndLocation='{0}' AND WorkPoint='{1}' AND ISNULL(EATTRIBUTE1,'')=''"; + sql = string.Format(sql, JsonData.OutPosition, JsonData.WorkPoint); + DataTable table = DBHelper.SQlReturnData(sql, cmd); + if (table.Rows.Count == 0) + { + throw new Exception("出库点位未查询到相关的未回库记录,无法回库!"); + } + return table; + } + catch (Exception ex) + { + log.Error(ex.Message); + throw new Exception(ex.Message); + } + finally + { + if (conn.State == ConnectionState.Open) + { + conn.Close(); + } + conn.Dispose(); + } + } + } + #endregion + + #region 回库(提交) + public static ForkLiftResult ActionMaterialBack(ICSMaterialBackModel JsonData, string Jsonstr) + { + var language = LanguageHelper.GetName("WMSAPIInfo"); + DataTable table = new DataTable(); + string GUID = Guid.NewGuid().ToString(); + string msg = ""; + using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString)) + { + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + try + { + #region 记录叉车回库日志 + string logsql = @"INSERT INTO ICSForkLiftMaterialBackLog + (ID,OutPosition,InputJSON,Resutl,Message,MTIME) + SELECT '{0}','{1}','{2}','',GETDATE()"; + logsql = string.Format(logsql, GUID, JsonData.OutPosition, Jsonstr); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + ForkLiftResult res = new ForkLiftResult(); + if (string.IsNullOrEmpty(JsonData.OutPosition)) + { + msg = "传入出库点位不能为空!"; + } + if (msg != "") + { + #region 更新叉车回库日志 + logsql = @"update ICSForkLiftMaterialBackLog set Result='失败',Message='{1}',MTIME=GETDATE() + where ID='{0}'"; + logsql = string.Format(logsql, GUID); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + res.Ret = 0; + res.RetMsg = msg;// "接口调用失败!"; + return res; + } + else + { + ICSWareHouseLotInfoService.ActionMaterialBack(GUID,JsonData.OutPosition, JsonData.WorkPoint, cmd, language); + } + res.Ret = 1; + res.RetMsg = "success";// "接口调用成功!"; + return res; + } + catch (Exception ex) + { + #region 更新叉车回库日志 + string logsql = @"update ICSForkLiftMaterialBackLog set Result='失败',Message='{1}',MTIME=GETDATE() + where ID='{0}'"; + logsql = string.Format(logsql, GUID); + DBHelper.ExecuteNonQuery(connString, CommandType.Text, logsql); + #endregion + if (cmd.Transaction != null) + cmd.Transaction.Rollback(); + log.Error(ex.Message); + ForkLiftResult res = new ForkLiftResult(); + res.Ret = 0; + res.RetMsg = ex.Message;// "接口调用失败!"; + return res; + } + finally + { + if (conn.State == ConnectionState.Open) + { + conn.Close(); + } + conn.Dispose(); + } + } + } + #endregion } } diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs index 9c994cf..fe4fd60 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs @@ -3493,7 +3493,7 @@ namespace ICSSoft.DataProject { try { - if (TaskType == "PTWY上架") + if (TaskType == "PTWY") { #region 入库 @@ -3719,7 +3719,7 @@ namespace ICSSoft.DataProject #endregion } - else if (TaskType == "PICK出库") + else if (TaskType == "PICK") { #region 出库(仅记录叉车搬运到的出库点位,用于后面的回库) @@ -3831,5 +3831,85 @@ namespace ICSSoft.DataProject } } + /// + /// 叉车回库调用叉车搬运接口 + /// + /// + /// + /// + public static void ActionMaterialBack(string GUID,string OutPosition,string WorkPoint, SqlCommand cmd, Dictionary language) + { + try + { + #region 回库 + + #region 根据出库点位获取回库库位 + string sql = @"select TaskCode,StartLocation from ICSForkLiftTaskLog + where EndLocation='{0}' AND WorkPoint='{1}' AND ISNULL(EATTRIBUTE1,'')=''"; + sql = string.Format(sql, OutPosition, WorkPoint); + DataTable dt = DBHelper.SQlReturnData(sql, cmd); + if (dt.Rows.Count == 0) + { + throw new Exception("出库点位未查询到相关的未回库记录,无法回库!"); + } + else + { + if (Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["UploadForkLift"])) + { + string ForkLiftUrl = System.Configuration.ConfigurationManager.AppSettings["ForkLiftUrl"]; + string Year = DateTime.Now.Year.ToString(); + string Month = DateTime.Now.Month.ToString().PadLeft(2, '0'); + string Day = DateTime.Now.Day.ToString().PadLeft(2, '0'); + string Pre = "CC" + Year + Month + Day; + string serialsql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}"; + serialsql = string.Format(serialsql, "1701", "ICSForkLiftTaskLog", "TaskCode", Pre, 4); + string TaskCode = DBHelper.SQlReturnData(serialsql, cmd).Rows[0][0].ToString(); + string SerialNum = DateTime.Now.Hour.ToString().PadLeft(2, '0'); + string InspectJosn = "{"; + InspectJosn += "\"ID\":\"" + TaskCode + "\",";//任务编号 + //InspectJosn += "\"PalletID\": \"" + ContainerCode + "\",";//料架号 + //InspectJosn += "\"LaneCode\": \"\","; + InspectJosn += "\"TaskType\": \"RETN\",";//任务类型 + InspectJosn += "\"SourceBin\": \"" + OutPosition + "\",";//起始点位 + InspectJosn += "\"DestBin\": \"" + dt.Rows[0]["StartLocation"].ToString() + "\"";//目标点位 + InspectJosn += "}"; + RestHelper rest = new RestHelper(ForkLiftUrl, HttpVerb.POST); + rest.PostData = InspectJosn; + string strResult = rest.MakeRequest(); + //string resultstr = HTTPHelper.Post(ERPUrl.AGVBineURL, InspectJosn); + ForkLiftResult result = JsonConvert.DeserializeObject(strResult); + if (result.Ret == 1) + { + #region 记录叉车的任务编号及相关信息 + sql = @"INSERT INTO ICSForkLiftTaskLog + (ID,TaskCode,ContainerCode,TaskType,StartLocation,EndLocation,MTIME,WorkPoint) + select NEWID(),'{0}','','RETN','{1}','{2}',GETDATE(),'1701' + update ICSForkLiftTaskLog SET EATTRIBUTE1='已回库' + where TaskCode='{4}' + Update ICSForkLiftMaterialBackLog set Result='成功',Message='' + where ID='{3}'"; + sql = string.Format(sql, TaskCode, OutPosition, dt.Rows[0]["StartLocation"].ToString(), GUID, dt.Rows[0]["TaskCode"].ToString()); + if (!DBHelper.ExecuteNonQuery(sql, cmd)) + { + //throw new Exception("任务编码:" + TaskCode + ",日志记录失败");//料架状态更新失败 + } + #endregion + } + else + { + throw new Exception(result.RetMsg); + } + } + } + #endregion + + #endregion + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + } } diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSMaterialBackModel.cs b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSMaterialBackModel.cs new file mode 100644 index 0000000..adf00a9 --- /dev/null +++ b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSMaterialBackModel.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ICSSoft.Entity +{ + public class ICSMaterialBackModel + { + /// + /// 出库点位 + /// + public string OutPosition { get; set; } + /// + /// 站点 + /// + public string WorkPoint { get; set; } + + } +} diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSSoft.Entity.csproj b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSSoft.Entity.csproj index 53e2711..2ff0174 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSSoft.Entity.csproj +++ b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSSoft.Entity.csproj @@ -78,6 +78,7 @@ + diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Controllers/WMSBarCoreController.cs b/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Controllers/WMSBarCoreController.cs index 5450733..dc8eec3 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Controllers/WMSBarCoreController.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Controllers/WMSBarCoreController.cs @@ -2980,5 +2980,73 @@ namespace ICSSoft.WebAPI.Controllers return result; } #endregion + + #region 根据扫描出库点位获取回库库位信息 + [HttpPost] + [Route("api/MaterialBackInfo/Get")] + public HttpResponseMessage MaterialBackInfoGet([FromBody] object JsonData) + { + log.Info("获取出库点位对应回库库位传入值" + JsonData); + try + { + if (JsonData != null && !string.IsNullOrWhiteSpace(JsonData.ToString()) && JsonData.ToString() != "[]") + { + ICSMaterialBackModel model = new ICSMaterialBackModel(); + model = JsonConvert.DeserializeObject(JsonData.ToString()); + var resultStr = ICSSubmitService.MaterialBackInfoGet(model); + res.Success = true; + res.Message = LanguageHelper.GetNameSingle("WMSAPI001");// "接口调用成功!"; + if (resultStr != null && resultStr.Rows.Count > 0 && resultStr.ToString() != "[]") + { + res.Data = resultStr; + } + } + } + catch (Exception ex) + { + log.Error("获取失败:" + ex.ToString()); + res.Success = false; + res.Message = ex.Message; + } + finally + { + str = JsonConvert.SerializeObject(res); + result.Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json"); + } + log.Debug("获取出库点位对应回库库位传入值:" + str); + return result; + } + #endregion + + #region 回库(提交) + [HttpPost] + [Route("api/ActionMaterialBack/Get")] + public HttpResponseMessage ActionMaterialBack([FromBody] object JsonData) + { + log.Info("获取出库点位对应回库库位传入值" + JsonData); + try + { + if (JsonData != null && !string.IsNullOrWhiteSpace(JsonData.ToString()) && JsonData.ToString() != "[]") + { + ICSMaterialBackModel model = new ICSMaterialBackModel(); + model = JsonConvert.DeserializeObject(JsonData.ToString()); + forkliftres = ICSSubmitService.ActionMaterialBack(model, JsonData.ToString()); + } + } + catch (Exception ex) + { + log.Error("获取失败:" + ex.ToString()); + forkliftres.Ret = 0; + forkliftres.RetMsg = ex.Message; + } + finally + { + str = JsonConvert.SerializeObject(forkliftres); + result.Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json"); + } + log.Debug("获取出库点位对应回库库位传入值:" + str); + return result; + } + #endregion } }