| | |
| | | public MES_WO_ACTION Setting { get; set; } |
| | | #endregion |
| | | public List<BAS_PROD_BOM> Boms { get; set; } = new(); |
| | | public Dictionary<string, List<BAS_ITEM>> SubItemDic { get; set; } = new(); |
| | | public AssemblyInfo CurAssembly { get; set; } = new(); |
| | | #endregion Propertys & Variables |
| | | |
| | |
| | | { |
| | | var subs = bom.SUB_CODE.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); |
| | | var surItems = Biz.Db.Queryable<BAS_ITEM>().Where(q => subs.Contains(q.ITEM_CODE) && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).ToList(); |
| | | if (!SubItemDic.ContainsKey(assy.ITEM_CODE)) |
| | | { |
| | | SubItemDic.Add(assy.ITEM_CODE, surItems); |
| | | } |
| | | foreach (var sub in surItems) |
| | | { |
| | | if (!item.SubItems.Any(q => q.ITEM_CODE == sub.ITEM_CODE)) |
| | | { |
| | | item.SubItems.Add(sub); |
| | | } |
| | | } |
| | | } |
| | | CurAssembly.Items.Add(item); |
| | | } |
| | | } |
| | | |
| | | CurStep.Message = Biz.L("扫描上料物料"); |
| | | CurStep.Status = StepStatus.Normal; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | |
| | | //如果返回成功则认为当前行为可以开始执行,否则返回失败 |
| | | CurStep.Message = Biz.L("等待上料"); |
| | | CurStep.Status = StepStatus.Normal; |
| | | action.IsSuccessed = false; |
| | | action.Data.ShortMsg = new("等待上料", ShortMessage.Types.Normal); |
| | | return action; |
| | |
| | | foreach (var item in CurAssembly.Items.Where(q => !q.IsFinished)) |
| | | { |
| | | var isOK = true; |
| | | var matchItem = item.ItemInfo; |
| | | //根据条码规则验证上料是否正确 |
| | | if (!item.RuleCode.IsNullOrEmpty()) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | //主料验证不通过,则尝试验证替代料 |
| | | if (!isOK && item.SubItems.Any()) |
| | | { |
| | | foreach (var subItem in item.SubItems) |
| | | { |
| | | if (!subItem.RULE_CODE.IsNullOrEmpty()) |
| | | { |
| | | if (!Biz.CodeRule[subItem.RULE_CODE].IsNullOrEmpty()) |
| | | { |
| | | var result = Biz.CodeRule[item.RuleCode].Verify(input.SN); |
| | | //只要有一个替代料通过验证则可以上料 |
| | | if (result.IsSuccessed) |
| | | { |
| | | isOK = true; |
| | | matchItem = subItem; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //验证通过则保存上料信息 |
| | | if (isOK) |
| | | { |
| | |
| | | WIP_ID = wipSn.ID, |
| | | SN = input.SN, |
| | | PROD_SN = wipSn.SN, |
| | | ITEM_CODE = item.ItemInfo.ITEM_CODE, |
| | | ITEM_CODE = matchItem.ITEM_CODE, |
| | | QTY = 1, |
| | | UNIT = item.ItemInfo.UNIT, |
| | | UNIT = matchItem.UNIT, |
| | | WORK_ORDER = wipSn.WORK_ORDER, |
| | | BATCH_NO = wipSn.BATCH_NO, |
| | | ROT_CODE = wipSn.ROT_CODE, |
| | |
| | | WIP_ID = wipSn.ID, |
| | | SN = input.SN, |
| | | PROD_SN = wipSn.SN, |
| | | ITEM_CODE = item.ItemInfo.ITEM_CODE, |
| | | ITEM_CODE = matchItem.ITEM_CODE, |
| | | QTY = 1, |
| | | UNIT = item.ItemInfo.UNIT, |
| | | UNIT = matchItem.UNIT, |
| | | WORK_ORDER = wipSn.WORK_ORDER, |
| | | BATCH_NO = wipSn.BATCH_NO, |
| | | ROT_CODE = wipSn.ROT_CODE, |
| | |
| | | } |
| | | } |
| | | |
| | | CurStep.Message = Biz.L("上料成功"); |
| | | CurStep.Status = StepStatus.Success; |
| | | action.IsSuccessed = true; |
| | | action.Data.ShortMsg = new("上料成功", ShortMessage.Types.Success); |
| | | action.Data.Data = CurAssembly; |
| | | //action.LocaleMsg = new Locale($"扫描物料[{item.ItemInfo.ITEM_NAME}({item.ItemInfo.ITEM_CODE})的条码[{input.SN}]成功,请继续上料"); |
| | | action.LocaleMsg = new Locale("MES.WorkAction.Assembly.LoadSuccess", item.ItemInfo.ITEM_NAME, item.ItemInfo.ITEM_CODE); |
| | | //action.LocaleMsg = new Locale($"扫描物料[{matchItem.ITEM_NAME}({matchItem.ITEM_CODE})的条码[{input.SN}]成功,请继续上料"); |
| | | action.LocaleMsg = new Locale("MES.WorkAction.Assembly.LoadSuccess", matchItem.ITEM_NAME, matchItem.ITEM_CODE); |
| | | |
| | | //上料完成 |
| | | if (CurAssembly.IsFinished) |
| | |
| | | } |
| | | } |
| | | //都没有物料验证通过,则返回错误信息 |
| | | CurStep.Message = Biz.L("上料失败"); |
| | | CurStep.Status = StepStatus.Error; |
| | | action.IsSuccessed = false; |
| | | action.Data.ShortMsg = new("上料失败", ShortMessage.Types.Failed); |
| | | //action.LocaleMsg = new($"条码[{input.SN}]验证失败,不是以下物料的条码:{string.Join(",", CurAssembly.Items.Where(q => !q.IsFinished).Select(q => $"{q.ItemInfo.ITEM_NAME}({q.ItemInfo.ITEM_CODE})"))}"); |
| | |
| | | } |
| | | catch (System.Exception ex) |
| | | { |
| | | CurStep.Message = Biz.L("上料异常"); |
| | | CurStep.Status = StepStatus.Error; |
| | | action.Data.ShortMsg = new("上料异常", ShortMessage.Types.Exception); |
| | | action.CatchExceptionWithLog(ex, $"上料行为:验证条码[{input.SN}]并保存数据异常"); |
| | | action.IsSuccessed = false; |
| | |
| | | ACT_SN = wipSn.SN, |
| | | ACT_VALUE_1 = CurAssembly.ToJson(), |
| | | ACT_RESULT = "Y", |
| | | ELAPSED_TIME = CurStep.GetElapsedTime().TotalMilliseconds.ToInt64(), |
| | | TRACE_INFO = $"以下物料上料完成:{string.Join(",", CurAssembly.Items.Select(q => $"{q.ItemInfo.ITEM_NAME}({q.ItemInfo.ITEM_CODE})"))}", |
| | | }; |
| | | wipActs.Add(wipAct); |
| | |
| | | }; |
| | | |
| | | IsFinished = true; |
| | | CurStep.Message = Biz.L("上料完成"); |
| | | CurStep.Status = StepStatus.Finished; |
| | | action.Data.ShortMsg = new("上料完成", ShortMessage.Types.Success); |
| | | //action.LocaleMsg = new($"以下物料上料完成:{string.Join(",", CurAssembly.Items.Select(q => $"{q.ItemInfo.ITEM_NAME}({q.ItemInfo.ITEM_CODE})"))}"); |