kazelee
8 天以前 2ca90a404fa1ab94eb6374f50c6ddd47a2b7f0e6
core/Monitor.cs
@@ -69,7 +69,9 @@
        public static void CheckOutboundOrder() {
            var db = new SqlHelper<object>().GetInstance();
            var taskInfo = Settings.GetTaskInfo(ETask.C成品胶出库);
            var (ok, msg) = (false, string.Empty);
            var taskInfo = ETask.C成品胶出库.Info();
            var taskName = "出库";
            const string preLog = "轮询:出库:";
@@ -139,41 +141,22 @@
                    }
                    
                    detail.N_B_STATE = 2;
                    detail.T_MODIFY = DateTime.Now;
                    var cntId = detail.S_CNTR_CODE;
                    var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskName);
                    var task = WCSHelper.BuildTaskAndLockLoc(startLoc, endLoc, detail.S_CNTR_CODE, 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";
                    }
                    using (var tran = db.Ado.UseTran()) {
                        if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info($"轮询:{taskName}:修改明细表状态为完成--失败!");
                            continue;
                        }
                        // 更新[起点/终点]锁状态,创建任务
                        if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'");
                        }
                        if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'");
                        }
                        if (db.Insertable(task).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"生成任务'{task.S_TYPE}'失败!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}");
                        }
                        // 提交数据库更改
                        tran.CommitTran();
                        LogHelper.Info(preLog + $"生成任务'{task.S_TYPE}'成功!任务号={task.S_CODE},容器号={task.S_CNTR_CODE},起点={task.S_START_LOC},终点={task.S_END_LOC}");
                    }
                    (ok, msg) = DbTran.CreateTaskOrderObj(new CreateTaskOrderObj {
                        OutboundDetailToUpdate = detail,
                        StartLocToUpdate = startLoc,
                        EndLocToUpdate = endLoc,
                        TaskToInsert = task,
                    });
                    LogHelper.Info(preLog + msg);
                    // 如果当前出库单明细是ERP下发的,任务创建完成反馈货位信息
                    if (detail.S_BS_TYPE == "ERP") {
@@ -193,7 +176,9 @@
        public static void CheckCheckOrder() {
            var db = new SqlHelper<object>().GetInstance();
            var taskInfo = Settings.GetTaskInfo(ETask.C抽检出库);
            var (ok, msg) = (false, string.Empty);
            var taskInfo = ETask.C抽检出库.Info();
            var taskName = taskInfo.TaskName;
            const string preLog = "轮询:抽检:";
@@ -250,40 +235,19 @@
                    }
                    detail.N_B_STATE = 2;
                    detail.T_MODIFY = DateTime.Now;
                    var cntId = detail.S_CNTR_CODE;
                    var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskName);
                    var task = WCSHelper.BuildTaskAndLockLoc(startLoc, endLoc, cntId, taskName);
                    task.S_OP_CODE = detail.S_OO_NO;
                    using (var tran = db.Ado.UseTran()) {
                        if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"修改{taskName}单明细表状态为完成--失败!");
                            continue;
                        }
                        if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'");
                            continue;
                        }
                        if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'");
                            continue;
                        }
                        if (db.Insertable(task).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"生成任务'{taskName}'失败,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}");
                            continue;
                        }
                        tran.CommitTran();
                        LogHelper.Info(preLog + $"生成任务'{taskName}'成功,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}");
                        continue;
                    }
                    (ok, msg) = DbTran.CreateTaskOrderObj(new CreateTaskOrderObj {
                        SpotCheckDetailToUpdate = detail,
                        StartLocToUpdate = startLoc,
                        EndLocToUpdate = endLoc,
                        TaskToInsert = task,
                    });
                    LogHelper.Info(preLog + msg);
                }
            }
            catch (Exception ex) {
@@ -293,7 +257,9 @@
        public static void CheckShiftOrder() {                
            var db = new SqlHelper<object>().GetInstance();
            var taskInfo = Settings.GetTaskInfo(ETask.Y移库);
            var (ok, msg) = (false, string.Empty);
            var taskInfo = ETask.Y移库.Info();
            var taskName = taskInfo.TaskName;
            const string preLog = "轮询:移库:";
            
@@ -337,63 +303,35 @@
                }
                foreach (var detail in detailList) {
                    var startLoc = db.Queryable<TN_Location>()
                        .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
                        .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE)
                        .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") // 筛选:未上锁
                        .Where(l => l.N_CURRENT_NUM == 1)
                        .First();
                    var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
                        .Where(DbExpr.StartLoc()).Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE).First();
                    if (startLoc == null) {
                        LogHelper.Info(preLog + $"没有找到终点货位={detail.S_END_AREA}的终点货位!需要满足:未上锁,当前容器数量=0");
                        LogHelper.Info(preLog + LogMsg.StartLocNotFound() + $"绑定容器='{detail.S_CNTR_CODE}'");
                        continue;
                    }
                    var endLoc = db.Queryable<TN_Location>()
                        .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
                        .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y") // 筛选:未上锁
                        .Where(a => a.N_CURRENT_NUM == 0).First();
                        .Where(DbExpr.EndLoc(areas: new List<string> { detail.S_END_AREA })).First();
                    if (endLoc == null) {
                        LogHelper.Info(preLog + $"没有找到终点货位={detail.S_END_AREA}的终点货位!需要满足:未上锁,当前容器数量=0");
                        LogHelper.Info(preLog + LogMsg.EndLocNotFound(areas: new List<string> { detail.S_END_AREA }));
                        continue;
                    }
                    detail.N_B_STATE = 2;
                    detail.T_MODIFY = DateTime.Now;
                    var cntId = detail.S_CNTR_CODE;
                    var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskName);
                    var task = WCSHelper.BuildTaskAndLockLoc(startLoc, endLoc, cntId, taskName);
                    task.S_OP_CODE = detail.S_OO_NO;
                    using (var tran = db.Ado.UseTran()) {
                        if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info($"轮询:{taskName}:修改{taskName}单明细表状态为完成--失败!");
                            continue;
                        }
                        if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"更新[起点货位锁状态]失败!起点='{startLoc.S_CODE}',锁状态=>'出库锁'");
                            continue;
                        }
                        if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"更新[终点货位锁状态]失败!终点='{endLoc.S_CODE}',锁状态=>'入库锁'");
                            continue;
                        }
                        if (db.Insertable(task).ExecuteCommand() <= 0) {
                            tran.RollbackTran();
                            LogHelper.Info(preLog + $"生成任务'{taskName}'失败,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}");
                            continue;
                        }
                        tran.CommitTran();
                        LogHelper.Info(preLog + $"生成任务'{taskName}'成功,任务号={task.S_CODE},容器号={cntId},起点={startLoc.S_CODE},终点={endLoc.S_CODE}");
                        continue;
                    }
                    (ok, msg) = DbTran.CreateTaskOrderObj(new CreateTaskOrderObj {
                        RelocationDetailToUpdate = detail,
                        StartLocToUpdate = startLoc,
                        EndLocToUpdate = endLoc,
                        TaskToInsert = task,
                    });
                    LogHelper.Info(preLog + msg);
                }
            }
            catch (Exception ex) {
@@ -422,7 +360,7 @@
                    LogHelper.Info($"计划单号{task.S_BS_NO}不存在!");
                }
                var model = new OtherModel.CreateTaskReturnErpInfo {
                var model = new ErpModel.CreateTaskReturnErpInfo {
                    jhdh = plan.JHDH , // 计划单号 (唯一标识) 
                    ckzt = plan.CKZT , // 出库状态 (需要返回) 
                    jhlb = plan.JHLB , // 计划类别