HH.WCS.QingXiNongfu/Program.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/core/Monitor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/core/TaskCore.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/dispatch/NDC.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/process/TaskProcess.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/wms/LocationHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/wms/TaskHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.QingXiNongfu/wms/WMSModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HH.WCS.QingXiNongfu/Program.cs
@@ -19,6 +19,7 @@ using System.Threading; using System.Threading.Tasks; using Topshelf; using static System.Net.Mime.MediaTypeNames; using Monitor = HH.WCS.QingXigongchang.core.Monitor; namespace HH.WCS.QingXigongchang @@ -77,8 +78,6 @@ //Console.WriteLine(set1.SetEquals(set3)); #endregion var uuu16 = "TN" + (DateTime.Now.ToString("yy")) + ((6180010 + "").PadLeft(8, '0')); Console.WriteLine(uuu16); } else { HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -430,13 +430,17 @@ var orders = WCSHelper.GetWorkOrder2(); var thisOrder = orders.Find(x => x.SQL_WorkNo == WorkNo); LogHelper.Info("移库解锁 --当前工单 sid:" + thisOrder?.S_ID); if (thisOrder != null) { var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row); LogHelper.Info($"移库解锁 --其他工单 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID); if (other != null) j解锁起点库区排 = false; } var allarea_rows = orders.FindAll(x => x.S_ID != thisOrder.S_ID && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row); LogHelper.Info("移库解锁 --当前工单 的同库区排 其他工单:" + JsonConvert.SerializeObject(allarea_rows)); if (allarea_rows.Any()) j解锁起点库区排 = false; //if (thisOrder != null) //{ // var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row); // LogHelper.Info($"移库解锁 --其他工单 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID); // if (other != null) // j解锁起点库区排 = false; //} } //if (sign == 1) //{ @@ -1135,6 +1139,17 @@ continue; } } if (CDlist.Contains(EdnRarea)) { var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_STATE == "入库锁"); //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁")); if (ls.Count() > 2) { LogHelper.Info($"{EdnRarea}任务数1管制3"); continue; } } //else if (CDlist.Contains(EdnRarea)) //{ // var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁")).ToList(); @@ -1230,12 +1245,19 @@ ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == EdnRarea); var lstCanOutL = dbll.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList(); LogHelper.Info($"终点有相同的物料的货位有{lstCanOutL.Count()}"); var ca1 = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); ca1.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == "YWLRGDD" && p.S_TYPE == EdnRarea); var lstCanOutLSta = dbll.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca1.ToExpression()).ToList(); if (lstCanOutL.Count() > 0) { var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "无" && lstCanOutL.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList(); if (EndMum.Count() > 0) { arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); if (lstCanOutL.Count() <= EndMum.Count()) { arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); } } } } @@ -1487,7 +1509,6 @@ if (tklist.Count() > 0) { var tk = tklist.FirstOrDefault(); var loc = LocationHelper.GetLoc(plc.location[0]); if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "无") { HH.WCS.QingXiNongfu/core/TaskCore.cs
@@ -389,6 +389,9 @@ var info = db.Queryable<KuRong>().First(); if (info == null || DateTime.Now.Subtract(info.T_MODIFY).TotalMinutes > min) { db.Deleteable<KuRong>().ExecuteCommand(); info = null; //1、查到小板库区下面所有的库位 var totalX = 0; var totalRows = 0; @@ -486,9 +489,21 @@ } var totalDesiredCapacity = ordersCount * 4 * 3 * (totalX / totalRows); LogHelper.Error($"成品小板区总货位是{totalX},总排数是{totalRows},当前执行工单数量是{ordersCount}", new Exception("Kurong")); var totalAvailableCapacity = list.Sum(a => a.AvailableCapacity); var totalAssignableCapacity = totalAvailableCapacity - totalDesiredCapacity; list.ForEach(a => { a.DesiredCapacity = totalDesiredCapacity; a.CRC = totalAvailableCapacity; a.RAC = totalAssignableCapacity; }); //var totalAvailableCapacity = list.Sum(a => a.AvailableCapacity); //var totalAssignableCapacity = totalAvailableCapacity - totalDesiredCapacity; //list.ForEach(a => { a.DesiredCapacity = totalDesiredCapacity; a.CRC = totalAvailableCapacity; a.RAC = totalAssignableCapacity; }); var totalAvailableCapacity = list.Sum(a => a.MaxCapacity);// AvailableCapacity); var DRC = list.Sum(x => x.FilledCapacity); var totalAssignableCapacity = totalAvailableCapacity - DRC - totalDesiredCapacity; var BAC = list.Sum(x => x.AvailableCapacity); list.ForEach(a => { a.DesiredCapacity = totalDesiredCapacity; a.CRC = totalAvailableCapacity; a.RAC = totalAssignableCapacity; a.BAC = BAC; a.DRC = DRC; }); if (info == null) { /*SQL Server 1000 条/批次 单个 INSERT 语句最多支持 1000 条 VALUES 子句,超出会报语法错误。*/ HH.WCS.QingXiNongfu/dispatch/NDC.cs
@@ -82,6 +82,28 @@ return false; } } /// <summary> /// 修改优先级 /// </summary> /// <param name="taskNo">任务号</param> /// <param name="paramNo">优先级</param> /// <returns></returns> public static bool ChangeParamPri(string taskNo, int paramNo = 0) { bool bResult = false; var dic = new Dictionary<string, string>(); dic.Add("No", taskNo); if (paramNo >= 0) { dic.Add("Pri", paramNo.ToString()); } dic.Add("IKey", ""); var result = ChangeOrder(dic); if (result.Res.ErrCode == 0) { bResult = true; } return bResult; } public static AGVResult AddNewOrderNew(int ts, int pri, string taskNo, Dictionary<string, string> param) { //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req > HH.WCS.QingXiNongfu/process/TaskProcess.cs
@@ -1114,9 +1114,9 @@ } if (state == 9) { CacheBitUpdate(mst, load: true); var g = LocationHelper.UnLockLoc(mst.S_END_LOC.Trim()); var T = LocationHelper.UnLockLoc(mst.S_START_LOC.Trim()); CacheBitUpdate(mst, load: true); } return r; } HH.WCS.QingXiNongfu/wms/LocationHelper.cs
@@ -790,7 +790,7 @@ LogHelper.Info($"{plc.deviceName}-{workOrder.SQL_WorkNo}链接的产线号{LineTo} BolArea 未配置。"); goto ______label____end; } bitslocs = LocationHelper.GetAreaNormalLocList(ba.UsingBolArea, true, false); bitslocs = LocationHelper.GetAreaNormalLocList(ba.UsingBolArea); //var bits = Settings.GetInStockCacheList().Where(a => a.deviceName == _t)?.Select(x => x.location); //bitslocs = LocationHelper.GetAllLocList().Where(x => bits.Contains(x.S_LOC_CODE.Trim())).ToList(); HH.WCS.QingXiNongfu/wms/TaskHelper.cs
@@ -1,4 +1,4 @@ using HH.WCS.QingXigongchang.process; using HH.WCS.QingXigongchang.dispatch; using HH.WCS.QingXigongchang.util; using Newtonsoft.Json; using SqlSugar; @@ -239,43 +239,55 @@ } internal static void End(WMSTask task) { var db = new SqlHelper<WMSTask>().GetInstance(); var db = new SqlHelper<object>().GetInstance(); //plg 2025年6月13日 10:42:24 if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD" && !string.IsNullOrEmpty(task.S_TWO_END_LOC)) if (task.S_END_LAREA == "YWLYLTKQ" || task.S_END_LAREA == "YWLTKKTQ") { var model = db.Queryable<Location>().Where(a => a.S_LOC_CODE == task.S_TWO_END_LOC).First(); if (model != null) //查询出库锁YWLWJJB var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == "YWLWJJB" && x.S_LOCK_STATE == "出库锁"); if (ls.Any()) { //先解锁终点 在锁定 db.Ado.BeginTran(); try var tas = db.Queryable<WMSTask>().Where(a => a.S_START_LOC == ls.First().S_LOC_CODE).ToList().FirstOrDefault(); if (tas.S_B_STATE == "已推送") { model.S_LOCK_STATE = "无"; var res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand() > 0; LogHelper.Info(task.S_TWO_END_LOC + "LockLoc:锁结果" + res); db.Ado.CommitTran(); NDC.ChangeParamPri(tas.S_TASK_NO, 70); } catch (Exception ex) { db.Ado.RollbackTran(); LogHelper.Info("CreateTask 失败 " + ex.Message); } LogHelper.Info(task.S_TWO_END_LOC + "二段任务 开始。 "); var b = TaskProcess.CreateTransport(task.S_SRC_NO, task.S_END_LOC, task.S_TWO_END_LOC, "原物料搬运-纸箱", task.S_CNTRS.Split(',').ToList(), task.N_START_LAYER, 1, task.N_CNTR_COUNT, task.N_PRIORITY); //if (b) //{ // if (task != null) // { // task.S_B_STATE = "完成"; // task.T_END_TIME = DateTime.Now; // db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); // } //} } } ////plg 2025年6月13日 10:42:24 //if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD" && !string.IsNullOrEmpty(task.S_TWO_END_LOC)) //{ // var model = db.Queryable<Location>().Where(a => a.S_LOC_CODE == task.S_TWO_END_LOC).First(); // if (model != null) // { // //先解锁终点 在锁定 // db.Ado.BeginTran(); // try // { // model.S_LOCK_STATE = "无"; // var res = db.Updateable(model).UpdateColumns(it => new { it.S_LOCK_STATE }).ExecuteCommand() > 0; // LogHelper.Info(task.S_TWO_END_LOC + "LockLoc:锁结果" + res); // db.Ado.CommitTran(); // } // catch (Exception ex) // { // db.Ado.RollbackTran(); // LogHelper.Info("CreateTask 失败 " + ex.Message); // } // LogHelper.Info(task.S_TWO_END_LOC + "二段任务 开始。 "); // var b = TaskProcess.CreateTransport(task.S_SRC_NO, task.S_END_LOC, task.S_TWO_END_LOC, "原物料搬运-纸箱", task.S_CNTRS.Split(',').ToList(), task.N_START_LAYER, 1, task.N_CNTR_COUNT, task.N_PRIORITY); // //if (b) // //{ // // if (task != null) // // { // // task.S_B_STATE = "完成"; // // task.T_END_TIME = DateTime.Now; // // db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); // // } // //} // } //} if (task != null) { task.S_B_STATE = "完成"; HH.WCS.QingXiNongfu/wms/WMSModel.cs
@@ -376,14 +376,46 @@ [SuGG("库容表")] public class KuRong : BaseModel { /// <summary> /// 库位 /// </summary> public string StorageLoc { get; set; } /// <summary> /// AGV总库容 /// </summary> public int MaxCapacity { get; set; } /// <summary> /// 已占库容 /// </summary> public int FilledCapacity { get; set; } /// <summary> /// 品相 /// </summary> public string ProductItem { get; set; } /// <summary> /// 剩余库容量 /// </summary> public int AvailableCapacity { get; set; } /// <summary> /// agv所需库容。 /// </summary> public int DesiredCapacity { get; set; } /// <summary> /// 仓库总库容。 /// </summary> public int CRC { get; set; } /// <summary> /// 剩余空库容。 /// </summary> public int RAC { get; set; } /// <summary> /// 已占库容的和。 /// </summary> public int DRC { get; set; } /// <summary> /// 仓库剩余总库容。 /// </summary> public int BAC { get; set; } } //均州现场 //[SugarTable("dbo.")]