1
czw
2025-06-30 f7781420ef5b7406be4945562c6483b7e0d35893
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/ViewModel.cs
@@ -128,267 +128,8 @@
            HaiKangOrderInfo model = (HaiKangOrderInfo)param1;
            if (string.IsNullOrEmpty(model.taskCode))
                return;
            // æŸ¥è¯¢ä»»åŠ¡ï¼šæ ¹æ®ä»»åŠ¡å·
            //var wcsTask = WCSHelper.GetTask(model.taskCode);
            ITaskRepository MainMissionService = new TaskRepository();
            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);
            if (wcsTask != null)
            {
                if (!string.IsNullOrWhiteSpace(model.method))
                {
                    ILocRepository locrep = new LocRepository();
                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);
                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);
                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();
                    bool bobe = false;
                    //model.method = model.method?.ToLower();
                    switch (model.method)
                    {
                        case "start":
                            LogHelper.Info($"海康车任务状态变更为执行,任务号为:{model.taskCode}", "agv杭叉交互日志");
                            if (wcsTask.S_B_STATE.Trim() == "已推送")
                            {
                                wcsTask.S_B_STATE = "执行中";
                                wcsTask.T_START_TIME = DateTime.Now;
                                MainMissionService.Update(wcsTask);
                                bobe = true;
                            }
                            break;
                        case "outBin":
                        case "outbin":
                            model.method = model.method?.ToLower();
                            LogHelper.Info($"海康车任务状态变更为取货完成,任务号为:{model.taskCode}", "agv杭叉交互日志");
                            wcsTask.S_B_STATE = "取货完成";
                            startloc.N_CURRENT_NUM = 0;
                            startloc.S_LOCK_STATE = "无";
                            startloc.T_MODIFY = DateTime.Now;
                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();
                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);
                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);
                            MainMissionService.Update(wcsTask);
                            locrep.Update(startloc);
                            bobe = true;
                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));
                            if (device != null)
                            {
                                if (device.deviceType == 1)
                                {
                                    if (device.deviceName.Contains("维希尔抓臂"))
                                    {  //卸货进行清空,触发扫码
                                        var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;
                                        string V = inde ? "R05" : "R06";
                                        Conn.默认Redis.SetValue(device.deviceName + "." + V, "true", device.deviceName + "Queue", false);
                                        TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);
                                    }
                                }
                                else if (device.deviceType == 2)
                                {
                                    //Task.Run(() =>
                                    //{
                                    //    var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;
                                    //    string V = inde ? "D1224" : "D1225";
                                    //    Conn.默认Redis.SetValue(device.deviceName + "." + V, "0", device.deviceName + "Queue");
                                    //});
                                }
                            }
                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);
                            break;
                        case "end":
                            LogHelper.Info($"海康车任务状态变更为完成,任务号为:{model.taskCode}", "agv杭叉交互日志");
                            wcsTask.S_B_STATE = "完成";
                            wcsTask.T_END_TIME = DateTime.Now;
                            bobe = true;
                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();
                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();
                            //foreach (var c in cntrs)
                            //{
                            //    var action = new LocContainerEntity()
                            //    {
                            //        S_ID = Guid.NewGuid().ToString(),
                            //        S_STATE = "编辑",
                            //        T_CREATE = DateTime.Now,
                            //        T_MODIFY = DateTime.Now,
                            //        S_LOC_CODE = endLoc.S_LOC_CODE,
                            //        S_CNTR_CODE = c,
                            //        S_TYPE = "",
                            //    };
                            //    llls.Add(action);
                            //}
                            endLoc.S_LOCK_STATE = "无";
                            endLoc.N_CURRENT_NUM = 1;
                            endLoc.T_MODIFY = DateTime.Now;
                            MainMissionService.Update(wcsTask);
                            if (Settings.deviceInfos.Find(x => x.deviceType == 2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC))) != null)
                                locrep.Update(endLoc);
                            //locContainerRepository2.Insert(llls);
                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));
                            if (device2 != null)
                            {
                                if (device2.deviceType == 1)
                                {
                                    if (device2.deviceName.Contains("维希尔抓臂"))
                                    {
                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? "R10" : "R11";
                                        //Conn.默认Redis.SetValue(device2.deviceName + "." + V, "true", device2.deviceName + "Queue");
                                        //卸货再写托盘取走。 ç„¶åŽè§¦å‘扫码进行校验。
                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;
                                        //string V = inde ? "R05" : "R06";
                                        //Conn.默认Redis.SetValue(device2.deviceName + "." + V, "true", device2.deviceName + "Queue");
                                        string V2 = inde ? "R10_LAST" : "R11_LAST";
                                        //Conn.默认Redis.SetValue(device2.deviceName + "." + V2, "true", device2.deviceName + "Queue");
                                        GZ.Modular.Redis.RedisHelper.Add(device2.deviceName + "." + V2, "true", out string msg1);
                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);
                                    }
                                }
                                else if (device2.deviceType == 2)
                                {
                                    if (device2.deviceName.Contains("Js捷顺"))
                                    {
                                        Task.Run(() =>
                                        {
                                            var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;
                                            string V = inde ? "D1224" : "D1225";
                                            Conn.默认Redis.SetValue(device2.deviceName + "." + V, "1", device2.deviceName + "Queue");
                                        });
                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                                        {
                                            sceneType = 3,
                                            cntrCode = cntrs.FirstOrDefault()
                                        }));
                                        //if (device2.deviceName.Contains("1"))
                                        //{
                                        //    if (inde) tag.Js1.D1224 = 1;
                                        //    else tag.Js1.D1225 = 1;
                                        //}else
                                        //{
                                        //    if (inde) tag.Js2.D1224 = 1;
                                        //    else tag.Js2.D1225 = 1;
                                        //}
                                    }
                                    var ssloc = device2.deviceNo[1];
                                    var endloc = locrep.FindEntity(x => x.S_LOC_CODE == ssloc);
                                    LogHelper.Info($"捷顺卸货后, æŸ¥çœ‹ç¼“存位 {ssloc}-{endloc?.N_CURRENT_NUM}>0? åˆ™ç”³è¯·mes搬走。");
                                    if (endloc != null && endloc.N_CURRENT_NUM == 1)
                                    {
                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                                        {
                                            requestType = 3,
                                            startBit = ssloc
                                        }));
                                        LogHelper.Info($"{ssloc}申请mes任务结果{str}");
                                    }
                                }
                            }
                            //LocationMethod.JudgeLocation(wcsTask);
                            break;
                        case "cancel":
                            LogHelper.Info($"海康车任务状态变更为取消,任务号为:{model.taskCode}", "agv杭叉交互日志");
                            wcsTask.S_B_STATE = "取消";
                            //startloc.S_LOCK_STATE = "无";
                            //endLoc.S_LOCK_STATE = "无";
                            MainMissionService.Update(wcsTask);
                            TaskActRepository taskActRepository = new TaskActRepository();
                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);
                            if (tare.Any())
                            {
                                if (tare.Find(x => x.S_ACTION_CODE == "outbin") == null)
                                {
                                    startloc.S_LOCK_STATE = "无";
                                    endLoc.S_LOCK_STATE = "无";
                                    locrep.Update(startloc);
                                    locrep.Update(endLoc);
                                }
                                else if (tare.Find(x => x.S_ACTION_CODE == "end") == null)
                                {
                                    endLoc.S_LOCK_STATE = "无";
                                    locrep.Update(endLoc);
                                }
                            }
                            //locrep.Update(startloc);
                            //locrep.Update(endLoc);
                            //TaskProcess.OperateStatus(wcsTask, 7);
                            //WCSHelper.Fail(wcsTask);
                            break;
                        case "apply":
                            // åˆ¤æ–­è¯¥ä»»åŠ¡çš„æŽ¥é©³ä½æ˜¯å¦æœ‰å…¶ä»–å…¥åº“æˆ–å‡ºåº“ä»»åŠ¡ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™åœ¨ç­‰ä½ç­‰å¾…ï¼Œå¦‚æžœæ²¡æœ‰ï¼Œåˆ™å…¥
                            TaskisOk(wcsTask);
                            break;
                    }
                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))
                    {
                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);
                        if (mestask != null && bobe)
                        {
                            if (model.method != "end")
                            {
                                if (mestask.S_START_LOC == wcsTask.S_START_LOC && mestask.S_B_STATE == "MES")
                                    Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new
                                    {
                                        reqCode = wcsTask.S_SRC_NO,
                                        model.method
                                    }));
                            }
                            else
                            {
                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)
                                {
                                    LogHelper.Info($"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå®Œæˆï¼Œé‡ç½®è¿›è¡ŒäºŒé˜¶æ®µã€‚");
                                    mestask.N_PRIORITY = -88;
                                    MainMissionService.Update(mestask);
                                }
                                else if (mestask.S_B_STATE == "MES")
                                {
                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new
                                    {
                                        reqCode = wcsTask.S_SRC_NO,
                                        model.method
                                    }));
                                }
                            }
                        }
                        else if (mestask != null && model.method == "cancel")
                        {
                            if (mestask.S_B_STATE == "MES")
                                Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new
                                {
                                    reqCode = wcsTask.S_SRC_NO,
                                    model.method
                                }));
                            LogHelper.Info($"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå–消,重置点,线程处理。");
                            mestask.N_PRIORITY = -1;
                            mestask.S_B_STATE = "MES_取消";
                            MainMissionService.Update(mestask);
                        }
                    }
                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data, wcsTask.S_START_LOC, wcsTask.S_END_LOC);
                    //调用第三方接口(如果有)TaskProcess.ReportStatus
                }
                else
                {
                    // æš‚时设定为0
                    wcsTask.S_B_STATE = "上报状态空";
                    //安全请求等
                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);
                }
            }
            else
            {
                LogHelper.Info($"当前任务号任务不存在{model.taskCode} agv杭叉交互日志");
            }
            var hkr = AutoThread.InvokeMethod(AutoThread.Instance, "OperateHKTaskStatus", new object[] { model });
            //return JsonConvert.SerializeObject(hkr);
            #endregion [自定义指令][20250324165239206][OperateHKTaskStatus]
        }
        public GZ.DB.Entity.OIDATABASE.TaskEntity Begin(GZ.DB.Entity.OIDATABASE.TaskEntity task)