IPC-610
2024-09-26 cff60cb1cccf70fe33ed9c951c46143fe41fc43a
设备呼叫空托跺
3个文件已修改
166 ■■■■■ 已修改文件
Admin.NET/WCS.Application/Model/TaskRequest.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Util/HttpService.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Model/TaskRequest.cs
@@ -276,4 +276,32 @@
    public int TaskType { get; set; }
}
/// <summary>
/// 空托盘出库
/// </summary>
public class OutPalletModel
{
    /// <summary>
    /// 出库垛数
    /// </summary>
    public string Num { get; set; }
    /// <summary>
    /// 出库口
    /// </summary>
    public string OutMode { get; set; }
}
/// <summary>
/// 申请空托出库WMS返回的实体
/// </summary>
public class ResponseOutPallet
{
    public string StatusCode { get; set; }
    public int Success { get; set; }
    public string Message { get; set; }
    public List<ResponseTasksModel> TaskList { get; set; }
}
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1345,20 +1345,95 @@
            #endregion
            #region 叫空托盘跺
            case "50":
                // plc申请空托
                {
                    // 调用WMS空托出库接口,返回出库任务存入出库表
                    // 写入
                    var strMsg = "";
                    var http = new HttpService();
                    strMsg = http.IssuePlnOutHouseWcs("1", "205");
                    if (!strMsg.Contains("-1"))
                    {
                        // 写入plc流程字60
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
                    }
                    else
                    {
                        // 申请巷道失败!LED显示
                        Log.Error(string.Format($"工位号:{modDevice.StationNum}申请空托跺失败:{strMsg};"));
                    }
                }
                break;
            case "80":
                // 空托盘跺已到位
                {
                    // 调用wms任务出库任务完成
                    // 获取跺机点位配置
                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号");
                    var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTask.PlcPos);
                    // 根据任务号获取任务信息
                    if (res.IsSucceed)
                    {
                        string tasknoVal = val.ToString();
                        var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false);
                        if (modTask == null)
                        {
                            Log.Error(string.Format($"工位号:{modDevice.StationNum}空托盘到达,未找到对应的任务!任务号{tasknoVal};"));
                            break;
                        }
                        // 写入plc流程字90
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "90");
                        if (ret.IsSucceed)
                        {
                            // 改变任务状态
                            modTask.Status = TaskStatusEnum.Complete;
                            modTask.FinishDate = DateTime.Now;
                            _db.Updateable(modTask).ExecuteCommand();
                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                            var modTaskMonitor = new WcsTaskMonitor()
                            {
                                TaskNo = modTask.TaskNo,
                                PlcId = modDevice.Id,
                                PlcName = modDevice.Text,
                                PalletNo = modTask.PalletNo,
                                Status = TaskStatusEnum.Complete,
                                StartLocat = modTask.StartLocate,
                                EndLocat = modTask.EndLocate,
                                InteractiveMsg = $"任务完成"
                            };
                            if (modTask.Origin == "WMS")
                            {
                                // 反馈WMS
                                var requestMode = new TaskRequestWMS()
                                {
                                    TaskNo = modTask.TaskNo,
                                    PalletNo = modTask.PalletNo,
                                    TaskType = ((int)TaskTypeEnum.Out).ToString(),
                                    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                                };
                                HttpService httpService = new HttpService();
                                var modResponseTask = httpService.RequestTask(requestMode).Result;
                                if (modResponseTask.StatusCode == 0)
                                {
                                    modTaskMonitor.InteractiveMsg = "任务完成,返回给WMS任务完成";
                                }
                                else
                                {
                                    Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg));
                                }
                            }
                            // 插入交互日志
                            _db.Insertable(modTaskMonitor).ExecuteCommand();
                            //下发任务日志
                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                        }
                    }
                }
                break;
            #endregion
            default: break;
        }
Admin.NET/WCS.Application/Util/HttpService.cs
@@ -227,7 +227,6 @@
        }
        return returnStr;
    }
@@ -269,4 +268,62 @@
        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.Out,
                        Status = TaskStatusEnum.Wait,
                        //IsSuccess =TaskSuccessEnum.Success,
                        Origin = "WMS",
                        StartLocate = item.StartLocate,
                        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;
    }
}