杨前锦
2025-06-13 b7308bba3d7ffad271ce7fc7a93c8c45d76be87d
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs
@@ -54,7 +54,7 @@
                                    case 3:
                                        WCSHelper.UpdateStatus(cst, "开始取货");
                                        var locCntrRels = LocationHelper.GetLocCntr(cst.S_START_LOC);
                                        if (locCntrRels.Count > 0)
                                        if (locCntrRels.Count > 0)
                                        {
                                            cst.S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE;
                                            WCSHelper.UpdateWcsTask(cst);
@@ -90,9 +90,9 @@
                                WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, cst.S_START_LOC, null);
                                // 查询扫描的RFID
                                // 发送 00 04 71 02到扫码器 ,接受返回数据并解析
                                byte[] bytes = new byte[] { 00, 04, 71, 02 };
                                var plc = Settings.carDeviceInfos.Where(a => a.deviceNo == model.ForkliftNo && a.enable == 1).FirstOrDefault();
                                TcpServer.TcpServerSend(plc.address, bytes);
                                /*    byte[] bytes = new byte[] { 00, 04, 71, 02 };
                                    var plc = Settings.carDeviceInfos.Where(a => a.deviceNo == model.ForkliftNo && a.enable == 1).FirstOrDefault();
                                    TcpServer.TcpServerSend(plc.address, bytes);*/
                            }
                            else if (model.State == 1002)
                            {
@@ -113,7 +113,7 @@
                                        agvEndLoc = ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "2");
                                    }
                                    ChangeParamModel paramModel = new ChangeParamModel()
                                    ChangeParamModel paramModel = new ChangeParamModel()
                                    {
                                        task_no = model.No,
                                        param_no = 0,
@@ -124,7 +124,7 @@
                                }
                                else
                                {
                                    WMSHelper.addAlarmRecord("流程异常", "中", $"AGV任务回报,任务容器编码:{cst.S_CNTR_CODE}的容器没有录入到WMS系统","AGV");
                                    WMSHelper.addAlarmRecord("流程异常", "中", $"AGV任务回报,任务容器编码:{cst.S_CNTR_CODE}的容器没有录入到WMS系统", "AGV");
                                }
                            }
                            else
@@ -136,39 +136,9 @@
                            // AGV任务完成
                            if (model.State == 2)
                            {
                                // 检测物料是否合格,如不合格,
                                // 判断物料是否是环带库物料,是则回环带库,并让环带下发新的物料
                                // 非环带库物料,则退出立库,同时下发新的物料出库任务
                                if (cst.S_TYPE.Contains("叫料出库任务"))
                                {
                                    var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
                                    if (cntrItemRels != null && cntrItemRels.Count > 0)
                                    {
                                        if (cntrItemRels[0].S_ITEM_STATE == "2")
                                        {
                                            // 不合格品回库
                                            ApiHelper.rejectReturnStock(mst, cst);
                                        }
                                    }
                                }
                                // 检测是否是读码位,非读码位,可以激活预创建任务
                                var transfe = WMSHelper.GetTransfeRelevance(cst.S_END_LOC);  // 接驳位属性
                                if (transfe != null && transfe.N_READ_LOC == 1)
                                {
                                    WCSHelper.ActivatePreCreateTask(mst.S_CODE);
                                }
                                else if ( transfe.N_READ_LOC == 0)
                                {
                                    if (cst.S_TYPE.Contains("【异常】"))
                                    {
                                        WCSHelper.ActivatePreCreateTask(mst.S_CODE,1);
                                    }
                                    else
                                    {
                                        WCSHelper.ActivatePreCreateTask(mst.S_CODE);
                                    }
                                }
                                // 激活预创建任务
                                // 场景:1.读码位激活预创建任务 2.空工装出库激活满料下线任务(非直连)
                                WCSHelper.ActivatePreCreateTask(mst.S_CODE);
                                // 查询是否有未完成的任务
                                if (WMSHelper.isFinishTask(mst.S_CODE))
@@ -180,16 +150,42 @@
                                    // 更新任务中间表状态
                                    WMSHelper.updateMesTaskStatus(mst.S_CODE, "3");
                                }
                                    // 如果作业名称为成型机叫料出库任务,则触发余料/空托搬运任务
                                    string locCode = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC);
                                    ApiHelper.returnMaterialOrEmptyTray(locCode);
                                }
                                // 检测物料是否合格,如不合格,
                                // 判断物料是否是环带库物料,是则回环带库,并让环带下发新的物料
                                // 非环带库物料,则退出立库,同时下发新的物料出库任务
                                if (cst.S_TYPE.Contains("叫料出库任务"))
                                {
                                    var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
                                    if (bo)
                                    {
                                        var mesTask = WMSHelper.GetLjMesTaskById(mesId);
                                        var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
                                        if (cntrItemRels != null && cntrItemRels.Count > 0)
                                        {
                                            if (cntrItemRels[0].S_ITEM_STATE == "2")
                                            {
                                                mesTask.AWAIT_MSG = "物料检验状态为不合格,重新叫料中";
                                                WMSHelper.updateLjMesTask(mesTask);
                                                // 不合格品回库
                                                ApiHelper.rejectReturnStock(mst, cst);
                                            }
                                            else
                                            {
                                                // 如果作业名称为成型机叫料出库任务,则触发余料/空托搬运任务
                                                var sideLocConfig = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC);
                                                ApiHelper.returnMaterialOrEmptyTray(sideLocConfig.S_RETURN_LOC_CODE, sideLocConfig.EQP);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            WMSHelper.addAlarmRecord("系统错误", "高", $"AGV任务状态回报,作业号:{cst.S_OP_CODE},未查询到作业","AGV");
                            WMSHelper.addAlarmRecord("系统错误", "高", $"AGV任务状态回报,作业号:{cst.S_OP_CODE},未查询到作业", "AGV");
                        }
                    }
                    else