kazelee
2 天以前 74ca5a83f24c53c48ad7e6f5b7739649fb411546
core/Monitor.cs
@@ -23,7 +23,7 @@
        public static void CheckInbound() {                
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            try {
                // 查产线是否有物料信息
                foreach (var prod in Settings.ProductionLines) {
@@ -74,7 +74,8 @@
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            const string taskName = TaskName.C成品胶出库;
            var taskInfo = Settings.GetTaskInfo(ETask.C成品胶出库);
            var taskName = taskInfo.TaskName;
            try {
                var orderList = db.Queryable<TN_Outbound_Order>()
@@ -101,7 +102,7 @@
                    if (doingCount == allCount) {
                        order.N_B_STATE = 2; // 所有任务都已执行
                        db.Updateable<TN_Outbound_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        continue;
                    }
@@ -162,21 +163,25 @@
                    var cntId = detail.S_CNTR_CODE;
                    var erp_no = string.IsNullOrEmpty(detail.S_BS_NO) ? "" : detail.S_BS_NO;
                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO, erp_no);
                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
                    task.S_OP_CODE = detail.S_OO_NO;
                    if (string.IsNullOrEmpty(detail.S_BS_NO)) {
                        task.S_BS_NO = detail.S_BS_NO;
                        task.S_BS_TYPE = "ERP";
                    }
                    LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁
                    LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁
                    WCSHelper.LockStartLoc(ref startLoc); // 起点出库锁
                    WCSHelper.LockEndLoc(ref endLoc); // 终点入库锁
                    using (var tran = db.Ado.UseTran()) {
                        if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                        if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            info = $"轮询:{taskName}:修改明细表状态为完成--失败!";
                            LogHelper.Info(info);
                            continue;
                        }
                        if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                        if (db.Updateable(startLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
@@ -189,7 +194,7 @@
                            continue;
                        }
                        if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                        if (db.Updateable(endLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
@@ -201,7 +206,7 @@
                            continue;
                        }
                        if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                        if (db.Insertable(task).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            info = $"生成任务'{taskName}'失败,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}";
                            LogHelper.Info(info);
@@ -224,37 +229,6 @@
                    
                }
                //// BEG 查找6个月以前的任务表和任务动作表
                //var oldTaskList = db.Queryable<TN_Task>()
                //    .Where(t => t.T_MODIFY < DateTime.Now.AddMonths(-6))
                //    .Where(t => t.N_B_STATE == 3 && t.S_B_STATE == "完成")
                //    .ToList();
                //var oldTaskActionList = db.Queryable<TN_Task, TN_Task_Action>((t, a) => t.S_CODE == a.S_TASK_CODE)
                //    .Where(t => t.T_MODIFY < DateTime.Now.AddMonths(-6))
                //    .Where(t => t.N_B_STATE == 3 && t.S_B_STATE == "完成")
                //    .Select((t, a) => a)
                //    .ToList();
                //// END
                //using (var tran = db.Ado.UseTran()) {
                //    // 在出库轮询中处理,查找任务单是否有半年前且已经完成的任务,如果有则删除
                //    // 这个操作不影响正常流程,如果失败也不需要回滚
                //    //if (db.Deleteable<TN_Task>()
                //    //    .Where(t => t.T_MODIFY < DateTime.Now.AddMonths(-6))
                //    //    .Where(t => t.N_B_STATE == 3 && t.S_B_STATE == "完成")
                //    //    .ExecuteCommand() <= 0) {
                //    //    info = $"轮询{taskName}单时尝试删除半年前的任务失败";
                //    //    LogHelper.Info(info);
                //    //}
                //    if (db.Deleteable<TN_Task>(oldTaskList).ExecuteCommand() <= 0
                //        && db.Deleteable<TN_Task_Action>(oldTaskActionList).ExecuteCommand() <= 0) {
                //        info = $"轮询{taskName}单时尝试删除半年前的任务失败";
                //        LogHelper.Info(info);
                //    }
                //}
            }
            catch (Exception ex) {
                info = $"轮询:{taskName}:发生了异常:{ex.Message}";
@@ -266,7 +240,8 @@
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            const string taskName = TaskName.C抽检_出库;
            var taskInfo = Settings.GetTaskInfo(ETask.C抽检出库);
            var taskName = taskInfo.TaskName;
            try {
                var orderList = db.Queryable<TN_Spot_Check>()
@@ -289,7 +264,7 @@
                    if (doingCount == allCount) {
                        order.N_B_STATE = 2; // 所有任务都已执行
                        db.Updateable<TN_Spot_Check>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        continue;
                    }
@@ -331,19 +306,20 @@
                    detail.N_B_STATE = 2;
                    var cntId = detail.S_CNTR_CODE;
                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO);
                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
                    task.S_OP_CODE = detail.S_OO_NO;
                    LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁
                    LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁
                    WCSHelper.LockStartLoc(ref startLoc); // 起点出库锁
                    WCSHelper.LockEndLoc(ref endLoc); // 终点入库锁
                    using (var tran = db.Ado.UseTran()) {
                        if (db.Updateable<TN_SpotCheck_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                        if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info($"轮询:{taskName}:修改{taskName}单明细表状态为完成--失败!");
                            continue;
                        }
                        if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                        if (db.Updateable(startLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
@@ -356,7 +332,7 @@
                            continue;
                        }
                        if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                        if (db.Updateable(endLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
@@ -368,7 +344,7 @@
                            continue;
                        }
                        if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                        if (db.Insertable(task).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            info = $"生成任务'{taskName}'失败,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}";
                            LogHelper.Info(info);
@@ -391,7 +367,8 @@
            var db = new SqlHelper<object>().GetInstance();
            var info = "";
            const string taskName = TaskName.Y移库;
            var taskInfo = Settings.GetTaskInfo(ETask.Y移库);
            var taskName = taskInfo.TaskName;
            try {
                var orderList = db.Queryable<TN_Relocation_List>()
@@ -414,7 +391,7 @@
                    if (doingCount == allCount) {
                        order.N_B_STATE = 2; // 所有任务都已执行
                        db.Updateable<TN_Relocation_List>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        continue;
                    }
@@ -460,19 +437,20 @@
                    detail.N_B_STATE = 2;
                    var cntId = detail.S_CNTR_CODE;
                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO);
                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
                    task.S_OP_CODE = detail.S_OO_NO;
                    LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁
                    LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁
                    WCSHelper.LockStartLoc(ref startLoc); // 起点出库锁
                    WCSHelper.LockEndLoc(ref endLoc); // 终点入库锁
                    using (var tran = db.Ado.UseTran()) {
                        if (db.Updateable<TN_RelocationList_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                        if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info($"轮询:{taskName}:修改{taskName}单明细表状态为完成--失败!");
                            continue;
                        }
                        if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                        if (db.Updateable(startLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
@@ -485,7 +463,7 @@
                            continue;
                        }
                        if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                        if (db.Updateable(endLoc).UpdateColumns(it => new {
                            it.N_LOCK_STATE,
                            it.S_LOCK_STATE,
                            it.S_LOCK_OP,
@@ -497,7 +475,7 @@
                            continue;
                        }
                        if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                        if (db.Insertable(task).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            info = $"生成任务'{taskName}'失败,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}";
                            LogHelper.Info(info);
@@ -599,14 +577,14 @@
                model.ph = cgDetail.S_BATCH_NO;
                var jsonInfo = JsonConvert.SerializeObject(model);
                var result = httpH.WebPost(Settings.ErpApiUrl + "CreateTaskReturn", jsonInfo);
                var result = httpH.WebPost(Settings.ErpApiUrl + Settings.ErpRoute.CreateTaskReturn, jsonInfo);
                LogHelper.InfoApi($"创建任务完成反馈ERP接口,结果={result},调用参数:", model);
                plan.HW = model.hw;
                plan.HWZT = model.hwzt;
                plan.PH = model.ph;
                var success = db.Updateable<TN_Outbound_Plan>(plan).UpdateColumns(p => new { p.HW, p.HWZT, p.PH }).ExecuteCommand() > 0;
                var success = db.Updateable(plan).UpdateColumns(p => new { p.HW, p.HWZT, p.PH }).ExecuteCommand() > 0;
                info = "更新出库计划单记录表" + (success ? "成功" : "失败");
                LogHelper.Info(info);
            }