| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net6.0</TargetFramework> |
| | |
| | | <ProjectReference Include="..\Tiger.IBusiness\Tiger.IBusiness.csproj" /> |
| | | </ItemGroup> |
| | | |
| | | <ItemGroup> |
| | | <Folder Include="Extensions\" /> |
| | | </ItemGroup> |
| | | |
| | | <Target Name="PostBuild" AfterTargets="PostBuildEvent"> |
| | | <Exec Command="xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).dll $(SolutionDir)Tiger.Api\$(OutDir)
xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).pdb $(SolutionDir)Tiger.Api\$(OutDir)
xcopy /r/y/i $(ProjectDir)$(OutDir)BizSettings.json $(SolutionDir)Tiger.Api\$(OutDir)" /> |
| | | </Target> |
| | |
| | | using System.Threading.Tasks; |
| | | using Tiger.Model; |
| | | using Tiger.Model.Entitys.MES.Position; |
| | | using static System.Net.Mime.MediaTypeNames; |
| | | |
| | | namespace Tiger.Business.MES.Transaction |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.NodeAct.ACT_NAME; |
| | | result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; |
| | | result.Data.NextStepID = CurStep?.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps); |
| | | } |
| | | } |
| | | //妿ææå·¥æ¥é½å®æ |
| | |
| | | Steps.Clear(); |
| | | var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this) |
| | | { |
| | | NodeID = curNode.ID, |
| | | Sequence = Steps.Count + 1, |
| | | Node = curNode, |
| | | DBSubmitAction = () => |
| | |
| | | NextSteps.Clear(); |
| | | NextSteps.Add(next); |
| | | //æ ¹æ®åç»å·¥æ¥è¿åApiAction |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | result.Data.NextStepID = next.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, next.ID, IsFinishAllSteps); |
| | | |
| | | //æ ¹æ®å·¥åºèç¹å·¥æ¥çåºå·è¿åç¸åºçæä½æç¤º |
| | | switch (next.Sequence) |
| | |
| | | //已宿ææå·¥æ¥ |
| | | else |
| | | { |
| | | action.Data.IsFinished = IsFinishAllSteps; |
| | | action.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | action.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | action.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | action.Data.NextStepID = ""; |
| | | action.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps); |
| | | action = DoIfFinishAllSteps(action); |
| | | } |
| | | } |
| | |
| | | } |
| | | else |
| | | { |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.NodeAct.ACT_NAME; |
| | | result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; |
| | | result.Data.NextStepID = CurStep?.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps); |
| | | } |
| | | } |
| | | //妿ææå·¥æ¥é½å®æ |
| | |
| | | Steps.Clear(); |
| | | var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this) |
| | | { |
| | | NodeID = curNode.ID, |
| | | Sequence = Steps.Count + 1, |
| | | Node = curNode, |
| | | DBSubmitAction = () => |
| | |
| | | NextSteps.Clear(); |
| | | NextSteps.Add(next); |
| | | //æ ¹æ®åç»å·¥æ¥è¿åApiAction |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | result.Data.NextStepID = next.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, next.ID, IsFinishAllSteps); |
| | | |
| | | //æ ¹æ®å·¥åºèç¹å·¥æ¥çåºå·è¿åç¸åºçæä½æç¤º |
| | | switch (next.Sequence) |
| | |
| | | //已宿ææå·¥æ¥ |
| | | else |
| | | { |
| | | action.Data.IsFinished = IsFinishAllSteps; |
| | | action.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | action.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | action.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | action.Data.NextStepID = ""; |
| | | action.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps); |
| | | action = DoIfFinishAllSteps(action); |
| | | } |
| | | } |
| | |
| | | { |
| | | var next = new WorkStep(IWorkStep.Types.Action, this) |
| | | { |
| | | NodeID = act.ID, |
| | | Sequence = parent.Sequence + 1, |
| | | Node = parent.Node, |
| | | NodeAct = act, |
| | |
| | | NextSteps = GetNextSteps(CurStep); |
| | | //è¿åç»æå°å®¢æ·ç«¯ |
| | | result = canBegin; |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.NodeAct.ACT_NAME; |
| | | result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; |
| | | result.Data.NextStepID = CurStep?.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps); |
| | | |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | //没æå¯ä»¥ç´æ¥å¼å§çåç»å·¥æ¥ï¼æ ¹æ®åç»å·¥æ¥è¿åApiAction |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; |
| | | result.Data.NextStepID = ""; |
| | | result.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps); |
| | | |
| | | //没æå¯ä»¥ç´æ¥å¼å§çåç»å·¥æ¥ï¼æ ¹æ®åç»å¯æ§è¡å·¥æ¥å表è¿åç¸åºçæä½æç¤º |
| | | if (NextSteps.Count == 1) |
| | |
| | | } |
| | | else |
| | | { |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.NodeAct.ACT_NAME; |
| | | result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; |
| | | result.Data.NextStepID = CurStep?.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps); |
| | | } |
| | | } |
| | | //妿ææå·¥æ¥é½å®æ |
| | |
| | | Steps.Clear(); |
| | | var curStep = new Biz.WorkStep(IWorkStep.Types.Node, this) |
| | | { |
| | | NodeID = curNode.ID, |
| | | Sequence = Steps.Count + 1, |
| | | Node = curNode, |
| | | DBSubmitAction = () => |
| | |
| | | NextSteps.Clear(); |
| | | NextSteps.Add(next); |
| | | //æ ¹æ®åç»å·¥æ¥è¿åApiAction |
| | | result.Data.IsFinished = IsFinishAllSteps; |
| | | result.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | result.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | result.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | result.Data.NextStepID = next.ID; |
| | | result.Data.SetValue(CurBatch, CurStep, next.ID, IsFinishAllSteps); |
| | | |
| | | //æ ¹æ®å·¥åºèç¹å·¥æ¥çåºå·è¿åç¸åºçæä½æç¤º |
| | | switch (next.Sequence) |
| | |
| | | //已宿ææå·¥æ¥ |
| | | else |
| | | { |
| | | action.Data.IsFinished = IsFinishAllSteps; |
| | | action.Data.CurWO = CurBatch.WO.ORDER_NO; |
| | | action.Data.CurBatch = CurBatch.Batch.BATCH_NO; |
| | | action.Data.CurNode = CurStep?.Node.NODE_NAME; |
| | | action.Data.NextStepID = ""; |
| | | action.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps); |
| | | action = DoIfFinishAllSteps(action); |
| | | } |
| | | } |
ÎļþÃû´Ó Tiger.Business.WMS/Extensions/JsonExtention.cs ÐÞ¸Ä |
| | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public static class JsonExtention |
| | | public static class JsonExtension |
| | | { |
| | | /// <summary> |
| | | /// |
| | |
| | | using Rhea.Common; |
| | | using System.Net; |
| | | using System.Linq; |
| | | using Newtonsoft.Json; |
| | | using Tiger.IBusiness; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Tiger.Business.MES; |
| | | using Org.BouncyCastle.Ocsp; |
| | | using Tiger.Model.Entitys.MES.Position; |
| | | using static System.Net.Mime.MediaTypeNames; |
| | | |
| | | namespace Tiger.Business |
| | | { |
| | |
| | | /// <returns></returns> |
| | | public ApiAction<SubmitOutput> CheckStatus() |
| | | { |
| | | var action = new ApiAction<SubmitOutput>(new SubmitOutput(),true); |
| | | var action = new ApiAction<SubmitOutput>(new SubmitOutput(), true); |
| | | |
| | | WO = Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == OrderNo).First(); |
| | | Batch = Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(q => q.ORDER_NO == OrderNo && q.ACT_LINE == LineCode).First(); |
| | |
| | | if (Batch.STATUS != BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() && Batch.STATUS != BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | //action.LocaleMsg = new($"å·¥åæ¹æ¬¡[{Batch.BATCH_NO}]ç¶æ[{Batch.STATUS.GetEnum<BIZ_MES_WO_BATCH.STATUSs>().GetName()}]䏿¯å
许ç产çç¶æï¼è¯·æ«æå
许ç产çäº§åæ¡ç "); |
| | | action.LocaleMsg = new("MES.WorkBatch.WoBatchStatusCanNotWork", Batch.BATCH_NO, Batch.STATUS.GetEnum<BIZ_MES_WO_BATCH.STATUSs>().GetName()); |
| | | } |
| | |
| | | if (WO.STATUS != BIZ_MES_WO.STATUSs.Release.GetValue() && WO.STATUS != BIZ_MES_WO.STATUSs.Working.GetValue()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | //action.LocaleMsg = new($"å·¥å[{WO.ORDER_NO}]ç¶æ[{Batch.STATUS.GetEnum<BIZ_MES_WO.STATUSs>().GetName()}]䏿¯å
许ç产çç¶æï¼è¯·æ«æå
许ç产çäº§åæ¡ç "); |
| | | action.LocaleMsg = new("MES.WorkBatch.WoStatusCanNotWork", WO.ORDER_NO, Batch.STATUS.GetEnum<BIZ_MES_WO.STATUSs>().GetName()); |
| | | } |
| | |
| | | else |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | var nextList = Nodes.Where(q => q.IS_FIRST_NODE == "Y"); |
| | | action.LocaleMsg = new("MES.WorkBatch.GotoNextNodeException", wipSN.SN, nextNode.NODE_NAME, string.Join(", ", nextList.Select(q => q.NODE_NAME + (q.CAN_SKIP == "Y" ? $"({T(L("MES.WorkBatch.Optional"), input.Locale)})" : "")))); |
| | | return action; |
| | |
| | | else |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | var nextList = reflowNodes.Where(q => wipSN.REFLOW_NODE.IsNullOrEmpty() || wipSN.REFLOW_NODE == q.NODE_NAME); |
| | | action.LocaleMsg = new("MES.WorkBatch.ReflowToNodeException", nextNode.NODE_NAME, wipSN.SN, curNode.NODE_NAME, string.Join(", ", nextList.Select(q => q.NODE_NAME + (q.CAN_SKIP == "Y" ? $"({T(L("MES.WorkBatch.Optional"), input.Locale)})" : "")))); |
| | | return action; |
| | |
| | | && curSetting.ALLOW_DFT_IN != "Y" && nextNode.Operation.OPER_TYPE != MES_OPERATION.OPER_TYPEs.Repair.GetValue()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | action.LocaleMsg = new("MES.WorkBatch.PleaseGotoRepair", curNode.NODE_NAME, wipSN.SN); |
| | | return action; |
| | | } |
| | |
| | | if (nextNodes.Any(q => NodeSets.Any(s => s.NODE_ID == q.ID && s.IS_ACTIVE == "Y" && s.CAN_SKIP != "Y"))) |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | var nextList = nextNodes.Where(q => NodeSets.Any(s => s.NODE_ID == q.ID && s.IS_ACTIVE == "Y" && s.CAN_SKIP != "Y")); |
| | | action.LocaleMsg = new("MES.WorkBatch.GotoNextNodeException", wipSN.SN, nextNode.NODE_NAME, string.Join(", ", nextList.Select(q => q.NODE_NAME + (q.CAN_SKIP == "Y" ? $"({T(L("MES.WorkBatch.Optional"), input.Locale)})" : "")))); |
| | | return action; |
| | |
| | | else |
| | | { |
| | | action.IsSuccessed = false; |
| | | action.Data.CurWO = WO.ORDER_NO; |
| | | action.Data.CurBatch = Batch.BATCH_NO; |
| | | action.Data.SetValue(this, null); |
| | | var nextList = nextNodes.Where(q => NodeSets.Any(s => s.NODE_ID == q.ID && s.IS_ACTIVE == "Y")); |
| | | action.LocaleMsg = new("MES.WorkBatch.GotoNextNodeException", wipSN.SN, nextNode.NODE_NAME, string.Join(", ", nextList.Select(q => q.NODE_NAME + (q.CAN_SKIP == "Y" ? $"({T(L("MES.WorkBatch.Optional"), input.Locale)})" : "")))); |
| | | return action; |
| | |
| | | |
| | | #region Propertys & Variables |
| | | public string ID { get; set; } = Guid.NewGuid().ToString("N"); |
| | | public string NodeID { get; set; } |
| | | |
| | | public IWorkStep.Types Type { get; set; } |
| | | public MES_WO_NODE Node { get; set; } |
| | | public MES_WO_NODE_ACT NodeAct { get; set; } |
| | |
| | | public IWorkAction CurAction { get; set; } |
| | | public int Sequence { get; set; } |
| | | public List<string> PrepNodeIDs { get; set; } = new(); |
| | | public string NodeID => Type == IWorkStep.Types.Action ? NodeAct.ID : Node.ID; |
| | | public string NodeName => Type == IWorkStep.Types.Action ? NodeAct.ACT_NAME : Node.NODE_NAME; |
| | | private bool _IsFinished = false; |
| | | public bool IsFinished |
| | | { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using Rhea.Common; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Tiger.Model.Entitys.MES.Position; |
| | | |
| | | namespace Tiger.IBusiness |
| | | { |
| | | public static class ModelExtension |
| | | { |
| | | public static void SetValue(this SubmitOutput value, IWorkBatch CurBatch, IWorkStep CurStep, string NextStepID = "", bool IsNodeFinished = false) |
| | | { |
| | | value.IsFinished = IsNodeFinished; |
| | | value.CurWO = CurBatch?.WO; |
| | | value.CurBatch = CurBatch?.Batch; |
| | | value.CurNode = CurStep?.NodeName; |
| | | value.StepActCode = CurStep?.NodeAct?.ACT_CODE; |
| | | value.NextStepID = NextStepID; |
| | | } |
| | | |
| | | public static void SetData(this SubmitOutput value, object Data) |
| | | { |
| | | value.Data = Data; |
| | | } |
| | | |
| | | public static void SetData<T>(this SubmitOutput value, T Data) |
| | | { |
| | | value.Data = Data; |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | #region Propertys & Variables |
| | | public string ID { get; set; } |
| | | |
| | | public Types Type { get; set; } |
| | | public int Sequence { get; set; } |
| | | public MES_WO_NODE Node { get; set; } |
| | |
| | | public IPosition CurPosition { get; set; } |
| | | public IWorkAction CurAction { get; set; } |
| | | public List<string> PrepNodeIDs { get; set; } |
| | | public string NodeID { get; } |
| | | public string NodeName { get; } |
| | | public bool IsFinished { get; set; } |
| | | public Action DBSubmitAction { get; set; } |
| | | #endregion Propertys & Variables |
| | |
| | | /// </summary> |
| | | public bool IsFinished { get; set; } = false; |
| | | /// <summary> |
| | | /// å½åæä½çå·¥å |
| | | /// å½åæä½çå·¥å对象 |
| | | /// </summary> |
| | | public string CurWO { get; set; } |
| | | public BIZ_MES_WO CurWO { get; set; } |
| | | /// <summary> |
| | | /// å½åæä½çå·¥åæ¹æ¬¡ |
| | | /// å½åæä½çå·¥åæ¹æ¬¡å¯¹è±¡ |
| | | /// </summary> |
| | | public string CurBatch { get; set; } |
| | | public BIZ_MES_WO_BATCH CurBatch { get; set; } |
| | | /// <summary> |
| | | /// å½åæä½çèç¹åç§° |
| | | /// </summary> |
| | |
| | | /// å½åæä½è¿åçæ°æ® |
| | | /// </summary> |
| | | public object Data { get; set; } |
| | | |
| | | } |
| | | |
| | | public class DefectOutput |