| | |
| | | using System; |
| | | using System.Collections.Concurrent; |
| | | using System.Collections.Generic; |
| | | using System.IdentityModel.Protocols.WSTrust; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Reflection; |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error("创建入库单失败", ex, "杭氧"); |
| | | var sugarEx = ex as SqlSugar.SqlSugarException; |
| | | if (sugarEx != null) |
| | | { |
| | | LogHelper.Error($"创建入库单SQL错误: {sugarEx.Sql}", sugarEx, "杭氧"); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Error($"创建入库单失败:{ex.Message}", ex, "杭氧"); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error("创建出库单失败", ex, "杭氧"); |
| | | LogHelper.Error($"创建出库单失败:{ex.Message}", ex, "杭氧"); |
| | | return false; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据托盘查询货位明细 |
| | | /// </summary> |
| | | /// <param name="trayCode">托盘号</param> |
| | | /// <returns></returns> |
| | | internal static LocCntrRel GetCntrLoc(string trayCode) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var locCntr = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == trayCode).First(); |
| | | var locList = db.Queryable<Location>().Where(p => p.S_CODE == locCntr.S_LOC_CODE |
| | | && p.N_CURRENT_NUM == p.N_CAPACITY |
| | | && p.S_LOCK_STATE.Trim() == "无" |
| | | && p.S_AREA_CODE == "JXHCQ").First(); |
| | | if (locList == null) |
| | | { |
| | | return null; |
| | | } |
| | | return locCntr; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 任务状态转换 |
| | | /// </summary> |
| | | /// <param name="state">状态号</param> |
| | |
| | | /// </summary> |
| | | /// <param name="state">配盘单状态</param> |
| | | /// <returns></returns> |
| | | internal static List<DistributionCntr> GetPickingListByState(string state) |
| | | internal static List<DistributionCntr> GetPickingListByState(int state) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.S_B_STATE.Trim() == state).ToList(); |
| | | var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.N_B_STATE == state).ToList(); |
| | | return distributionCntr; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 配盘单状态转换 |
| | | /// </summary> |
| | | /// <param name="state">状态号</param> |
| | | /// <returns></returns> |
| | | internal static string GetDistributionStateStr(int state) |
| | | { |
| | | var status = ""; |
| | | switch (state) |
| | | { |
| | | case 1: status = "已配货"; break; |
| | | case 2: status = "出库中"; break; |
| | | case 3: status = "已出库"; break; |
| | | case 4: status = "分拣完成 "; break; |
| | | |
| | | } |
| | | return status; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 修改配盘单状态 |
| | | /// </summary> |
| | | /// <param name="taskState">作业状态</param> |
| | | /// <param name="state">状态</param> |
| | | /// <param name="trayCode">托盘号</param> |
| | | /// <returns></returns> |
| | | internal static bool UpdateDistributionCntrState(string state,string trayCode) |
| | | internal static bool UpdateDistributionCntrState(int taskState,int state,string trayCode) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.S_B_STATE.Trim() == "配货完成" && a.S_CNTR_CODE == trayCode ).First(); |
| | | var distributionCntr = db.Queryable<DistributionCntr>().Where(a => a.N_B_STATE == taskState && a.S_CNTR_CODE == trayCode ).First(); |
| | | if (distributionCntr != null) |
| | | { |
| | | |
| | | distributionCntr.S_B_STATE = state; |
| | | distributionCntr.N_B_STATE = 2; |
| | | distributionCntr.N_B_STATE = state; |
| | | distributionCntr.S_B_STATE = GetDistributionStateStr(state); |
| | | return db.Updateable<DistributionCntr>(distributionCntr).UpdateColumns(it => new { it.S_B_STATE, it.N_B_STATE }).ExecuteCommand() > 0; |
| | | } |
| | | return false; |
| | |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var locations = db.Queryable<Location>().Where(a => a.S_AREA_CODE == inbound.areaCode).ToList(); |
| | | if(!string.IsNullOrEmpty(inbound.roadWay.ToString())) |
| | | if(inbound.roadWay != 0) |
| | | { |
| | | locations.RemoveAll(s => s.N_ROADWAY != inbound.roadWay); |
| | | } |
| | |
| | | else continue; |
| | | |
| | | } |
| | | //else |
| | | //{ |
| | | // //货位为空直接生成出库任务 |
| | | // tasks.Add(CreateOutboundTask(targetLoc, outboundItem)); |
| | | //} |
| | | } |
| | | else |
| | | { |
| | | //货位为空直接生成出库任务 |
| | | tasks.Add(CreateOutboundTask(targetLoc,outboundItem)); |
| | | continue; |
| | | } |
| | | } |
| | | else continue; |
| | | |
| | | // 2.2 生成出库任务(深位) |
| | | tasks.Add(CreateOutboundTask(targetLoc, outboundItem)); |
| | | } |
| | |
| | | // 3. 非双深位直接出库 |
| | | tasks.Add(CreateOutboundTask(targetLoc, outboundItem)); |
| | | } |
| | | break; |
| | | } |
| | | // 4. 任务排序:移库任务优先 + 高优先级优先 |
| | | return tasks; |
| | |
| | | loc.N_ROADWAY == deepLoc.N_ROADWAY && |
| | | loc.N_COL == deepLoc.N_COL && |
| | | loc.N_LAYER == deepLoc.N_LAYER && |
| | | loc.N_LOCK_STATE == 0 |
| | | loc.N_LOCK_STATE == 0 || loc.N_LOCK_STATE == 5 |
| | | ); |
| | | |
| | | private Location FindBestRelocationTarget(Location outerLoc) |
| | |
| | | _allLocations |
| | | .Where(x => x.S_CODE == outerLoc.S_CODE) |
| | | .ToList() |
| | | .ForEach(x => x.N_LOCK_STATE = 3); |
| | | .ForEach(x => x.N_LOCK_STATE = 5); |
| | | //标记深位的外侧货位为5 |
| | | } |
| | | } |
| | | } |
| | |
| | | /// 根据任务升量 |
| | | /// </summary> |
| | | /// <param name="task"></param> |
| | | internal static void AddChange(WCSTask task) |
| | | internal static bool AddChange(WCSTask task) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var result = true; |
| | |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error($"仓库升量异常 异常信息={ex.Message}", ex); |
| | | result = false; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据任务降量 |
| | | /// </summary> |
| | | /// <param name="task"></param> |
| | | internal static void DeleteChange(WCSTask task) |
| | | internal static bool DeleteChange(WCSTask wmstask) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var result = true; |
| | | try |
| | | { |
| | | var wmstask = db.Queryable<WMSTask>().Where(a => a.S_CODE == task.S_OP_CODE).First(); |
| | | //var wmstask = db.Queryable<WCSTask>().Where(a => a == task.S_OP_CODE).First(); |
| | | if (wmstask != null) |
| | | { |
| | | var itemlist = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE).ToList(); |
| | | var itemlist = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == wmstask.S_CNTR_CODE).ToList(); |
| | | if (itemlist.Count > 0) |
| | | { |
| | | var url = Settings.MoboxSeverUrl + "inventory/AddChange"; |
| | | //仓库量表升量 |
| | | var req = new AddChangeModel { op_type = 4 }; |
| | | //库区量表升量 |
| | | var req2 = new AddChangeModel { op_type = 7 }; |
| | | //仓库量表降量 |
| | | var req = new AddChangeModel { op_type = 8 }; |
| | | //库区量表降量 |
| | | var req2 = new AddChangeModel { op_type = 9 }; |
| | | itemlist.ForEach(a => |
| | | { |
| | | LogHelper.Info($"填充数据"); |
| | | LogHelper.Info($"减仓库量表数据 仓库{task.S_END_WH} 物料编码{a.S_ITEM_CODE} 物料名称{a.S_ITEM_NAME} 数量{a.F_QTY}"); |
| | | LogHelper.Info($"减仓库量表数据 仓库{wmstask.S_START_WH} 物料编码{a.S_ITEM_CODE} 物料名称{a.S_ITEM_NAME} 数量{a.F_QTY}"); |
| | | req.item_info.Add(new AddChangeModel.itemModel |
| | | { |
| | | wh_code = wmstask.S_START_WH, |
| | |
| | | item_name = a.S_ITEM_NAME, |
| | | qty = a.F_QTY |
| | | }); |
| | | LogHelper.Info($"减库区量表数据 库区{task.S_END_AREA} 物料编码{a.S_ITEM_CODE} 物料名称{a.S_ITEM_NAME} 数量{a.F_QTY}"); |
| | | LogHelper.Info($"减库区量表数据 库区{wmstask.S_START_AREA} 物料编码{a.S_ITEM_CODE} 物料名称{a.S_ITEM_NAME} 数量{a.F_QTY}"); |
| | | req2.item_info.Add(new AddChangeModel.itemModel |
| | | { |
| | | wh_code = wmstask.S_START_WH, |
| | |
| | | } |
| | | |
| | | } |
| | | else LogHelper.Info($"托盘{task.S_CNTR_CODE} 在容器货品明细中找不到数据"); |
| | | else LogHelper.Info($"托盘{wmstask.S_CNTR_CODE} 在容器货品明细中找不到数据"); |
| | | } |
| | | else LogHelper.Info($"未找到任务{task.S_CODE} 对应的作业"); |
| | | else LogHelper.Info($"未找到任务{wmstask.S_CODE} 对应的任务"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error($"仓库降量异常 异常信息={ex.Message}", ex); |
| | | result = false; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |