.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/16cec1d3-204a-4803-a3d3-25bcd983bea9.vsidx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/1912c2ce-d2a9-4b1c-82fe-620c78efc36f.vsidx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/43738d2c-dc76-49d4-9704-65742496dac9.vsidx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/72b74e1b-3ce7-462f-a4d7-ab0ffca83287.vsidx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/d49484c3-00c1-4b7d-9deb-0d030288ff5a.vsidx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f0bbbb2f-3b58-4dfe-8ac7-534413626ac1.vsidx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
api/ApiHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
api/DebugController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
core/Monitor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/16cec1d3-204a-4803-a3d3-25bcd983bea9.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/1912c2ce-d2a9-4b1c-82fe-620c78efc36f.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/43738d2c-dc76-49d4-9704-65742496dac9.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/72b74e1b-3ce7-462f-a4d7-ab0ffca83287.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/d49484c3-00c1-4b7d-9deb-0d030288ff5a.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f0bbbb2f-3b58-4dfe-8ac7-534413626ac1.vsidxBinary files differ
api/ApiHelper.cs
@@ -218,6 +218,8 @@ S_CNTR_TYPE = cntrType, // 空托入库 }; startLoc.N_CURRENT_NUM = 1; // 绑定后 var endLoc = db.Queryable<TN_Location>() .Where(l => Settings.AreaMap[endAreaName].Contains(l.S_AREA_CODE)) .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") @@ -275,7 +277,8 @@ it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY it.T_MODIFY, it.N_CURRENT_NUM }).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"生成任务'{taskName}'失败:更新起点货位'{startLoc.S_CODE}'锁状态失败"; @@ -386,6 +389,8 @@ S_CNTR_TYPE = cntrType, }; startLoc.N_CURRENT_NUM = 1; // 绑定后 var endLoc = db.Queryable<TN_Location>() .Where(l => Settings.AreaMap[endAreaName].Contains(l.S_AREA_CODE)) .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") @@ -445,7 +450,8 @@ it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY it.T_MODIFY, it.N_CURRENT_NUM }).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"生成任务'{taskName}'失败:更新起点货位'{startLoc.S_CODE}'锁状态失败"; api/DebugController.cs
@@ -200,47 +200,48 @@ const string taskName = TaskName.T托盘_满托下线入库; const string startAreaName = AreaName.B包装区; const string endAreaName = AreaName.M满托货架区; const string cntrType = "托盘"; try { var itemCode = model.ItemCode; var batchNo = model.BatchNo; //var itemCode = model.ItemCode; //var batchNo = model.BatchNo; var cntrCode = model.CntrCode; var startLocCode = model.StartLoc; var cgDetail = new TN_CG_Detail { S_ITEM_CODE = itemCode, S_BATCH_NO = batchNo, S_CNTR_CODE = cntrCode, }; //var cgDetail = new TN_CG_Detail { // S_ITEM_CODE = itemCode, // S_BATCH_NO = batchNo, // S_CNTR_CODE = cntrCode, //}; var needInsertContainer = false; var needUpdateContainer = false; //var needInsertContainer = false; //var needUpdateContainer = false; // 查容器信息表是否已经有这个容器 var cntr = db.Queryable<TN_Container>() .Where(c => c.S_CODE == cntrCode).First(); //var cntr = db.Queryable<TN_Container>() // .Where(c => c.S_CODE == cntrCode).First(); // 如果找不到该容器,需要添加,并且将容器来源设置为任务名称 if (cntr == null) { needInsertContainer = true; LogHelper.Info($"轮询:{taskName}:容器:{cntrCode},在容器表中没有登记,登记并设置容器来源为:{taskName}"); //if (cntr == null) { // needInsertContainer = true; // LogHelper.Info($"轮询:{taskName}:容器:{cntrCode},在容器表中没有登记,登记并设置容器来源为:{taskName}"); cntr = new TN_Container { S_CODE = cntrCode, S_TYPE = "托盘", S_SPEC = itemCode, S_SOURCE = taskName, }; } else { // 如果找到该容器,但容器物料类型与下线物料不符,记录并直接覆盖(待定) if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { needUpdateContainer = true; LogHelper.Info($"轮询:{taskName}:容器表中容器{cntrCode}对应的物料信息:{cntr.S_SPEC}," + $"与所需要的物料信息{itemCode}不符,直接覆盖结果"); // cntr = new TN_Container { // S_CODE = cntrCode, // S_TYPE = "托盘", // S_SPEC = itemCode, // S_SOURCE = taskName, // }; //} //else { // // 如果找到该容器,但容器物料类型与下线物料不符,记录并直接覆盖(待定) // if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { // needUpdateContainer = true; // LogHelper.Info($"轮询:{taskName}:容器表中容器{cntrCode}对应的物料信息:{cntr.S_SPEC}," + // $"与所需要的物料信息{itemCode}不符,直接覆盖结果"); cntr.S_SPEC = itemCode; cntr.S_SOURCE = taskName; } } // cntr.S_SPEC = itemCode; // cntr.S_SOURCE = taskName; // } //} var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == startLocCode) @@ -255,12 +256,17 @@ return info; } var locCntrRelOld = db.Queryable<TN_Loc_Container>() .Where(c => c.S_CNTR_CODE == cntrCode).First(); // 绑定货位和容器号 var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLocCode, S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_CNTR_TYPE = "托盘", S_CNTR_CODE = cntrCode, S_CNTR_TYPE = cntrType, }; startLoc.N_CURRENT_NUM = 1; // 绑定后 var endLoc = db.Queryable<TN_Location>() .Where(a => Settings.AreaMap[endAreaName].Contains(a.S_AREA_CODE)) @@ -282,29 +288,38 @@ LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"插入容器货品信息表失败:物料编码{cgDetail.S_ITEM_CODE},容器编码{cgDetail.S_CNTR_CODE}"; LogHelper.Info(info); return info; if (locCntrRelOld != null) { if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0 && db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"删除旧货位容器关系表失败:货位编码{locCntrRelOld.S_LOC_CODE},容器编码{locCntrRelOld.S_CNTR_CODE}"; LogHelper.Info(info); return info; } } //if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { // tran.RollbackTran(); // info = $"插入容器货品信息表失败:物料编码{cgDetail.S_ITEM_CODE},容器编码{cgDetail.S_CNTR_CODE}"; // LogHelper.Info(info); // return info; //} if (needInsertContainer) { if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { info = $"插入容器表失败:" + JsonConvert.SerializeObject(cntr); tran.RollbackTran(); LogHelper.Info(info); return info; } } else if (needUpdateContainer) { if (db.Updateable<TN_Container>(cntr).ExecuteCommand() <= 0) { info = $"更新容器表失败:" + JsonConvert.SerializeObject(cntr); tran.RollbackTran(); LogHelper.Info(info); return info; } } //if (needInsertContainer) { // if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { // info = $"插入容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // return info; // } //} //else if (needUpdateContainer) { // if (db.Updateable<TN_Container>(cntr).ExecuteCommand() <= 0) { // info = $"更新容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // return info; // } //} if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); @@ -313,12 +328,7 @@ return info; } if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) { if (db.Updateable<TN_Location>(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(); info = $"生成任务'{taskName}'失败:更新起点货位{startLoc.S_CODE}锁状态失败"; LogHelper.Info(info); @@ -360,11 +370,11 @@ public class AddInboundTaskInfo { /// <summary> /// 物料编码 /// 物料编码(暂时没用) /// </summary> public string ItemCode { get; set; } /// <summary> /// 批次号 /// 批次号(暂时没用) /// </summary> public string BatchNo { get; set; } /// <summary> core/Monitor.cs
@@ -25,6 +25,8 @@ var info = ""; const string taskName = TaskName.T托盘_满托下线入库; const string startAreaName = AreaName.B包装区; const string endAreaName = AreaName.M满托货架区; const string cntrType = "托盘"; try { @@ -56,78 +58,82 @@ LogHelper.Info(JsonConvert.SerializeObject(data)); var itemCode = data.item_code; var batchNo = data.batch_no; //var itemCode = data.item_code; //var batchNo = data.batch_no; var cntrCode = data.cntr_code; var startLocCode = prod.OffLoc[0]; // 用于测试 //var startLocCode = "CX01"; // 用于测试 var cgDetail = new TN_CG_Detail { S_ITEM_CODE = itemCode, S_BATCH_NO = batchNo, S_CNTR_CODE = cntrCode, }; //var cgDetail = new TN_CG_Detail { // 空托上线时就绑定好了 // S_ITEM_CODE = itemCode, // S_BATCH_NO = batchNo, // S_CNTR_CODE = cntrCode, //}; var needInsertContainer = false; var needUpdateContainer = false; //var needInsertContainer = false; //var needUpdateContainer = false; // TEMP 自动触发的托盘下线暂时不考虑判断,默认没有时写入 // 查容器信息表是否已经有这个容器 var cntr = db.Queryable<TN_Container>() .Where(c => c.S_CODE == cntrCode).First(); //var cntr = db.Queryable<TN_Container>() // .Where(c => c.S_CODE == cntrCode).First(); // 如果找不到该容器,需要添加,并且将容器来源设置为任务名称 if (cntr == null) { needInsertContainer = true; LogHelper.Info($"轮询:{taskName}:容器:{cntrCode},在容器表中没有登记,登记并设置容器来源为:{taskName}"); //if (cntr == null) { // needInsertContainer = true; // LogHelper.Info($"轮询:{taskName}:容器:{cntrCode},在容器表中没有登记,登记并设置容器来源为:{taskName}"); cntr = new TN_Container { S_CODE = cntrCode, S_TYPE = cntrType, S_SPEC = itemCode, }; } else { // 如果找到该容器,但容器物料类型与下线物料不符,记录并直接覆盖(待定) if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { needUpdateContainer = true; LogHelper.Info($"轮询:{taskName}:容器表中容器{cntrCode}对应的物料信息:{cntr.S_SPEC}," + $"与所需要的物料信息{itemCode}不符,直接覆盖结果"); // cntr = new TN_Container { // S_CODE = cntrCode, // S_TYPE = cntrType, // S_SPEC = itemCode, // }; //} //else { // 如果找到该容器,但容器物料类型与下线物料不符,记录并直接覆盖(待定) // if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { // needUpdateContainer = true; // LogHelper.Info($"轮询:{taskName}:容器表中容器{cntrCode}对应的物料信息:{cntr.S_SPEC}," + // $"与所需要的物料信息{itemCode}不符,直接覆盖结果"); cntr.S_SPEC = itemCode; } } // cntr.S_SPEC = itemCode; // } //} var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == startLocCode) // 指定:起点货位号 .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") // 筛选:未上锁 .Where(l => l.N_CURRENT_NUM == 0) .First(); .Where(l => l.S_CODE == startLocCode) .Where(l => Settings.AreaMap[startAreaName].Contains(l.S_AREA_CODE)) .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") //.Where(l => l.N_CURRENT_NUM == 0) // 绑定前 .First(); if (startLoc == null) { info = $"起点位置 '{startLocCode}' 不存在或不具备取货要求"; info = $"在'{startAreaName}'中没有找到起点货位'{startLocCode}',或不满足要求:未上锁、当前容器数量=0"; LogHelper.Info(info); continue; } var locCntrRelOld = db.Queryable<TN_Loc_Container>() .Where(c => c.S_CNTR_CODE == cntrCode).First(); // 绑定货位和容器号 var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLocCode, S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_CNTR_CODE = cntrCode, S_CNTR_TYPE = cntrType, }; startLoc.N_CURRENT_NUM = 1; // 绑定后 var endLoc = db.Queryable<TN_Location>() .Where(a => Settings.AreaMap[AreaName.K空托存放区].Contains(a.S_AREA_CODE)) .Where(a => Settings.AreaMap[endAreaName].Contains(a.S_AREA_CODE)) .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y") // 筛选:未上锁 .Where(a => a.N_CURRENT_NUM == 0) // 筛选:空货位 .OrderBy(l => l.N_LAYER) .First(); if (endLoc == null) { info = "空托入库暂时没有合适的货位可以入库"; info = $"在终点货区'{endAreaName}'中,没有找到合适的【终点货位】,需要满足要求:未上锁、当前容器数量=0"; LogHelper.Info(info); continue; } var cntId = locCntrRel.S_CNTR_CODE; @@ -136,34 +142,43 @@ LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 cntr.S_SOURCE = task.S_CODE; cntr.T_MODIFY = DateTime.Now; //cntr.S_SOURCE = task.S_CODE; //cntr.T_MODIFY = DateTime.Now; using (var tran = db.Ado.UseTran()) { if (needInsertContainer) { if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { info = $"插入容器表失败:" + JsonConvert.SerializeObject(cntr); if (locCntrRelOld != null) { if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0 && db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"删除旧货位容器关系表失败:货位编码{locCntrRelOld.S_LOC_CODE},容器编码{locCntrRelOld.S_CNTR_CODE}"; LogHelper.Info(info); continue; } } else if (needUpdateContainer) { if (db.Updateable<TN_Container>(cntr) .UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) { info = $"更新容器表失败:" + JsonConvert.SerializeObject(cntr); tran.RollbackTran(); LogHelper.Info(info); continue; } } //if (needInsertContainer) { // if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { // info = $"插入容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // continue; // } //} //else if (needUpdateContainer) { // if (db.Updateable<TN_Container>(cntr) // .UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) { // info = $"更新容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // continue; // } //} if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"插入容器货品信息表失败:物料编码{cgDetail.S_ITEM_CODE},容器编码{cgDetail.S_CNTR_CODE}"; LogHelper.Info(info); continue; } //if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { // tran.RollbackTran(); // info = $"插入容器货品信息表失败:物料编码{cgDetail.S_ITEM_CODE},容器编码{cgDetail.S_CNTR_CODE}"; // LogHelper.Info(info); // continue; //} if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran();