using DocumentFormat.OpenXml.EMMA;
|
using DocumentFormat.OpenXml.Vml.Office;
|
using Elastic.Clients.Elasticsearch;
|
using Furion.Logging;
|
using Furion.RemoteRequest.Extensions;
|
using Newtonsoft.Json;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
using System.Text;
|
using WCS.Application.Entity;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionResponse.Types;
|
|
namespace WCS.Application;
|
public class HttpService
|
{
|
private dynamic Urls;
|
|
private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
|
public HttpService()
|
{
|
var _sysConfigService = App.GetService<SysConfigService>();//todo 这里需要测试下生命周期问题
|
Urls = _sysConfigService.GetSystemInfo().Result;
|
}
|
|
|
/// <summary>
|
/// 调用WMS接口申请巷道接口
|
/// </summary>
|
/// <param name="palletNo"></param>
|
/// <param name="startLocat"></param>
|
/// <param name="taskModel"></param>
|
/// <param name="ceng"></param>
|
/// <param name="endLocat"></param>
|
/// <param name="taskNo"></param>
|
/// <returns></returns>
|
public string RequestRoadWay(string palletNo, string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo)
|
{
|
string returnStr = "";
|
|
|
var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo);
|
|
if (task == null)
|
{
|
var model = new RequestAsnTask()
|
{
|
PalletNo = palletNo,
|
HouseNo = "W01",
|
TaskModel = taskModel
|
};
|
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var result = (url + "/api/DownAPi/RequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
|
Log.Information("调用WMS接口反馈任务接口" + result.ToJson());
|
if (result.Success == 0)
|
{
|
|
var taskAdd = new WcsTask()
|
{
|
TaskType = TaskTypeEnum.In,
|
Status = TaskStatusEnum.Wait,
|
Origin = "WMS",
|
StartLocate = startLocat,
|
PalletNo = palletNo,
|
TaskNo = result.TaskList.TaskNo,
|
Levels = 999,
|
EndLocate = result.TaskList.EndLocate,
|
EndRoadway = result.TaskList.EndRoadway
|
};
|
|
_db.Insertable(taskAdd).ExecuteCommand();
|
endLocat = result.TaskList.EndRoadway;
|
taskNo = result.TaskList.TaskNo;
|
returnStr = result.TaskList.EndLocate;
|
|
}
|
else
|
{
|
returnStr = "-1:" + result.Message;
|
return returnStr;
|
}
|
}
|
else
|
{
|
returnStr = task.EndLocate;
|
endLocat = task.EndRoadway;
|
taskNo = task.TaskNo;
|
}
|
|
endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng);
|
|
return returnStr;
|
}
|
|
/// <summary>
|
/// 调用WMS接口自动码垛绑定信息返回巷道口
|
/// </summary>
|
/// <returns></returns>
|
public string BindRequestRoadWay(string orderNo, string palletNo, decimal qty, string type, string skuNo, string lotNo, string lotText, string supplierLot, List<WcsBoxInfo> detail,
|
string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo)
|
{
|
string returnStr = "";
|
|
var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo);
|
if (task == null)
|
{
|
var model = new BoxPalletBindVm()
|
{
|
OrderCode = "",//暂无上游系统编号
|
AsnNo = orderNo,
|
AsnDetailNo = 0,//暂无入库单明细编号,WMS根据物料批次查找
|
PalletNo = palletNo,
|
Qty = qty,
|
Type = type,
|
SkuNo = skuNo,
|
LotNo = lotNo,
|
LotText = lotText,
|
SupplierLot = supplierLot,
|
Detail = detail
|
};
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var result = (url + "/api/DownAPi/BindRequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
|
Log.Information("调用WMS接口反馈任务接口" + result.ToJson());
|
if (result.Success == 0)
|
{
|
var taskAdd = new WcsTask()
|
{
|
TaskType = TaskTypeEnum.In,
|
Status = TaskStatusEnum.Wait,
|
Origin = "WMS",
|
StartLocate = startLocat,
|
PalletNo = palletNo,
|
TaskNo = result.TaskList.TaskNo,
|
EndLocate = result.TaskList.EndLocate,
|
EndRoadway = result.TaskList.EndRoadway
|
};
|
|
_db.Insertable(taskAdd).ExecuteCommand();
|
endLocat = result.TaskList.EndRoadway;
|
returnStr = result.TaskList.EndLocate;
|
taskNo = result.TaskList.TaskNo;
|
}
|
else
|
{
|
returnStr = "-1:" + result.Message;
|
return returnStr;
|
}
|
}
|
else
|
{
|
returnStr = task.EndLocate;
|
endLocat = task.EndRoadway;
|
taskNo = task.TaskNo;
|
}
|
|
endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng);
|
|
return returnStr;
|
}
|
/// <summary>
|
/// 调用WMS接口申请储位接口
|
/// </summary>
|
/// <param name="palletNo"></param>
|
/// <param name="startLocat"></param>
|
/// <param name="taskModel"></param>
|
/// <param name="starRoadWay"></param>
|
/// <param name="taskNo"></param>
|
/// <returns></returns>
|
public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, ref string taskNo)
|
{
|
string returnStr = "";
|
|
|
var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false
|
&& (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)
|
&& m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo && !string.IsNullOrWhiteSpace(m.EndLocate));
|
|
if (task == null)
|
{
|
var model = new RequestAsnTask()
|
{
|
PalletNo = palletNo,
|
HouseNo = "W01",
|
RoadWayNo = starRoadWay,
|
TaskModel = taskModel
|
};
|
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var result = (url + "/api/DownAPi/RequestLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
|
Log.Information("调用WMS申请储位接口反馈任务接口" + result.ToJson());
|
if (result.Success == 0)
|
{
|
var taskUp = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskNo == result.TaskList.TaskNo);
|
if (taskUp == null)
|
{
|
var taskAdd = new WcsTask()
|
{
|
TaskNo = result.TaskList.TaskNo,
|
TaskType = TaskTypeEnum.In,
|
Status = TaskStatusEnum.Wait,
|
//IsSuccess =TaskSuccessEnum.Success,
|
Origin = "WMS",
|
StartLocate = startLocat,
|
PalletNo = palletNo,
|
EndLocate = result.TaskList.EndLocate,
|
EndRoadway = result.TaskList.EndRoadway
|
};
|
_db.Insertable(taskAdd).ExecuteCommand();
|
HubUtil.PublicTask(taskAdd.Adapt<WcsTaskOutput>());
|
}
|
else
|
{
|
taskUp.EndRoadway = result.TaskList.EndRoadway;
|
taskUp.EndLocate = result.TaskList.EndLocate;
|
_db.Updateable(taskUp).ExecuteCommand();
|
HubUtil.PublicTask(taskUp.Adapt<WcsTaskOutput>());
|
}
|
|
|
returnStr = result.TaskList.EndLocate;
|
taskNo = result.TaskList.TaskNo;
|
}
|
else
|
{
|
returnStr = "-1:" + result.Message;
|
return returnStr;
|
}
|
}
|
else
|
{
|
returnStr = task.EndLocate;
|
taskNo = task.TaskNo;
|
}
|
|
return returnStr;
|
}
|
|
|
/// <summary>
|
/// 调用WMS接口 反馈任务接口
|
/// </summary>
|
/// <param name="model">任务完成状态</param>
|
/// <returns></returns>
|
public async Task<ResponseModel> RequestTask(TaskRequestWMS model)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var result = await (url + "/api/DownAPi/ReceiveWcsSignal").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseModel>();
|
Log.Information("调用WMS接口反馈任务接口" + result.ToJson());
|
return result;
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈空取异常接口
|
/// </summary>
|
/// <param name="model">任务信息</param>
|
/// <returns></returns>
|
public async Task<ResponseTasks> RequestEmptyException(TaskRequest model)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
//string TaskType = "";
|
//string TaskStatus = "";
|
//var PalletNo = "";
|
//var TaskNo = "";
|
var str = new
|
{
|
PalletNo = model.PalletNo,
|
TaskNo = model.TaskNo,
|
TaskType = model.TaskType.ToString(),
|
TaskStatus = model.TaskStatus.ToString(),
|
};
|
var result = await (url + "/api/DownAPi/EmptyException").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>();
|
Log.Information("调用WMS接口反馈空取异常接口" + result.ToJson());
|
return result;
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈满取异常接口
|
/// </summary>
|
/// <param name="model">任务信息</param>
|
/// <returns></returns>
|
public async Task<ResponseTasks> RequestFullException(TaskRequest model)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
PalletNo = model.PalletNo,
|
TaskNo = model.TaskNo,
|
TaskType = model.TaskType.ToString(),
|
TaskStatus = model.TaskStatus.ToString(),
|
};
|
var result = await (url + "/api/DownAPi/FullException").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>();
|
Log.Information("调用WMS接口反馈满取异常接口" + result.ToJson());
|
return result;
|
}
|
|
/// <summary>
|
/// 调用WMS接口申请空托跺出库
|
/// </summary>
|
/// <param name="Num"></param>
|
/// <param name="OutMode"></param>
|
/// <returns></returns>
|
public string IssuePlnOutHouseWcs(string Num, string OutMode)
|
{
|
string returnStr = "";
|
|
var model = new OutPalletModel()
|
{
|
Num = Num,//出库跺数
|
OutMode = OutMode//出库口
|
};
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var result = (url + "/api/DownAPi/IssuePlnOutHouseWcs").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseOutPallet>().Result;
|
Log.Information("调用WMS接口反馈任务接口" + result.ToJson());
|
|
if (result.Success == 0)
|
{
|
foreach (var item in result.TaskList)
|
{
|
var taskUp = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskNo == item.TaskNo);
|
if (taskUp == null)
|
{
|
var taskAdd = new WcsTask()
|
{
|
TaskNo = item.TaskNo,
|
TaskType = (TaskTypeEnum)(int.Parse(item.TaskType)),
|
Status = TaskStatusEnum.Wait,
|
//IsSuccess =TaskSuccessEnum.Success,
|
Origin = "WMS",
|
StartLocate = item.StartLocate,
|
StartRoadway = item.StartRoadway,
|
PalletNo = item.PalletNo,
|
EndLocate = item.EndLocate,
|
EndRoadway = item.EndRoadway
|
};
|
_db.Insertable(taskAdd).ExecuteCommand();
|
HubUtil.PublicTask(taskAdd.Adapt<WcsTaskOutput>());
|
}
|
else
|
{
|
taskUp.EndRoadway = item.EndRoadway;
|
taskUp.EndLocate = item.EndLocate;
|
_db.Updateable(taskUp).ExecuteCommand();
|
HubUtil.PublicTask(taskUp.Adapt<WcsTaskOutput>());
|
}
|
}
|
}
|
else
|
{
|
returnStr = "-1:" + result.Message;
|
return returnStr;
|
}
|
return returnStr;
|
}
|
|
/// <summary>
|
/// 调用WMS接口申请空托跺绑定
|
/// </summary>
|
/// <param name="Qty"></param>
|
/// <param name="palletNo"></param>
|
/// <returns></returns>
|
public string BindPlnInHouseWcs(string Qty, string palletNo)
|
{
|
var model = new BindPalletModel()
|
{
|
BindType = "1",//申请类型
|
Qty = int.Parse(Qty),//叠托机跺托盘数
|
PalletNo = palletNo,//托盘号
|
};
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var result = (url + "/api/DownAPi/BindPlnInHouseWcs").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<IsBaleModel2>().Result;
|
Log.Information("调用WMS接口反馈任务接口" + result.ToJson());
|
|
return result.Success.ToString();
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈申请缠膜接口
|
/// </summary>
|
/// <param name="PalletNo">托盘号</param>
|
/// <returns></returns>
|
public string RequestPackWcs(string PalletNo)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new PackModel()
|
{
|
PalletNo = PalletNo
|
};
|
|
var result = (url + "/api/DownAPi/RequestPackWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<IsBaleModel2>().Result;
|
Log.Information("调用WMS接口反馈申请缠膜异常接口" + result.ToJson());
|
|
return result.Success.ToString();
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈拆膜异常接口
|
/// </summary>
|
/// <param name="palletno">托盘号</param>
|
/// <returns></returns>
|
public string RequestUnPackWcs(string palletno)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
PalletNo = palletno
|
};
|
var result = (url + "/api/DownAPi/RequestUnPackWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<IsBaleModel2>().Result;
|
Log.Information("调用WMS接口反馈拆膜异常接口" + result.ToJson());
|
return result.Success.ToString();
|
}
|
|
|
|
/// <summary>
|
/// 调用WMS接口反馈缠膜完成
|
/// </summary>
|
/// <param name="palletno">托盘号</param>
|
/// <returns></returns>
|
public string RequestPackedWcs(string palletno)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
PalletNo = palletno
|
};
|
var result = (url + "/api/DownAPi/RequestPackedWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<IsBaleModel2>().Result;
|
Log.Information("调用WMS接口反馈缠膜完成异常接口" + result.ToJson());
|
return result.Success.ToString();
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈拆垛托盘信息
|
/// </summary>
|
/// <param name="palletno">托盘号</param>
|
/// <param name="taskno">任务号</param>
|
/// <returns></returns>
|
public RequestBoxInfoCheckAll RequestBoxCheckinfo(string palletno,string taskno)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
PalletNo = palletno,
|
TaskNo = taskno
|
};
|
var result = (url + "/api/DownAPi/ResultBoxInfoCheckWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<RequestBoxInfoCheckAll>().Result;
|
Log.Information("调用WMS接口反馈拆托托盘信息异常接口" + result.ToJson());
|
return result;
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈分拣出库箱信息
|
/// </summary>
|
/// <param name="palletno">托盘号</param>
|
/// <param name="taskno">任务号</param>
|
/// <returns></returns>
|
public IsBaleModel2 RequestBoxno(string palletno)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
PalletNo = palletno,
|
};
|
var result = (url + "/api/DownAPi/RequestBoxno").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<IsBaleModel2>().Result;
|
Log.Information("调用WMS接口反馈缠膜完成异常接口" + result.ToJson());
|
return result;
|
}
|
|
/// <summary>
|
/// 调用WMS接口验证箱码是否可拣货并返回装车口
|
/// </summary>
|
/// <param name="boxNo">箱码</param>
|
/// <returns></returns>
|
public RequestloadingAddre ResultBoxInfoExportWcs(string boxNo)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
BoxNo = boxNo,
|
PalletNo = "",
|
TaskNo = ""
|
};
|
var result = (url + "/api/DownAPi/ResultBoxInfoExportWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<RequestloadingAddre>().Result;
|
Log.Information("调用WMS接口验证箱码是否可拣货并返回装车口:" + result.ToJson());
|
|
return result;
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈AGV可放信号
|
/// </summary>
|
/// <param name="taskno">任务号</param>
|
/// <param name="port">工位号</param>
|
/// <returns></returns>
|
public string RequesContinueAgv(string taskno,string port)
|
{
|
string url = Urls.WMSAddress + ":" + Urls.WMSPort;
|
var str = new
|
{
|
TaskNo = taskno,
|
Port = port
|
};
|
var result = (url + "/api/DownAPi/AgcontinueTask").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync<IsBaleModel>().Result;
|
Log.Information("调用WMS接口反馈AGV可放接口" + result.ToJson());
|
return result.Success.ToString();
|
}
|
}
|