kazelee
2025-05-22 bb09e7affb602791af4064cda8cddcfae8b3f3aa
core/WCSCore.cs
@@ -74,6 +74,7 @@
                    if (TN_Task.S_TYPE == TaskName.产品入库 || TN_Task.S_TYPE == TaskName.产品部分回库) {
                        var captureTask = Task.Run(() => {
                            CapturePic(TN_Task);
                            LogHelper.Info("拍照Task结束");
                        });
                    }
@@ -81,6 +82,14 @@
                        var setEndLocTask = Task.Run(() => {
                            // 只要任务为产品入库(PDA),就需要重新指定终点(默认endLoc为"")
                            SetEndLoc(TN_Task);
                            LogHelper.Info("设置终点Task结束");
                        });
                    }
                    if (TN_Task.S_TYPE == TaskName.产品部分回库) {
                        var weightTask = Task.Run(() => {
                            UpdateWeight(TN_Task);
                            LogHelper.Info("称重Task结束");
                        });
                    }
@@ -111,13 +120,14 @@
        public static void CapturePic(TN_Task model) {
            var db = new SqlHelper<object>().GetInstance();
            try {
            var filepath = SnapManager.GetCapturePicturePath();
            if (string.IsNullOrEmpty(filepath)) {
                LogHelper.Info("图片地址为空");
                return;
            }
            if (db.Updateable<TN_CG_Detail>()
                if (db.Updateable<TN_Loc_Container>()
                .SetColumns(d => d.S_IMG_URL == filepath)
                .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) {
@@ -125,9 +135,15 @@
                return;
            }
        }
            catch (Exception ex) {
                LogHelper.Info($"发生了错误:{ex.Message}");
            }
        }
        public static void SetEndLoc(TN_Task tn_task) {
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            try {
            var endLoc = db.Queryable<TN_Location>()
                .First(a => a.S_CODE == tn_task.S_END_LOC);
@@ -193,7 +209,7 @@
            // 如果没有符合条件的货位,置空,等待PDA重新确定
            if (endLoc == null) {
                tn_task.S_END_AREA = "HJQ";
                    tn_task.S_END_AREA = Settings.Areas[1][0]; // HJQ
                tn_task.S_END_LOC = "0";
                // 不需要再给GZ AGV传空值,一开始就没给具体货位,只给了Area
@@ -218,16 +234,68 @@
                // 找到合适的货位,推送
                tn_task.S_END_LOC = endLoc.S_CODE;
                    LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁
                    using (var tran = db.Ado.UseTran()) {
                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
                        .ExecuteCommand() > 0) {
                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                    LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改成功,终点货架为 {endLoc.N_ROW},修改终点位置为 {endLoc.S_CODE}");
                            .ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info($"计算货位成功,任务'{tn_task.S_CODE}'修改失败,终点货架为{endLoc.N_ROW},修改终点位置为 {endLoc.S_CODE}");
                }
                else {
                    LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改失败,终点货架为 {endLoc.N_ROW},修改终点位置为 {endLoc.S_CODE}");
                        if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
                            it.T_MODIFY
                        }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            info = $"更新终点货位锁状态失败:起点货位{endLoc.S_CODE}";
                            LogHelper.Info(info);
                        }
                        tran.CommitTran();
                }
            }
        }
            catch (Exception ex) {
                LogHelper.Info($"发生了错误:{ex.Message}");
            }
        }
        public static void UpdateWeight(TN_Task tn_task) {
            var db = new SqlHelper<object>().GetInstance();
            try {
                var cgDetail = db.Queryable<TN_CG_Detail>()
                    .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First();
                if (cgDetail == null) {
                    LogHelper.Info("更新物料重量失败:当前任务的托盘号在物料表中不存在");
                    return;
                }
                var data = GZRobot.CustomBuf();
                if (data.Count == 0) {
                    LogHelper.Info("更新物料重量失败:没有接受到来自国自AGV的重量信息");
                    return;
                }
                var weight = float.Parse(data[0].parameter_varchar200_up);
                cgDetail.F_QTY = weight;
                if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) {
                    LogHelper.Info("修改物料表重量失败");
                    return;
                }
            }
            catch (Exception ex) {
                LogHelper.Info($"发生了错误:{ex.Message}");
            }
        }
        /// <summary>
        /// 任务分发,根据调度类型发给不同的调度系统