wxw
2024-09-09 581f48034da5f8a173d4ae1bfb0ce57d5f20e0f9
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -1,5 +1,8 @@

using Admin.NET.Core.Service;
using Elastic.Clients.Elasticsearch;
using WCS.Application.Entity;
using WCS.Application.Service.WcsDevice.Dto;
namespace WCS.Application;
@@ -203,22 +206,123 @@
    {
        var list = await _wcsDeviceRep.AsQueryable()
                                    .LeftJoin<WcsPlc>((a, b) => a.PlcId == b.Id)
                                    .Where((a, b) => a.DeviceType == DeviceTypeEnum.Business)
                                    .Select<WcsDeviceOutput>((a, b) => new WcsDeviceOutput() { Type = b.Type }, true)
                                    .ToListAsync();
        //获取跺机的状态
        foreach (var modDevice in list)
        {
            if (_sysCacheService.ExistKey("PlcConn" + modDevice.PlcId))
            if (_sysCacheService.ExistKey("PLCCONN" + modDevice.PlcId))
            {
                var cachePlc = _sysCacheService.Get<WcsPlc>("PlcConn" + modDevice.PlcId);
                var cachePlc = _sysCacheService.Get<WcsPlc>("PLCCONN" + modDevice.PlcId);
                modDevice.Status = cachePlc.IsConn;
                if (modDevice.Status)
                {
                    //读取plc的值
                    var modConn = PLCTaskAction.listPlcConn.FirstOrDefault(s => s != null && s.PlcId == modDevice.PlcId);
                    if (modConn == null)
                    {
                        continue;
                    }
                    try
                    {
                        var listPosition = await _wcsDeviceRep.Context.Queryable<WcsPosition>().Where(s => s.DeviceId == modDevice.Id).ToListAsync();
                        (var result, var plc) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos);
                        modDevice.Plc = Convert.ToString(plc);
                        (result, var wcs) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
                        modDevice.Wcs = Convert.ToString(wcs);
                        //任务号
                        var modPositionTask = listPosition.FirstOrDefault(s => s.Text == "任务号");
                        (result, var taskNo) = modConn.GetPlcDBValue(modPositionTask.PosType, modDevice.DbNumber, modPositionTask.PlcPos, modPositionTask.StringLength);
                        modDevice.TaskNo = Convert.ToString(taskNo);
                        //任务类型
                        var modPositionTaskType = listPosition.FirstOrDefault(s => s.Text == "任务类型");
                        (result, var taskType) = modConn.GetPlcDBValue(modPositionTaskType.PosType, modDevice.DbNumber, modPositionTaskType.PlcPos);
                        modDevice.TaskType = (TaskTypeEnum)Convert.ToInt32(taskType);
                        //起始工位
                        var modPositionStartLocatNo = listPosition.FirstOrDefault(s => s.Text == "起始工位");
                        (result, var startLocatNo) = modConn.GetPlcDBValue(modPositionStartLocatNo.PosType, modDevice.DbNumber, modPositionStartLocatNo.PlcPos);
                        modDevice.StartLocatNo = Convert.ToString(startLocatNo);
                        //目的工位
                        var modPositionEndLocatNo = listPosition.FirstOrDefault(s => s.Text == "目的工位");
                        (result, var endLocatNo) = modConn.GetPlcDBValue(modPositionEndLocatNo.PosType, modDevice.DbNumber, modPositionEndLocatNo.PlcPos);
                        modDevice.EndLocatNo = Convert.ToString(endLocatNo);
                        //托盘码
                        var modPositionPalletNo = listPosition.FirstOrDefault(s => s.Text == "托盘码");
                        (result, var palletNo) = modConn.GetPlcDBValue(modPositionPalletNo.PosType, modDevice.DbNumber, modPositionPalletNo.PlcPos, modPositionPalletNo.StringLength);
                        modDevice.PalletNo = Convert.ToString(palletNo);
                    }
                    catch (Exception)
                    {
                    }
                }
            }
            else
            {
                modDevice.Status = false;
            }
            //modDevice.TaskNo = "TK00001";
            //modDevice.TaskType = TaskTypeEnum.In;
            //modDevice.PalletNo = "2024209032";
            //modDevice.StartLocatNo = "010101";
            //modDevice.EndLocatNo = "020202";
            //modDevice.Wcs = new Random().Next(100).ToString();
            //modDevice.Plc = new Random().Next(100).ToString();
            //modDevice.Status = true;
        }
        return list;
    }
    #region 分拣码垛
    /// <summary>
    /// 获取码垛机器人和拆垛机器人列表
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "WcsPackPlcList")]
    [DisplayName("获取码垛机器人和拆垛机器人列表")]
    public async Task<dynamic> WcsPackPlcList()
    {
        return await _wcsDeviceRep.Context.Queryable<WcsPlc>()
                .Where(w => w.Type == PLCTypeEnum.RobotPalletizer || w.Type == PLCTypeEnum.StackingRobot)
                .OrderByDescending(o => o.Type)
                .Select(u => new
                {
                    id = u.Id,
                    name = u.Text
                }
                ).ToListAsync();
    }
    /// <summary>
    /// 获取设备对应工位列表
    /// </summary>
    /// <param name="entry"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "WcsPackStationPlcList")]
    [DisplayName("获取设备对应工位列表")]
    public async Task<List<WcsDeviceTaskOrderDto>> WcsPackStationPlcList([FromQuery]WcsDeviceBaseInput entry)
    {
        return await _wcsDeviceRep.Context.Queryable<WcsDevice>()
                .LeftJoin<WcsCheckTask>((device, task) => device.StationNum == task.Port)
                .Where((device, task) => device.PlcId == entry.PlcId)
                .OrderBy((device, task) => device.CreateTime)
                .Select((device, task) => new WcsDeviceTaskOrderDto()
                {
                    Id=device.Id,
                    Text=device.Text,
                    OrderNo=task.OrderNo,
                    LotNo=task.LotNo,
                    SkuNo=task.SkuNo,
                    SkuName=task.SkuName,
                    LineNO=task.LineNO,
                    Status =task.Status,
                    Qty=task.Qty
                })
                .ToListAsync();
    }
    #endregion
}