schangxiang@126.com
2024-12-02 7e469b73ac4f022cb78689c6d2b0c4ddee26d18c
CC/iWareCC_ASRS/ThreadService/04_BZ21£¨°áÔËÕû¶â»úÆ÷ÈË£©/DataProcess_BZ21.cs
@@ -1,7 +1,15 @@
using iWareCommon.Utils;
using Admin.NET.Application;
using iWareCC.Common.Helper;
using iWareCC.StationService;
using iWareCommon.Common.Globle;
using iWareCommon.Utils;
using iWareModel;
using iWareSql.DataAccess;
using iWareSql.WmsDBModel;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
@@ -11,6 +19,255 @@
{
    public class DataProcess_BZ21
    {
        public static void Hander()
        {
            var alertMsg = "";
            LogType logType = LogType.DataProcess_BZ21;
            while (true)
            {
                Thread.Sleep(2000);//休眠2秒,将休眠写到前面,是为了下面的continue方法执行后不显示错误信息的提示!!!【EditBy shaocx,2022-05-24】
                SystemWarningMsg._lbl_alert_DataProcess_BZ21 = string.Empty;
                try
                {
                    if (SystemValue.isStartedModel)
                    {
                        var rgvLocation = StationLocationEnum.BZ21.ToString();
                        /*
                         * 1、从数据库中判断是否齐套
                         * 2、根据齐套结果,推送给PLC
                         */
                        var obj = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation.ToString()).FirstOrDefault();
                        if (obj.R_PalletizingAck)
                        {
                            //给PLC推送任务完接收完成复位信号
                            using (StationServiceClient client = new StationServiceClient())
                            {
                                var res = client.WriteStation_ACK((int)EDevice.Station, false, rgvLocation);
                                if (!res.result)
                                {
                                    SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}-下发码板任务 å¤±è´¥,SetPalletizingTaskFinishAck è¿”回:{res.resMsg}";
                                    continue;
                                }
                                else
                                {
                                    Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发入库任务 æˆåŠŸ,SetPalletizingTaskFinishAck,参数: ç«™ç‚¹{rgvLocation}");
                                }
                            }
                        }
                        if (obj.R_ReqParseData)
                        {
                            var result = obj.R_ReadCodeResult;
                            if (string.IsNullOrEmpty(result))
                            {
                                SystemWarningMsg._lbl_alert_DataProcess_BZ21 = $"{rgvLocation.ToString()}-请求了解码,但是结果是空的,此次循环结束";
                                continue;
                            }
                            short cartonwidth = 0;//纸箱宽
                            short cartonhigh = 0;//纸箱高
                            string place = "22";
                            using (WmsDBModel wmsDB = new WmsDBModel())
                            {
                                //要是有已下发的任务,就不要执行
                                var isValidate = TaskHandler.ValidateIssueTaskForBZ21(wmsDB, result);
                                if (!isValidate)
                                {
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ21 = $"{rgvLocation.ToString()}-有‘已下发’的任务,不能处理,此次循环结束";
                                    continue;
                                }
                                var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == result).FirstOrDefault();
                                if (upiObj == null)
                                {
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ21 = $"{rgvLocation.ToString()},根据UPI:{result}没有找到对象 ";
                                    continue;
                                }
                                //string upi = "LS070700101B0001GS";
                                //调用出纸机接口
                                var res = new HTTPService("http://172.17.1.22:44374/api/LuLi/").getContent<Respone>("cartons-machine?PackageCode=" + upiObj.PackageCode, Guid.NewGuid(), 10000);
                                if (res.iState == 0)
                                {
                                    /*
                                    var papertable = wmsDB.mes_push_papercut.Where(x => x.PackageCode == upiObj.PackageCode).OrderByDescending(x => x.Id).FirstOrDefault();
                                    if (papertable != null)
                                    {
                                        papertable.PushStatus = (int)PushStatusEnum.PushSuccess;
                                        papertable.ApiMessage = res.message;
                                        papertable.PushNum++;
                                    }
                                    else
                                    {
                                        var papercut = ClassHelper.RotationMapping<mes_push_papercut, mes_batchOrderUPI_new>(upiObj);
                                        papercut.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                        papercut.ApiMessage = res.message;
                                        papercut.PushNum = 1;
                                        papercut.PushStatus = (int)PushStatusEnum.PushSuccess;
                                        wmsDB.mes_push_papercut.Add(papercut);
                                    }
                                    //*/
                                    var papercut = ClassHelper.RotationMapping<mes_push_papercut, mes_batchOrderUPI_new>(upiObj);
                                    papercut.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                    papercut.ApiMessage = res.message;
                                    papercut.PushNum = 1;
                                    papercut.PushStatus = (int)PushStatusEnum.PushSuccess;
                                    wmsDB.mes_push_papercut.Add(papercut);
                                }
                                else
                                {
                                    /*
                                    var papertable = wmsDB.mes_push_papercut.Where(x => x.PackageCode == upiObj.PackageCode).OrderByDescending(x => x.Id).FirstOrDefault();
                                    if (papertable != null)
                                    {
                                        papertable.PushStatus = (int)PushStatusEnum.PushFail;
                                        papertable.ApiMessage = res.message;
                                        papertable.PushNum++;
                                    }
                                    else
                                    {
                                        var papercut = ClassHelper.RotationMapping<mes_push_papercut, mes_batchOrderUPI_new>(upiObj);
                                        papercut.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                        papercut.ApiMessage = res.message;
                                        papercut.PushNum = 1;
                                        papercut.PushStatus = (int)PushStatusEnum.PushFail;
                                        wmsDB.mes_push_papercut.Add(papercut);
                                    }
                                    //*/
                                    var papercut = ClassHelper.RotationMapping<mes_push_papercut, mes_batchOrderUPI_new>(upiObj);
                                    papercut.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                    papercut.ApiMessage = res.message;
                                    papercut.PushNum = 1;
                                    papercut.PushStatus = (int)PushStatusEnum.PushFail;
                                    wmsDB.mes_push_papercut.Add(papercut);
                                    continue;
                                }
                                //更新表
                                var mesgather = wmsDB.mes_package_gather.Where(x => x.PackageCode == upiObj.PackageCode).FirstOrDefault();
                                if (mesgather != null)
                                {
                                    mesgather.AreaCode = (int)AreaCodeEnum.合包裁切区;
                                    mesgather.UpiStatus = (int)UpiStatusEnum.已合包;
                                }
                                var upilist = wmsDB.mes_batchOrderUPI_new.Where(x => x.PackageCode == upiObj.PackageCode).ToList();
                                var upilength = upilist.Max(x => x.Length);
                                var upiwidth = upilist.Max(x => x.Width);
                                cartonhigh = (short)upiObj.Info3;
                                cartonwidth = (short)upiObj.Info2;
                                upiObj.UpiStatus = (int)UpiStatusEnum.已合包;
                                upiObj.AreaCode = (int)AreaCodeEnum.合包裁切区;
                                //记录任务
                                var _id = Yitter.IdGenerator.YitIdHelper.NextId();
                                var putpakegecodeid = Yitter.IdGenerator.YitIdHelper.NextId();
                                var plcTaskNo = BusinessHelper.CreatePlcTaskIdForSrmTask();
                                //新增表
                                var mesinequeue = ClassHelper.RotationMapping<mes_package_linequeue, mes_batchOrderUPI_new>(upiObj);
                                mesinequeue.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                //新增mes推送表
                                var putpakegecode = new mes_push_packagecode()
                                {
                                    Id = putpakegecodeid,
                                    PackageCode = upiObj.PackageCode,
                                    PushStatus = 0,
                                    PushNum = 0,
                                    ApiMessage = "待推送",
                                    CreateTime = DateTime.Now,
                                    CreateUserName = "CC",
                                    UpdateTime = DateTime.Now,
                                    UpdateUserName = "CC",
                                    CreateOrgName = "11"
                                };
                                //新增任务表
                                var task = new wms_rbline_task()
                                {
                                    Id = _id,
                                    TaskNo = plcTaskNo,
                                    UPI = upiObj.UPI,
                                    Length = upiObj.Length,
                                    Width = upiObj.Width,
                                    Thk = upiObj.Thk,
                                    IssueTime = DateTime.Now,
                                    PlanNo = upiObj.PlanNo,
                                    OrderId = upiObj.OrderId,
                                    PackageCode = upiObj.PackageCode,
                                    RbTaskType = (int)RbTaskTypeEnum.夹板任务,
                                    RbTaskTypeEnumName = RbTaskTypeEnum.夹板任务.ToString(),
                                    TaskStatus = (int)TaskStatusEnum.已下发,
                                    TaskStatusName = TaskStatusEnum.已下发.ToString(),
                                    TaskMsg = "夹板",
                                    CreateTime = DateTime.Now,
                                    CreateUserName = "CC",
                                    UpdateTime = DateTime.Now,
                                    UpdateUserName = "CC",
                                    PlaceCode = place
                                };
                                //新增打印表
                                var printid = Yitter.IdGenerator.YitIdHelper.NextId();
                                var print = ClassHelper.RotationMapping<wms_record_print, mes_batchOrderUPI_new>(upiObj);
                                print.Id = printid;
                                print.PrintType = (int)PrintTypeEnum.包装条码;
                                print.PrintSource = (int)PrintSourceEnum.包装条码打印;
                                print.PrintSheetNum = 1;
                                print.PrintNum = 0;
                                print.PrintStatus = (int)PrintStatuEnum.未打印;
                                print.IsAllowPrint = true;
                                print.CreateTime = print.UpdateTime = DateTime.Now;
                                wmsDB.wms_record_print.Add(print);
                                var printtwo = ClassHelper.RotationMapping<wms_record_print, mes_batchOrderUPI_new>(upiObj);
                                printtwo.PrintType = (int)PrintTypeEnum.包装条码;
                                printtwo.PrintSource = (int)PrintSourceEnum.包装条码打印;
                                printtwo.PrintSheetNum = 1;
                                printtwo.PrintNum = 0;
                                printtwo.PrintStatus = (int)PrintStatuEnum.未打印;
                                printtwo.IsAllowPrint = true;
                                printtwo.CreateTime = print.UpdateTime = DateTime.Now;
                                printtwo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wmsDB.wms_record_print.Add(printtwo);
                                wmsDB.mes_package_linequeue.Add(mesinequeue);
                                wmsDB.wms_rbline_task.Add(task);
                                wmsDB.mes_push_packagecode.Add(putpakegecode);
                                //处理表  mes_order_gather
                                var errmsg = "";
                                var package = wmsDB.mes_package_gather.Where(x => x.PackageCode == upiObj.PackageCode).FirstOrDefault();
                                var resultAlert = MyExtendHelper.HandlerOrderGather(wmsDB, package, "", "", out errmsg);
                                if (resultAlert == false)
                                {
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ21 = errmsg;
                                    continue;
                                }
                                using (StationServiceClient client = new StationServiceClient())
                                {
                                    var plcres = client.WriteSurroundTaskInfo((int)EDevice.Station, rgvLocation, short.Parse(task.TaskNo),
                                          (short)upilength, (short)upiwidth, cartonhigh, cartonwidth, 0, 0);
                                    if (!plcres.result)
                                    {
                                        SystemWarningMsg._lbl_alert_DataProcess_BZ12 = $"{rgvLocation.ToString()}-下发入库任务 å¤±è´¥,WriteInStoreTaskInfoAsync è¿”回:{plcres.resMsg}";
                                        continue;
                                    }
                                    else
                                    {
                                        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发入库任务 æˆåŠŸ,WriteInStoreTaskInfoAsync,参数: ç«™ç‚¹{rgvLocation}");
                                    }
                                }
                                wmsDB.SaveChanges();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    SystemWarningMsg._lbl_alert_DataProcess_BZ21 += " å‡ºçް异叏:" + ex.Message + SysGloble.SPLIT_STR;
                    Log4NetHelper.WriteErrorLog(logType, " å‡ºçŽ°å¼‚å¸¸ï¼š" + ex.Message, ex);
                }
            }
        }
        /// <summary>
        /// å‘mes推送包装完成
        /// </summary>
        public static void PushPackageCode()
        {
            while (true)
@@ -18,13 +275,28 @@
                Thread.Sleep(2000);
                using (WmsDBModel edm = new WmsDBModel())
                {
                    var value = edm.mes_PushPackageCode.Where(x => x.PushStatus == 0 || x.PushStatus == 1).FirstOrDefault();
                    var value = edm.mes_push_packagecode.Where(x => x.PushStatus == 0 || x.PushStatus == 1).FirstOrDefault();
                    if (value != null)
                    {
                        PushPackageCodeInput input = new PushPackageCodeInput();
                        input.PackageCode = value.PackageCode;
                        var res = HttpHelper.GetHttpResponse<PushPackageCodeInput, Respone>(" ", input, 10000);
                        if (res.iState == 0)
                        {
                            value.PushStatus = (int)PushStatusEnum.PushSuccess;
                            value.ApiMessage = res.message;
                        }
                        else
                        {
                            value.PushStatus = (int)PushStatusEnum.Pushing;
                            value.PushNum++;
                            value.ApiMessage += res.message;
                            if (value.PushNum == 3)
                            {
                                value.PushStatus = (int)PushStatusEnum.PushFail;
                            }
                        }
                        edm.SaveChanges();
                    }
                }
            }
@@ -38,7 +310,7 @@
            /// <summary>
            /// è¿”回码
            /// </summary>
            public string code { get; set; }
            public int iState { get; set; }
            /// <summary>
            /// è¿”回消息
@@ -46,14 +318,38 @@
            public string message { get; set; }
            /// <summary>
            /// è¯·æ±‚编号
            /// </summary>
            public string reqCode { get; set; }
            /// <summary>
            /// è‡ªå®šä¹‰è¿”回(返回任务单号)
            /// è‡ªå®šä¹‰è¿”回
            /// </summary>
            public string data { get; set; }
        }
        /// <summary>
        /// æŽ¨é€çŠ¶æ€
        /// </summary>
        public enum PushStatusEnum
        {
            /// <summary>
            /// æœªæŽ¨é€
            /// </summary>
            [Description("未推送")]
            NotPush = 0,
            /// <summary>
            /// æŽ¨é€ä¸­
            /// </summary>
            [Description("推送中")]
            Pushing = 1,
            /// <summary>
            /// æŽ¨é€æˆåŠŸ
            /// </summary>
            [Description("推送成功")]
            PushSuccess = 2,
            /// <summary>
            /// æŽ¨é€å¤±è´¥
            /// </summary>
            [Description("推送失败")]
            PushFail = 3,
        }
    }
}