kazelee
2025-05-19 452b9b63ada7ef220952412613552d36ed477adc
Services/AgvService.cs
@@ -143,72 +143,88 @@
            var endLoc = new TN_Location();
            var data = GZRobot.CustomBuf();
            var weight = float.Parse(data[0].parameter_varchar200_up);
            tn_task.F_WEIGHT = weight;
            // 只当之前指定终点货架后,才尝试计算终点货位,否则交给人工决定
            if (tn_task.S_END_AREA != "") {
                if (weight > 1500) {
                    // 重量超过1.5t,需要选择1-3层货架
                    endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_HEIGHT <= 3);
                }
                else if (weight > 0) {
                    // 重量未超过1.5t,在指定货架随便选择1个
                    endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
                }
                else {
                    // 没有接收到重量,或重量出错
                    endLoc = null;
                    LogHelper.Info($"错误的重量信息:{weight}");
            if (data.Count == 0) {
                LogHelper.Info("设置终点货位失败:没有接受到来自国自AGV的重量信息");
                //return;
            }
            else {
                var weight = float.Parse(data[0].parameter_varchar200_up);
                tn_task.F_WEIGHT = weight;
                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) {
                    LogHelper.Info("修改Task重量失败");
                    return;
                }
            }
                // 如果没有符合条件的货位,置空,等待PDA重新确定
                if (endLoc == null) {
                    tn_task.S_END_AREA = "";
                    tn_task.S_END_LOC = "";
            // 终点货架为空时,不判断,交给人工处理
            if (tn_task.S_END_AREA == "") {
                LogHelper.Info("终点货架为空,不处理");
            }
                    // 不需要再给GZ AGV传空值,一开始就没给具体货位,只给了Area
            // 只当之前指定终点货架后,才尝试计算终点货位
            if (tn_task.F_WEIGHT > 1500) {
                // 重量超过1.5t,需要选择1-3层货架
                endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_LAYER <= 3);
            }
            else if (tn_task.F_WEIGHT > 0) {
                // 重量未超过1.5t,在指定货架随便选择1个
                endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
            }
            else {
                // 没有接收到重量,或重量出错
                endLoc = null;
                LogHelper.Info($"错误的重量信息:{tn_task.F_WEIGHT}");
                return;
            }
                    //var request = new UpdateInteractInfo {
                    //    interaction_info_id = 3, // 更改终点信息
                    //    info_status = "active",
                    //    return_value = "",
                    //};
            // 如果没有符合条件的货位,置空,等待PDA重新确定
            if (endLoc == null) {
                tn_task.S_END_AREA = "";
                tn_task.S_END_LOC = "";
                    //GZRobot.UpdateInteractInfo(request);
                // 不需要再给GZ AGV传空值,一开始就没给具体货位,只给了Area
                    using (var trans = db.Ado.UseTran()) {
                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                            .ExecuteCommand() > 0) {
                            //LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                //var request = new UpdateInteractInfo {
                //    interaction_info_id = 3, // 更改终点信息
                //    info_status = "active",
                //    return_value = "",
                //};
                            trans.CommitTran();
                            LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改成功,修改终点货架和货位为空");
                        }
                        else {
                            trans.RollbackTran();
                            LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改失败,修改终点货架和货位为空");
                        }
                //GZRobot.UpdateInteractInfo(request);
                using (var trans = db.Ado.UseTran()) {
                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                        .ExecuteCommand() > 0) {
                        //LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                        trans.CommitTran();
                        LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改成功,修改终点货架和货位为空");
                    }
                    else {
                        trans.RollbackTran();
                        LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改失败,修改终点货架和货位为空");
                    }
                }
                else {
                    // 找到合适的货位,推送
                    tn_task.S_END_LOC = endLoc.S_CODE;
            }
            else {
                // 找到合适的货位,推送
                tn_task.S_END_LOC = endLoc.S_CODE;
                    using (var trans = db.Ado.UseTran()) {
                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                            .ExecuteCommand() > 0) {
                            LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                using (var trans = db.Ado.UseTran()) {
                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                        .ExecuteCommand() > 0) {
                        LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                            trans.CommitTran();
                            LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改成功,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                        }
                        else {
                            trans.RollbackTran();
                        trans.CommitTran();
                        LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改成功,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                    }
                    else {
                        trans.RollbackTran();
                            LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改失败,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                        }
                        LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改失败,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                    }
                }
            }