DESKTOP-9BNTV8O
2025-03-11 3b87f36219202b4cec47840bd9f56fdbe53e7d04
Admin.NET/WCS.Application/Util/HttpService.cs
@@ -2,6 +2,7 @@
using Elastic.Clients.Elasticsearch;
using Furion.Logging;
using Furion.RemoteRequest.Extensions;
using NetTaste;
using Newtonsoft.Json;
using System.Text;
using WCS.Application.Entity;
@@ -10,6 +11,8 @@
namespace WCS.Application;
public class HttpService
{
    private static readonly object OLock = new object();
    private dynamic Urls;
    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
@@ -30,28 +33,113 @@
    /// <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)
    public string RequestRoadWay(string palletNo, string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo, int palletHeight)
    {
        string returnStr = "";
        Log.Information("调用WMS接口反馈任务接口-是否重复申请:" + palletNo);
        lock (OLock)
        {
            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);
            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,
                    PalletHeight = palletHeight
                };
                string url = Urls.WMSAddress + ":" + Urls.WMSPort;
                var result =  (url + "/api/DownAPi/RequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
                if (result == null)
                {
                    returnStr = "-1:调用WMS接口失败";
                    return returnStr;
                }
                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,
                        PalletQty = palletHeight//托盘高度
                    };
                    _db.Insertable(taskAdd).ExecuteCommand();
                    endLocat = result.TaskList.EndRoadway;
                    returnStr = result.TaskList.EndLocate;
                    taskNo = taskAdd.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>
        /// <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, int palletHeight)
    {
        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()
            var model = new BoxPalletBindVm()
            {
                OrderCode = "",//暂无上游系统编号
                AsnNo = orderNo,
                AsnDetailNo = 0,//暂无入库单明细编号,WMS根据物料批次查找
                PalletNo = palletNo,
                HouseNo = "W01",
                TaskModel = taskModel
                Qty = qty,
                Type = type,
                SkuNo = skuNo,
                LotNo = lotNo,
                LotText = lotText,
                SupplierLot = supplierLot,
                PalletHeight = palletHeight,
                Detail = detail
            };
            Log.Information("调用WMS自动码垛接口--请求报文:" + model.ToJson());
            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());
            var result = (url + "/api/DownApi/BindRequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
            Log.Information("调用WMS自动码垛接口--返回报文:" + result.ToJson());
            if (result.Success == 0)
            {
                if (result.TaskList == null)
                {
                    returnStr = $"-1:向WMS申请组托入库失败";
                    return returnStr;
                }
                var taskAdd = new WcsTask()
                {
                    TaskType = TaskTypeEnum.In,
@@ -62,78 +150,14 @@
                    TaskNo = result.TaskList.TaskNo,
                    Levels = 999,
                    EndLocate = result.TaskList.EndLocate,
                    EndRoadway = result.TaskList.EndRoadway
                };
                _db.Insertable(taskAdd).ExecuteCommand();
                endLocat = result.TaskList.EndRoadway;
                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
                    EndRoadway = result.TaskList.EndRoadway,
                    PalletQty = palletHeight//托盘高度
                };
                _db.Insertable(taskAdd).ExecuteCommand();
                endLocat = result.TaskList.EndRoadway;
                returnStr = result.TaskList.EndLocate;
                taskNo = taskAdd.TaskNo;
            }
            else
            {
@@ -161,7 +185,7 @@
    /// <param name="starRoadWay"></param>
    /// <param name="taskNo"></param>
    /// <returns></returns>
    public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, ref string taskNo)
    public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, ref string taskNo, int palletHeight)
    {
        string returnStr = "";
@@ -177,7 +201,8 @@
                PalletNo = palletNo,
                HouseNo = "W01",
                RoadWayNo = starRoadWay,
                TaskModel = taskModel
                TaskModel = taskModel,
                PalletHeight = palletHeight
            };
            string url = Urls.WMSAddress + ":" + Urls.WMSPort;
@@ -196,6 +221,7 @@
                        //IsSuccess =TaskSuccessEnum.Success,
                        Origin = "WMS",
                        StartLocate = startLocat,
                        Levels = 999,
                        PalletNo = palletNo,
                        EndLocate = result.TaskList.EndLocate,
                        EndRoadway = result.TaskList.EndRoadway
@@ -306,6 +332,7 @@
                        StartLocate = item.StartLocate,
                        StartRoadway=item.StartRoadway,
                        PalletNo = item.PalletNo,
                        Levels = 999,
                        EndLocate = item.EndLocate,
                        EndRoadway = item.EndRoadway
                    };
@@ -328,4 +355,87 @@
        }
        return returnStr;
    }
    /// <summary>
    /// 调用WMS接口给小车下发入库任务
    /// </summary>
    /// <param name="endLocation"></param>
    /// <returns></returns>
    public async Task<ResponseModel> IssuedAgvTask(string endLocation)
    {
        var model = new
        {
            EndLocation = endLocation
        };
        string url = Urls.WMSAddress + ":" + Urls.WMSPort;
        var result = await (url + "/api/DownAPi/WcsIssuedAgvTask").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseModel>();
        Log.Information("调用WMS接口WCS申请给小车下发入库任务接口" + result.ToJson());
        return result;
    }
    /// <summary>
    /// 根据出库任务号获取出库单类型
    /// </summary>
    /// <param name="endLocation"></param>
    /// <returns></returns>
    public async Task<ResponseModel> GetSoOrderTypeByTaskNo(string taskNo)
    {
        var model = new
        {
            TaskNo = taskNo
        };
        string url = Urls.WMSAddress + ":" + Urls.WMSPort;
        var result = await (url + "/api/DownAPi/GetSoOrderTypeByTaskNo").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseModel>();
        Log.Information("调用WMS接口根据出库任务号获取出库单类型" + result.ToJson());
        return result;
    }
    /// <summary>
    /// 根据托盘号获取托盘上物料品种信息
    /// </summary>
    /// <param name="palletNo">托盘号</param>
    /// <returns></returns>
    public string GetPalletPzNo(string palletNo)
    {
        var model = new
        {
            PalletNo = palletNo
        };
        string url = Urls.WMSAddress + ":" + Urls.WMSPort;
        var result = (url + "/api/DownAPi/GetStockDetailByPalletNo").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseSkuInfo>().Result;
        Log.Information("调用WMS接口根据托盘号获取托盘库存明细信息" + result.ToJson());
        string pzNo = string.Empty;
        if (result.Success == 0)
        {
            var palletSkuInfo = result.PalletSkuInfo;
            var pzInfo = _db.Queryable<WcsMateialPzInfo>().First(w => w.SkuNo == palletSkuInfo.SkuNo && w.SkuName == palletSkuInfo.SkuName);
            if (pzInfo != null)
            {
                pzNo = pzInfo.PZNo;
            }
        }
        return pzNo;
    }
    /// <summary>
    /// 成品箱码拆垛拣货
    /// </summary>
    /// <param name="taskNo"></param>
    /// <returns></returns>
    public string BoxUnstackd(string palletNo)
    {
        string returnStr = "";
        var model = new
        {
            PalletNo = palletNo
        };
        string url = Urls.WMSAddress + ":" + Urls.WMSPort;
        var result = (url + "/api/DownAPi/BoxUnstackd").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<WmsResponseModel>().Result;
        Log.Information("调用WMS接口成品箱码拆垛拣货" + result.ToJson());
        if (result.Success != 0)
        {
            returnStr = "-1:" + result.Message;
        }
        return returnStr;
    }
}