ConveyingExcute.cs 13.9 KB
using HHECS.Application.Enums;
using HHECS.Application.Service;
using HHECS.BLL.Services;
using HHECS.BllModel;
using HHECS.Communication;
using HHECS.Communication.PLC;
using HHECS.Dal;
using HHECS.Dal.Repository;
using HHECS.DAL;
using HHECS.DAL.Repository;
using HHECS.Executor.EquipmentHandler;
using HHECS.Model.Entities;
using HHECS.Model.Enums;
using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.Linq;

namespace HHECS.BLL.EquipmentExcute.Machine
{
    /// <summary>
    /// 自动打磨机
    /// </summary>
    public class ConveyingExcute : StationExecute
    {
        int toadd = 1008;
        public ConveyingExcute(EquipmentType equipmentType) : base(equipmentType)
        {

        }


        /// <summary>
        /// 执行地址请求,余料和废料不请求,切割机直接翻到切割下料台
        /// 注意:allEquipments引用所有设备,此为共享应用
        /// </summary>
        /// <param name="station"></param>
        /// <param name="allEquipments"></param>
        /// <param name="plc"></param>
        /// <returns></returns>
        public override BllResult ExcuteRequest(Equipment station, List<Equipment> allEquipments, PLCCore plc, User user)
        {

            try
            {
                var arriveBarcode = station[StationProps.RequestBarcode.ToString()];
                var number = station[StationProps.ArriveRealAddress.ToString()];
                var baseMaterialRepository = new BaseMaterialRepository();
                var cutPlanHeadRepository = new CutPlanHeadRepository();
                var cutPlandDilt = new CutPlanDetailRepository();
                var BusWorkOrderDetail = new BusWorkOrderDetailRepository();
                var Busworkorderhead = new BusWorkOrderHeadRepository();
                int gotoadd;
                int gotadd;
                if (string.IsNullOrEmpty(arriveBarcode.Value))
                {
                    return BllResultFactory.Error($"处理切割工位【{station.WorkStationCode}】设备【{station.Name}】下料条码{arriveBarcode.Value}为空请求失败,切割方案");
                }
                else
                {
                    var cutplandilt = cutPlandDilt.Where(t => t.BarCode.ToString() == arriveBarcode.Value).OrderByDescending(t => t.CreateTime).ToList();
                    if (cutplandilt == null)
                    {
                        return BllResultFactory.Error($"处理切割工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,没有找到切割明细");
                    }
                    //cutplandilt[0].CutState = (int)CutPlanDetailState.切割完成;

                    var buswork = Busworkorderhead.Where(t => t.WorkPieceNo == arriveBarcode.Value && t.Extend3 == "Y").ToList();

                    using (var uw = DALHelper.GetFreeSql().CreateUnitOfWork())
                    {
                        cutPlandDilt.UnitOfWork = uw;
                        var cutplanhead = cutPlanHeadRepository.Where(t => t.Keys == cutplandilt[0].HeadKeys).First();
                        if (cutplanhead == null)
                        {
                            return BllResultFactory.Error($"处理切割工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,没有找到切割主表明细");
                        }
                        var materl = baseMaterialRepository.Where(t => t.MaterialCode == cutplanhead.MaterialCode).First();
                        //var planhead = cutPlanHeadRepository.Where(t => t.Keys == cutplandilt[0].HeadKeys).First();
                        //var busworkorderdetail = BusWorkOrderDetail.Where(t => t.BodyKeys == cutplandilt[0].WorkOrderDetailKeys && t.OprSequenceName == "弯管" && t.State!=100).First();//如果存在弯管的给目的地为弯管机
                        if (!string.IsNullOrEmpty(cutplandilt[0].Extend2))
                        {
                            gotadd = Convert.ToInt32(cutplandilt[0].Extend2);
                            cutplandilt[0].UpdateTime = DateTime.Now;
                            if (string.IsNullOrEmpty(cutplandilt[0].CutStartTime.ToString()) || cutplandilt[0].CutStartTime == DateTime.MinValue)
                            {
                                cutplandilt[0].CutStartTime = DateTime.Now;
                            }
                            cutplandilt[0].CutEndTime = DateTime.Now;
                            cutPlandDilt.Update(cutplandilt);
                            var sendResult = SendAddressReplyToPlc(station, plc, StationMessageFlag.WCSAddressReply, StationLoadStatus.Default, "0", "0", "0", "0", "0", "0", gotadd.ToString(), "0", 0, cutplandilt[0].Cuttinglength, materl.Diameter, materl.Thickness);
                            if (sendResult.Success)
                            {
                                //WebApiService.Layingoff(cutplandilt[0].BarCode, gotadd.ToString());//告诉mes在哪下料
                                uw.Commit();
                                return BllResultFactory.Success($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求成功,工单id【{cutplandilt[0].Id}】信息写入设备成功,目的地{cutplandilt[0].Extend2}");
                            }
                            else
                            {
                                uw.Rollback();
                                return BllResultFactory.Error($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,工单id【{cutplandilt[0].Id}】信息写入设备失败,原因:{sendResult.Msg}");
                            }
                        }
                        else if (buswork.Count != 0)
                        {
                            gotadd = 1006;
                            cutplandilt[0].UpdateTime = DateTime.Now;
                            if (string.IsNullOrEmpty(cutplandilt[0].CutStartTime.ToString()) || cutplandilt[0].CutStartTime == DateTime.MinValue)
                            {
                                cutplandilt[0].CutStartTime = DateTime.Now;
                            }
                            cutplandilt[0].CutEndTime = DateTime.Now;
                            cutPlandDilt.Update(cutplandilt);
                            var sendResult = SendAddressReplyToPlc(station, plc, StationMessageFlag.WCSAddressReply, StationLoadStatus.Default, "0", "0", "0", "0", "0", "0", gotadd.ToString(), "0", 0, cutplandilt[0].Cuttinglength, materl.Diameter, materl.Thickness);
                            if (sendResult.Success)
                            {
                                //WebApiService.Layingoff(cutplandilt[0].BarCode, gotadd.ToString());//告诉mes在哪下料
                                uw.Commit();
                                return BllResultFactory.Success($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求成功,工单id【{cutplandilt[0].Id}】信息写入设备成功,目的地{gotadd},该焊接为套管");
                            }
                            else
                            {
                                uw.Rollback();
                                return BllResultFactory.Error($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,工单id【{cutplandilt[0].Id}】信息写入设备失败,原因:{sendResult.Msg}");
                            }
                        }
                        else if (cutplandilt[0].Cuttinglength <= 800)
                        {
                            cutplandilt[0].Extend2 = "切割下料";
                            cutplandilt[0].UpdateTime = DateTime.Now;
                            if (string.IsNullOrEmpty(cutplandilt[0].CutStartTime.ToString()) || cutplandilt[0].CutStartTime == DateTime.MinValue)
                            {
                                cutplandilt[0].CutStartTime = DateTime.Now;
                            }
                            cutplandilt[0].CutEndTime = DateTime.Now;
                            cutPlandDilt.Update(cutplandilt);

                            var sendResult = SendAddressReplyToPlc(station, plc, StationMessageFlag.WCSAddressReply, StationLoadStatus.Default, "0", "0", "0", "0", "0", "0", "切割下料", "0", 0, cutplandilt[0].Cuttinglength, materl.Diameter, materl.Thickness);
                            if (sendResult.Success)
                            {
                                //WebApiService.Layingoff(cutplandilt[0].BarCode, gotoadd.ToString());//告诉mes在哪下料
                                uw.Commit();
                                return BllResultFactory.Success($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求成功,工单id【{cutplandilt[0].Id}】信息写入设备成功,目的地{cutplandilt[0].Extend2}");
                            }
                            else
                            {
                                uw.Rollback();
                                return BllResultFactory.Error($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,工单id【{cutplandilt[0].Id}】信息写入设备失败,原因:{sendResult.Msg}");
                            }
                        }
                        // 小于900 的也不能去焊接
                        else if (cutplandilt[0].flowOrientation1 == "W" || cutplandilt[0].flowOrientation1 == "0" || cutplandilt[0].flowOrientation1 == "S" || cutplandilt[0].Cuttinglength < 900)
                        {
                            gotoadd = 1008;
                            cutplandilt[0].Extend2 = gotoadd.ToString();
                            cutplandilt[0].UpdateTime = DateTime.Now;
                            if (string.IsNullOrEmpty(cutplandilt[0].CutStartTime.ToString()) || cutplandilt[0].CutStartTime == DateTime.MinValue)
                            {
                                cutplandilt[0].CutStartTime = DateTime.Now;
                            }
                            cutplandilt[0].CutEndTime = DateTime.Now;
                            cutPlandDilt.Update(cutplandilt);

                            var sendResult = SendAddressReplyToPlc(station, plc, StationMessageFlag.WCSAddressReply, StationLoadStatus.Default, "0", "0", "0", "0", "0", "0", gotoadd.ToString(), "0", 0, cutplandilt[0].Cuttinglength, materl.Diameter, materl.Thickness);
                            if (sendResult.Success)
                            {
                                WebApiService.Layingoff(cutplandilt[0].BarCode, gotoadd.ToString());//告诉mes在哪下料
                                uw.Commit();
                                return BllResultFactory.Success($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求成功,工单id【{cutplandilt[0].Id}】信息写入设备成功,目的地{gotoadd.ToString()}");
                            }
                            else
                            {
                                uw.Rollback();
                                return BllResultFactory.Error($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,工单id【{cutplandilt[0].Id}】信息写入设备失败,原因:{sendResult.Msg}");
                            }
                        }
                        else if (cutplandilt[0].flowOrientation1 == "L")
                        {
                            toadd--; //全局变量,每次进来+1
                            if (toadd > 1007 || toadd < 1006) toadd = 1007;
                            cutplandilt[0].Extend2 = toadd.ToString();
                            cutplandilt[0].UpdateTime = DateTime.Now;
                            if (string.IsNullOrEmpty(cutplandilt[0].CutStartTime.ToString()) || cutplandilt[0].CutStartTime == DateTime.MinValue)
                            {
                                cutplandilt[0].CutStartTime = DateTime.Now;
                            }
                            cutplandilt[0].CutEndTime = DateTime.Now;
                            cutPlandDilt.Update(cutplandilt);
                            var sendResult = SendAddressReplyToPlc(station, plc, StationMessageFlag.WCSAddressReply, StationLoadStatus.Default, "0", "0", "0", "0", "0", "0", toadd.ToString(), "0", 0, cutplandilt[0].Cuttinglength, materl.Diameter, materl.Thickness);
                            if (sendResult.Success)
                            {
                                WebApiService.Layingoff(cutplandilt[0].BarCode, toadd.ToString());//告诉mes在哪下料
                                uw.Commit();
                                return BllResultFactory.Success($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求成功,工单id【{cutplandilt[0].Id}】信息写入设备成功。目的地{toadd.ToString()}");
                            }
                            else
                            {
                                uw.Rollback();
                                return BllResultFactory.Error($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,工单id【{cutplandilt[0].Id}】信息写入设备失败,原因:{sendResult.Msg}");
                            }
                        }
                        else
                        {
                            return BllResultFactory.Error($"处理输送线工位【{station.WorkStationCode}】设备【{station.Name}】地址请求下料失败,工单id【{cutplandilt[0].Id}】存在没有的下料工位,请检查套料数据");
                        }

                    }
                }
            }
            catch (Exception ex)
            {

                return BllResultFactory.Exception(ex, $"处理工位【{station.WorkStationCode}】设备【{station.Name}】地址请求失败,异常原因:{ex.Message}");
            }
        }
    }
}