Browse Source

纽威叉车回库功能

master
陆晔 2 years ago
parent
commit
66932656ec
  1. 130
      ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs
  2. 84
      ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs
  3. 20
      ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSMaterialBackModel.cs
  4. 1
      ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSSoft.Entity.csproj
  5. 68
      ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Controllers/WMSBarCoreController.cs

130
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
}
}

84
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
}
}
/// <summary>
/// 叉车回库调用叉车搬运接口
/// </summary>
/// <param name="TaskID"></param>
/// <param name="cmd"></param>
/// <param name="language"></param>
public static void ActionMaterialBack(string GUID,string OutPosition,string WorkPoint, SqlCommand cmd, Dictionary<string, string> 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<ForkLiftResult>(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);
}
}
}
}

20
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
{
/// <summary>
/// 出库点位
/// </summary>
public string OutPosition { get; set; }
/// <summary>
/// 站点
/// </summary>
public string WorkPoint { get; set; }
}
}

1
ICSSoft.WMS.WebAPI/ICSSoft.Entity/ICSSoft.Entity.csproj

@ -78,6 +78,7 @@
<Compile Include="LOTStockDownHGModel.cs" />
<Compile Include="AGVPodBindModel.cs" />
<Compile Include="LOTStockForkLiftModel.cs" />
<Compile Include="ICSMaterialBackModel.cs" />
<Compile Include="SAPGetWMSWHInfoModel.cs" />
<Compile Include="OccupyDocModel.cs" />
<Compile Include="LOTStockUpHGModel.cs" />

68
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<ICSMaterialBackModel>(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<ICSMaterialBackModel>(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
}
}
Loading…
Cancel
Save