| | |
| | | using Microsoft.AspNetCore.Http; |
| | | using Rhea.Common; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Net.WebSockets; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Tiger.IBusiness; |
| | | using Tiger.Model; |
| | | using Tiger.Model.Entitys.MES.Position; |
| | | using static Tiger.Business.Biz; |
| | | |
| | | namespace Tiger.Business.MES |
| | |
| | | /// <summary> |
| | | /// 从工单批次字典中获取一个工单批次对象 |
| | | /// </summary> |
| | | /// <param name="batchNo"></param> |
| | | /// <param name="workorder"></param> |
| | | /// <param name="lineCode"></param> |
| | | /// <returns></returns> |
| | | public static WorkBatch GetBatch(string batchNo, string lineCode = null) |
| | | public static WorkBatch GetBatch(string workorder, string lineCode) |
| | | { |
| | | return WoBatchDic.FirstOrDefault(q => q.Value.Batch.BATCH_NO == batchNo && (lineCode.IsNullOrEmpty() || q.Value.Batch.ACT_LINE == lineCode)).Value; |
| | | return WoBatchDic.FirstOrDefault(q => q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode).Value; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断工单批次是否存在于工单批次字典中 |
| | | /// </summary> |
| | | /// <param name="batchNo"></param> |
| | | /// <param name="workorder"></param> |
| | | /// <param name="lineCode"></param> |
| | | /// <returns></returns> |
| | | public static bool ExistsBatch(string batchNo, string lineCode = null) |
| | | public static bool ExistsBatch(string workorder, string lineCode) |
| | | { |
| | | return WoBatchDic.Any(q => q.Value.Batch.BATCH_NO == batchNo && (lineCode.IsNullOrEmpty() || q.Value.Batch.ACT_LINE == lineCode)); |
| | | return WoBatchDic.Any(q => q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode); |
| | | } |
| | | |
| | | /// 从工单批次字典中删除一个工单批次对象 |
| | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取SN的下一个工序节点列表 |
| | | /// </summary> |
| | | /// <param name="sn"></param> |
| | | /// <returns></returns> |
| | | public static ApiAction<List<MES_WO_NODE>> GetSnNextNodes(string sn) |
| | | { |
| | | var action = new ApiAction<List<MES_WO_NODE>>(new List<MES_WO_NODE>()); |
| | | try |
| | | { |
| | | var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => (q.SN == sn || q.FLOW_SN == sn || q.TRAY_SN == sn || q.INNER_SN == sn || q.CARTON_SN == sn || q.PALLET_SN == sn)).ToList(); |
| | | if (wipSNs.IsNullOrEmpty()) |
| | | { |
| | | var woSNs = Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q => (q.SN == sn || q.TRAY_SN == sn || q.OUTER_SN == sn)).ToList(); |
| | | //查找到条码已绑定的工单 |
| | | if (!woSNs.IsNullOrEmpty()) |
| | | { |
| | | foreach (var woSN in woSNs) |
| | | { |
| | | var wipSN = new MES_WIP_DATA() |
| | | { |
| | | SN = sn, |
| | | FLOW_SN = sn, |
| | | STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), |
| | | ITEM_CODE = woSN.ITEM_CODE, |
| | | WORK_ORDER = woSN.WORK_ORDER, |
| | | BATCH_NO = woSN.BATCH_NO, |
| | | HOLD_FLAG = "N", |
| | | FINISHED_FLAG = "N", |
| | | INV_FLAG = "N", |
| | | DFT_FLAG = "N", |
| | | DFT_COUNT = 0, |
| | | }; |
| | | wipSNs.Add(wipSN); |
| | | } |
| | | } |
| | | } |
| | | if (wipSNs.IsNullOrEmpty()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | //action.LocaleMsg = new($"找不到条码[{sn}]的生产信息", sn); |
| | | action.LocaleMsg = new("MES.WoContext.SnNotFound", sn); |
| | | } |
| | | else |
| | | { |
| | | if (!WoBatchDic.Any(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER)) |
| | | { |
| | | var wb = new WorkBatch(wipSNs.First().WORK_ORDER).Init(""); |
| | | WoBatchDic.Add(wb.Batch.BATCH_NO, wb); |
| | | } |
| | | var wo = WoBatchDic.FirstOrDefault(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER).Value; |
| | | action.Data = wo.GetNextNodes(wipSNs.First()); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //action.CatchExceptionWithLog(ex, $"获取条码[{sn}]的下一个工序节点列表异常"); |
| | | action.CatchExceptionWithLog(ex, Biz.L("MES.WoContext.GetSnNextNodesException", sn)); |
| | | } |
| | | return action; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置当前条码的工序信息 |
| | | /// </summary> |
| | | public static ApiAction<OperInfo> GetSnOperInfo(string sn) |
| | | { |
| | | var action = new ApiAction<OperInfo>(new OperInfo()); |
| | | try |
| | | { |
| | | var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => (q.SN == sn || q.FLOW_SN == sn || q.TRAY_SN == sn || q.INNER_SN == sn || q.CARTON_SN == sn || q.PALLET_SN == sn)).ToList(); |
| | | if (wipSNs.IsNullOrEmpty()) |
| | | { |
| | | var woSNs = Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q => (q.SN == sn || q.TRAY_SN == sn || q.OUTER_SN == sn)).ToList(); |
| | | //查找到条码已绑定的工单 |
| | | if (!woSNs.IsNullOrEmpty()) |
| | | { |
| | | foreach (var woSN in woSNs) |
| | | { |
| | | var wipSN = new MES_WIP_DATA() |
| | | { |
| | | SN = sn, |
| | | FLOW_SN = sn, |
| | | STATUS = MES_WIP_DATA.STATUSs.Init.GetValue(), |
| | | ITEM_CODE = woSN.ITEM_CODE, |
| | | WORK_ORDER = woSN.WORK_ORDER, |
| | | BATCH_NO = woSN.BATCH_NO, |
| | | HOLD_FLAG = "N", |
| | | FINISHED_FLAG = "N", |
| | | INV_FLAG = "N", |
| | | DFT_FLAG = "N", |
| | | DFT_COUNT = 0, |
| | | }; |
| | | wipSNs.Add(wipSN); |
| | | } |
| | | } |
| | | } |
| | | if (wipSNs.IsNullOrEmpty()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | //action.LocaleMsg = new($"找不到条码[{sn}]的生产信息", sn); |
| | | action.LocaleMsg = new("MES.WoContext.SnNotFound", sn); |
| | | } |
| | | else |
| | | { |
| | | if (!WoBatchDic.Any(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER)) |
| | | { |
| | | var wb = new WorkBatch(wipSNs.First().WORK_ORDER).Init(""); |
| | | WoBatchDic.Add(wb.Batch.BATCH_NO, wb); |
| | | } |
| | | var wo = WoBatchDic.FirstOrDefault(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER).Value; |
| | | action.Data = new() |
| | | { |
| | | CurNode = wipSNs.First().NODE_NAME, |
| | | NextNode = string.Join(",", wo.GetNextNodes(wipSNs.First()).Select(q => q.NODE_NAME)), |
| | | }; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | //action.CatchExceptionWithLog(ex, $"获取条码[{sn}]的工序信息异常"); |
| | | action.CatchExceptionWithLog(ex, Biz.L("MES.WoContext.GetSnOperInfoException", sn)); |
| | | } |
| | | return action; |
| | | } |
| | | #endregion |
| | | } |
| | | } |