zhanghonglin
6 天以前 8f9b9411ca279670bd85fcfa7763987295ed9abf
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Job/FillingJob.cs
@@ -3,8 +3,17 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HslCommunication.WebSocket;
using Newtonsoft.Json;
using Quartz;
using WIDESEA_Common.FillingEnum;
using WIDESEA_Model.Models.Basic;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models.TaskInfo;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks.Command;
using WIDESEAWCS_Tasks.DBName;
namespace WIDESEAWCS_Tasks
@@ -12,6 +21,16 @@
    [DisallowConcurrentExecution]
    public class FillingJob : JobBase, IJob
    {
        private readonly IRepository<Dt_FillingOrder> _FillingRepository;
        private readonly IRepository<Dt_FillingOrder_Hty> _FillingHtyRepository;
        public FillingJob(IRepository<Dt_FillingOrder> FillingRepository, IRepository<Dt_FillingOrder_Hty> fillingHtyRepository)
        {
            _FillingRepository = FillingRepository;
            _FillingHtyRepository = fillingHtyRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
            //连接设备
@@ -22,15 +41,133 @@
                //OtherDevice TCevice = (OtherDevice)Storage.Devices.Find(v => v.DeviceName == "天车");
                if (device.Communicator.IsConnected)
                {
                    //读
                    short a = device.GetValue<FillingDBName, short>(FillingDBName.R_ceshi);
                    //写
                    device.SetValue(FillingDBName.W_ceshia, "zy");
                    device.SetValue(FillingDBName.W_ceshib, "wq");
                    device.SetValue(FillingDBName.W_ceshic, "df");
                    ////读
                    //short a = device.GetValue<FillingDBName, short>(FillingDBName.R_ceshi);
                    ////写
                    //device.SetValue(FillingDBName.W_ceshia, "zy");
                    //device.SetValue(FillingDBName.W_ceshib, "wq");
                    //device.SetValue(FillingDBName.W_ceshic, "df");
                    try
                    {
                        //是否喷码完成
                        short accomplish = device.GetValue<FillingDBName, short>(FillingDBName.R_Accomplish);
                        if (accomplish == 1)
                        {
                            //获取二维码
                            Dt_FillingOrder FillingOrder = GetFilling();
                            if (FillingOrder != null)
                            {
                                //任务实体转命令Model
                                FillingCommand? StackerCommand = FillingToCommand(FillingOrder);
                                if (StackerCommand != null)
                                {
                                    //发送命令
                                    device.SetValue(FillingDBName.W_QRcode1, StackerCommand.W_QRcode1);
                                    device.SetValue(FillingDBName.W_QRcode2, StackerCommand.W_QRcode2);
                                    device.SetValue(FillingDBName.W_QRcode3, StackerCommand.W_QRcode3);
                                    device.SetValue(FillingDBName.W_QRcode4, StackerCommand.W_QRcode4);
                                    device.SetValue(FillingDBName.W_QRcode5, StackerCommand.W_QRcode5);
                                    device.SetValue(FillingDBName.W_QRcode6, StackerCommand.W_QRcode6);
                                    device.SetValue(FillingDBName.W_QRcode7, StackerCommand.W_QRcode7);
                                    device.SetValue(FillingDBName.W_QRcode8, StackerCommand.W_QRcode8);
                                    device.SetValue(FillingDBName.W_QRcode9, StackerCommand.W_QRcode9);
                                    device.SetValue(FillingDBName.W_QRcode10, StackerCommand.W_QRcode10);
                                    device.SetValue(FillingDBName.W_QRcode11, StackerCommand.W_QRcode11);
                                    device.SetValue(FillingDBName.W_QRcode12, StackerCommand.W_QRcode12);
                                    device.SetValue(FillingDBName.W_QRcode13, StackerCommand.W_QRcode13);
                                    device.SetValue(FillingDBName.W_QRcode14, StackerCommand.W_QRcode14);
                                    device.SetValue(FillingDBName.W_QRcode15, StackerCommand.W_QRcode15);
                                    device.SetValue(FillingDBName.W_Refresh, StackerCommand.W_Refresh);
                                    //生成历史二维码信息
                                    FillingOrder.BarStatus = (int)FillingStatusEnum.ExecuteCompleted;
                                    Dt_FillingOrder_Hty FillingOrderHty = new Dt_FillingOrder_Hty();
                                    FillingOrderHty.ArticleNum = FillingOrder.ArticleNum;
                                    FillingOrderHty.ArticleName = FillingOrder.ArticleName;
                                    FillingOrderHty.Specification = FillingOrder.Specification;
                                    FillingOrderHty.batchNum = FillingOrder.batchNum;
                                    FillingOrderHty.BarCode = FillingOrder.BarCode;
                                    FillingOrderHty.WorkOrder = FillingOrder.WorkOrder;
                                    FillingOrderHty.BarNum = FillingOrder.BarNum;
                                    FillingOrderHty.CreationTime = FillingOrder.CreationTime;
                                    FillingOrderHty.WorkID = FillingOrder.WorkID;
                                    FillingOrderHty.ProductType = FillingOrder.ProductType;
                                    FillingOrderHty.BarStatus = FillingOrder.BarStatus;
                                    FillingOrderHty.BarCodeID = FillingOrder.BarCodeID;
                                    FillingOrderHty.ArticleNumID = FillingOrder.ArticleNumID;
                                    FillingOrderHty.MaterialName = FillingOrder.MaterialName;
                                    FillingOrderHty.WarehouseType = FillingOrder.WarehouseType;
                                    FillingOrderHty.MaterialCode = FillingOrder.MaterialCode;
                                    FillingOrderHty.Standby1 = FillingOrder.Standby1;
                                    FillingOrderHty.Standby2 = FillingOrder.Standby2;
                                    _FillingHtyRepository.AddData(FillingOrderHty);
                                    _FillingRepository.DeleteData(FillingOrder);
                                    string address = AppSettings.Get("WMSApiAddress");
                                    if (!string.IsNullOrEmpty(address))
                                    {
                                        HttpHelper.Post($"{address}/api/FillingOrder/UpdateFilling?FillingNumber={FillingOrder.BarCode}", "");
                                    }
                                    //延迟2s让罐装机更变信号
                                    Thread.Sleep(2000);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        WriteError(nameof(StackerCraneJob), ex.Message);
                    }
                }
            }
            return Task.CompletedTask;
        }
        //获取二维码
        public Dt_FillingOrder GetFilling()
        {
            Dt_FillingOrder FillingOrder = new Dt_FillingOrder();
            FillingOrder = _FillingRepository.QueryData(x => x.BarStatus == (int)FillingStatusEnum.Queue).OrderBy(x => x.Id).First();
            return FillingOrder;
        }
        //任务实体转命令Model
        public FillingCommand FillingToCommand(Dt_FillingOrder FillingOrder)
        {
            FillingCommand fillingCommand = new FillingCommand();
            //拆分字符串
            int lengths = FillingOrder.BarCode.Length;
            string BarCodes= FillingOrder.BarCode;
            for (int i=0;i < 30 - lengths;i++)
            {
                BarCodes = BarCodes + "X";
            }
            fillingCommand.W_QRcode1 = BarCodes.Substring(0, 2);
            fillingCommand.W_QRcode2 = BarCodes.Substring(2, 2);
            fillingCommand.W_QRcode3 = BarCodes.Substring(4, 2);
            fillingCommand.W_QRcode4 = BarCodes.Substring(6, 2);
            fillingCommand.W_QRcode5 = BarCodes.Substring(8, 2);
            fillingCommand.W_QRcode6 = BarCodes.Substring(10, 2);
            fillingCommand.W_QRcode7 = BarCodes.Substring(12, 2);
            fillingCommand.W_QRcode8 = BarCodes.Substring(14, 2);
            fillingCommand.W_QRcode9 = BarCodes.Substring(16, 2);
            fillingCommand.W_QRcode10 = BarCodes.Substring(18, 2);
            fillingCommand.W_QRcode11 = BarCodes.Substring(20, 2);
            fillingCommand.W_QRcode12 = BarCodes.Substring(22, 2);
            fillingCommand.W_QRcode13 = BarCodes.Substring(24, 2);
            fillingCommand.W_QRcode14 = BarCodes.Substring(26, 2);
            fillingCommand.W_QRcode15 = BarCodes.Substring(28, 2);
            fillingCommand.W_Refresh = "1";
            return fillingCommand;
        }
    }
}