| | |
| | | using HH.WCS.Mobox3.YNJT_BZP.api; |
| | | using HH.WCS.Mobox3.YNJT_BZP.dispatch; |
| | | using HH.WCS.Mobox3.YNJT_BZP.models; |
| | | using HH.WCS.Mobox3.YNJT_BZP.models.other; |
| | | using HH.WCS.Mobox3.YNJT_BZP.util; |
| | |
| | | using NLog.Fluent; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | |
| | | |
| | | if (exclude == 1) |
| | | { |
| | | query = query.Where((a, b, c, d) => a.S_CODE != Settings.baseTrayInBufferLoc); |
| | | List<string> bufferInLocs = Settings.baseTrayBufferLocList.Select(a => a.bufferInLoc).ToList(); |
| | | query = query.Where((a, b, c, d) => !bufferInLocs.Contains(a.S_CODE)); |
| | | } |
| | | else |
| | | else |
| | | { |
| | | query = query.OrderByDescending((a, b, c, d) => a.S_CODE == Settings.baseTrayInBufferLoc); |
| | | List<string> bufferInLocs = Settings.baseTrayBufferLocList.Select(a => a.bufferInLoc).ToList(); |
| | | query = query.OrderByDescending((a, b, c, d) => bufferInLocs.Contains(a.S_CODE)); |
| | | } |
| | | |
| | | result = query.OrderByDescending((a, b, c, d) => a.N_LAYER).First(); |
| | |
| | | |
| | | /// <summary> |
| | | /// 获取入库终点货位 |
| | | /// 入库策略 |
| | | /// 1.巷道均衡 |
| | | /// 2.物料均衡 |
| | | /// </summary> |
| | | /// <param name="locCode"></param> |
| | | /// <param name="trayType"></param> |
| | | /// <param name="inWay">入库方式 1.自动入库 2.人工入库</param> |
| | | /// <returns></returns> |
| | | public static Location GetInstockEndLoc(int trayType , string locCode = null , int inWay = 1) |
| | | public static Location GetInstockEndLoc(int trayType , string locCode = null , int inWay = 1 ,string itemCode = null) |
| | | { |
| | | LogHelper.Info("【获取入库终点货位】开始获取入库终点货位", "WMS"); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | |
| | | LogHelper.Info($"【获取入库终点货位】满足条件的空货位数量:{locList.Count}", "WMS"); |
| | | } |
| | | |
| | | |
| | | LogHelper.Info($"【获取入库终点货位】开始查询巷道的容积率", "WMS"); |
| | | var roadwayVolumeList = db.Queryable<Location>() |
| | | .Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE == Settings.storeAreaCode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && roadwayList.Contains(a.N_ROADWAY) && layerList.Contains(a.N_LAYER)) |
| | |
| | | .Select(a => new { roadway = a.N_ROADWAY , num = SqlFunc.AggregateDistinctCount(a.S_CODE)}) |
| | | .OrderBy(a => a.num) |
| | | .ToList(); |
| | | LogHelper.Info($"【获取入库终点货位】查询巷道的容积率,并按从大到小排序:{JsonConvert.SerializeObject(roadwayVolumeList)}", "WMS"); |
| | | LogHelper.Info($"【获取入库终点货位】查询巷道的容积率,并按从小到大排序:{JsonConvert.SerializeObject(roadwayVolumeList)}", "WMS"); |
| | | |
| | | Dictionary<int,int> roadwayDic = new Dictionary<int,int>(); |
| | | foreach (var item in roadwayVolumeList) |
| | | { |
| | | roadwayDic.Add(item.roadway, item.num); |
| | | } |
| | | |
| | | LogHelper.Info($"【获取入库终点货位】开始查询巷道的同物料数量", "WMS"); |
| | | var roadwayItemNumList = db.Queryable<Location>() |
| | | .LeftJoin<LocCntrRel>((a,b) => a.S_CODE == b.S_LOC_CODE) |
| | | .LeftJoin<CntrItemRel>((a,b,c) => b.S_CNTR_CODE == c.S_CNTR_CODE ) |
| | | .Where((a, b, c) => a.S_AREA_CODE == Settings.storeAreaCode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && roadwayList.Contains(a.N_ROADWAY) && layerList.Contains(a.N_LAYER)) |
| | | .GroupBy((a, b, c) => a.N_ROADWAY) |
| | | .Select((a, b, c) => new { roadway = a.N_ROADWAY, volumNum = SqlFunc.AggregateDistinctCount(c.S_ITEM_CODE == itemCode) }) |
| | | .ToList(); |
| | | LogHelper.Info($"【获取入库终点货位】查询巷道的同物料数量,并按从小到到排序:{JsonConvert.SerializeObject(roadwayItemNumList)}", "WMS"); |
| | | |
| | | roadwayItemNumList = roadwayItemNumList.OrderBy(a => a.volumNum).ThenBy(a => roadwayDic[a.roadway]).ToList(); |
| | | |
| | | if (inWay == 1) |
| | | { |
| | | LogHelper.Info($"【获取入库终点货位】开始循环查询巷道对应接驳位的状态", "WMS"); |
| | | foreach (var roadwayVolume in roadwayVolumeList) |
| | | foreach (var roadwayVolume in roadwayItemNumList) |
| | | { |
| | | int roadway = 0; |
| | | if (roadwayVolume != null) |
| | | { |
| | | roadway = roadwayVolume.roadway; |
| | | } |
| | | int roadway = roadwayVolume.roadway; |
| | | LogHelper.Info($"【获取入库终点货位】查询巷道内堆垛机的设备状态", "WMS"); |
| | | |
| | | var agvJbLocList = Settings.getAgvJBLocList(inWay, roadway, 1); |
| | | List<string> deviceNos = new List<string>() { roadway.ToString()}; |
| | | LogHelper.Info($"调用WCS的设备状态查询接口,参数:{deviceNos}", "WMS"); |
| | | var deviceStatuses = WCSDispatch.getDeviceStatus(deviceNos); |
| | | |
| | | var agvJbLocList = Settings.getAgvJBLocList( roadway, 1); |
| | | if (agvJbLocList.Count > 0) |
| | | { |
| | | foreach (var agvLocCode in agvJbLocList) |
| | |
| | | return db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.errorBufferArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取库区排的货位列表 |
| | | /// </summary> |
| | | /// <param name="area"></param> |
| | | /// <param name="row"></param> |
| | | /// <returns></returns> |
| | | public static List<Location> GetLocationList(string area , int row) { |
| | | List<Location> result = new List<Location> (); |
| | | try { |
| | |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | public static bool updateShiftOrderDetail(TN_YiKuDetail detail) { |
| | | bool result = false; |
| | |
| | | if(completeResult) { |
| | | result = db.Updateable<TN_YiKuOrder>().SetColumns(a => new TN_YiKuOrder() { S_B_STATE = "完成" }).Where(a => a.S_NO == detail.S_NO).ExecuteCommand() > 0; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | ///获取空托缓存信号列表 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static List<EmptyTrayBuffer> getEmptyTrayBufferList() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | return db.Queryable<EmptyTrayBuffer>().Where(a => a.IS_CREATED == "N").ToList(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 添加空托缓存信号 |
| | | /// </summary> |
| | | /// <param name="emptyTrayBuffer"></param> |
| | | /// <returns></returns> |
| | | public static bool addEmptyTrayBuffer(EmptyTrayBuffer emptyTrayBuffer) |
| | | { |
| | | bool result = true; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | result = db.Insertable<EmptyTrayBuffer>(emptyTrayBuffer).ExecuteCommand() > 0; |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新空托缓存信号 |
| | | /// </summary> |
| | | /// <param name="emptyTrayBuffer"></param> |
| | | /// <returns></returns> |
| | | public static bool updateEmptyTrayBuffer(EmptyTrayBuffer emptyTrayBuffer) |
| | | { |
| | | bool result = true; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | result = db.Updateable<EmptyTrayBuffer>(emptyTrayBuffer).ExecuteCommand() > 0; |
| | | return result; |
| | | } |
| | | |
| | |
| | | var sql1 = "SELECT get_minhour_bar(@barcode, @mcngrp) AS overage_value"; |
| | | |
| | | // 使用匿名对象传递参数 |
| | | var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "1"}); |
| | | var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "1"}); |
| | | if (ovg_bar.Count > 0 && minhour_bar.Count > 0) |
| | | var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "1"}).First(); |
| | | var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "1"}).First(); |
| | | Overage overage = new Overage() |
| | | { |
| | | Overage overage = new Overage() |
| | | { |
| | | MINHOUR = minhour_bar[0], |
| | | OVERAGE = ovg_bar[0] |
| | | }; |
| | | return overage; |
| | | } |
| | | return null; |
| | | MINHOUR = minhour_bar, |
| | | OVERAGE = ovg_bar |
| | | }; |
| | | return overage; |
| | | } |
| | | |
| | | /// <summary> |