InitBll.cs 9.11 KB
using DMSkin.Core;

using HslCommunication.Profinet.Siemens;

using System.Linq;

namespace HH_WCS_Standard.Service.Comm
{
    public static class InitBll
    {
        private static BaseDal<I_Device> _deviceDb = new BaseDal<I_Device>();
        private static BaseDal<I_Pose> _poseDb = new BaseDal<I_Pose>();
        private static BaseDal<I_Task> _taskDb = new BaseDal<I_Task>();
        private static BaseDal<T_TaskFlow> _taskflowDb = new BaseDal<T_TaskFlow>();
        private static BaseDal<I_Device_Address> _deviceAddressDb = new BaseDal<I_Device_Address>();

        public static BllResult BuildInit()
        {
            var deviceresult = BuildDevice();
            var poseresult = BuildPose();
            var taskresult = BuildTask();
            var taskflowresult = BuildTaskFlow();
            if (!deviceresult.Success)
            {
                return BllResult.Error($"初始化设备列表失败:{deviceresult.Msg}");
            }
            if (!poseresult.Success)
            {
                return BllResult.Error($"初始化坐标列表失败:{poseresult.Msg}");
            }
            if (!taskresult.Success)
            {
                return BllResult.Error($"初始化任务列表失败:{taskresult.Msg}");
            }
            if (!taskflowresult.Success)
            {
                return BllResult.Error($"初始化任务流程列表失败:{taskflowresult.Msg}");
            }
            return BllResult.Sucess();
        }

        private static BllResult BuildDevice()
        {
            var deviceResult = _deviceDb.Query(a => a.IsEnable == true);
            var deviceAddressResult = _deviceAddressDb.Query();

            if (!deviceResult.Success || !deviceAddressResult.Success)
            {
                return BllResult.Error($"初始化设备信息异常");
            }
            var Device_AddressList = deviceAddressResult.Data;

            foreach (I_Device device in deviceResult.Data)
            {
                SiemensHelp help;
                if (!System.Net.IPAddress.TryParse(device.IP, out System.Net.IPAddress address))
                {
                    return BllResult.Error($"{device.Name}的IP地址配置错误"); ;
                }

                var helpG = App.helps.FirstOrDefault(a => a.ip == address.ToString());
                if (helpG != null)
                {
                    help = (SiemensHelp)helpG;
                }
                else
                {
                    help = new SiemensHelp(SiemensPLCS.S1500, device.IP);
                    App.helps.Add(help);
                }
                var ReadAddressList = Device_AddressList.FindAll(a => a.Code == device.Code && a.Type == "Read");
                var WriteAddressList = Device_AddressList.FindAll(a => a.Code == device.Code && a.Type == "Write");

                if (device.Type == "Entrance" || device.Type == "OutStation")
                {
                    //地址请求的站台处理
                    var vM_ReadModel = new VM_StationDR(device.Name);
                    var vM_WriteModel = new VM_StationDACK(device.Name);

                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.i_Excutes.Add(new StationDRExcute(f_ServiceModel));
                    App.vM_StationDRs.Add(vM_ReadModel);
                    App.vM_StationDACKs.Add(vM_WriteModel);
                }
                else if (device.Type == "InStation" || device.Type == "Exit")
                {
                    //地址到达的站台处理
                    var vM_ReadModel = new VM_StationPR(device.Name);
                    var vM_WriteModel = new VM_StationACK(device.Name);

                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.i_Excutes.Add(new StationPRExcute(f_ServiceModel));
                    App.vM_StationPRs.Add(vM_ReadModel);
                    App.vM_StationACKs.Add(vM_WriteModel);
                }
                else if (device.Type == "Srm")
                {
                    var vM_ReadModel = new VM_SrmRead(device.Name);
                    var vM_WriteModel = new VM_SrmWrite(device.Name);

                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.i_Excutes.Add(new SingleSrmExcute(f_ServiceModel));
                    App.vM_SrmReads.Add(vM_ReadModel);
                    App.vM_SrmWrites.Add(vM_WriteModel);
                }
                else if (device.Type == "PointState")  //点状态推送
                {
                    var vM_ReadModel = new VM_PointStateRead(device.Name);
                    var vM_WriteModel = new VM_PointStateWrite(device.Name);
                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.i_Excutes.Add(new PointStateExcute(f_ServiceModel));
                    App.vM_PointStateReads.Add(vM_ReadModel);
                    App.vM_PointStateWrites.Add(vM_WriteModel);
                }
                else if (device.Type == "ConveyorError")           //输送线报警信息推送
                {
                    //输送线报警处理
                    var vM_ReadModel = new VM_ConveyorErrorRead(device.Name);
                    var vM_WriteModel = new VM_ConveyorErrorWrite(device.Name);
                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.i_Excutes.Add(new ConveyorErrorExcute(f_ServiceModel));
                    App.ConveryErrMsgs = vM_ReadModel.ConveyorErrorMsg;
                }
                else if (device.Type == "SrmState")  //显示 堆垛机故障及基本运行时间等
                {
                    var vM_ReadModel = new VM_SrmStateRead(device.Name);
                    var vM_WriteModel = new VM_SrmStateWrite(device.Name);
                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.i_Excutes.Add(new SrmStateExcute(f_ServiceModel));
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.vM_SrmStateReads.Add(vM_ReadModel);
                }
                else if (device.Type == "ConveyorState") //显示 输送线故障数量及基本运行时间
                {
                    var vM_ReadModel = new VM_ConveyorStateRead(device.Name);
                    var vM_WriteModel = new VM_ConveyorStateWrite(device.Name);
                    F_ServiceModel f_ServiceModel = new F_ServiceModel(device, help, vM_ReadModel, vM_WriteModel, ReadAddressList, WriteAddressList);
                    App.i_Excutes.Add(new ConveyorStateExcute(f_ServiceModel));
                    App.f_ServiceModels.Add(f_ServiceModel);
                    App.vM_ConveyorStateReads.Add(vM_ReadModel);
                }
                else
                {
                    return BllResult.Error($"设备类型不存在");
                }
            }
            return BllResult.Sucess();
        }

        private static BllResult BuildPose()
        {
            var poseResult = _poseDb.Query();
            if (!poseResult.Success)
            {
                return BllResult.Error($"初始化坐标信息异常");
            }
            else
            {
                App.poseList = poseResult.Data;
                return BllResult.Sucess();
            }
        }

        private static BllResult BuildTask()
        {
            var taskResult = _taskDb.Query();
            if (!taskResult.Success)
            {
                if (taskResult.Msg != "未查询到数据")
                {
                    return BllResult.Error($"初始化任务信息异常");
                }
                else
                {
                    return BllResult.Sucess();
                }
            }
            else
            {
                foreach (var _task in taskResult.Data)
                {
                    UIExecute.Run(() =>
                    {
                        App.taskList.Add(_task);
                    });
                }
                return BllResult.Sucess();
            }
        }

        private static BllResult BuildTaskFlow()
        {
            var taskflowResult = _taskflowDb.Query();
            if (!taskflowResult.Success)
            {
                return BllResult.Error($"初始化任务流程信息异常");
            }
            else
            {
                App.taskflowList = taskflowResult.Data;
                return BllResult.Sucess();
            }
        }
    }
}