using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tiger.IBusiness;
using Tiger.IBusiness.MES.WorkAction;
using Tiger.Model;
using Tiger.Model.Entitys.MES.Position;
namespace Tiger.Business.MES.WorkAction
{
public class WipExtInfo : IWipExtInfo
{
#region Propertys & Variables
#region 固定写法,工序中的必要信息
public bool IsFinished { get; set; } = false;
public IWorkStep CurStep { get; set; }
public IPosition CurPosition { get; set; }
public MES_WO_NODE_ACT NodeAct { get; set; }
public MES_WO_ACTION Setting { get; set; }
#endregion
public BAS_WIP_EXT ExtInfo { get; set; }
public MES_WIP_EXT CurWipExt { get; set; }
#endregion Propertys & Variables
#region Functions
///
/// 初始化工序行为
///
///
public void Init(IWorkStep curStep, IPosition position, MES_WO_NODE_ACT nodeAct, MES_WO_ACTION setting)
{
#region 固定写法,给默认变量赋值
CurStep = curStep;
CurPosition = position;
NodeAct = nodeAct;
Setting = setting;
#endregion
//获取扩展字段定义
var seq = Setting.ITEM_CODE.ToInt32();
ExtInfo = Biz.Db.Queryable().Where(q => q.SEQ == seq).First();
//获取当前SN的扩展信息
CurWipExt = Biz.Db.Queryable().Where(q => q.SN == CurPosition.CurWipSN.SN).First() ?? new ()
{
AUTH_ORG = CurPosition.CurWipSN.AUTH_ORG,
AUTH_PROD = CurPosition.CurWipSN.AUTH_PROD,
SN = CurPosition.CurWipSN.SN,
};
}
///
/// 获取行为开始的提示信息
///
///
public Locale GetBeginMsg()
{
var msg = new Locale("MES.WorkAction.WipExtInfo.BeginMsg", ExtInfo.FIELD_NAME);
//var msg = new Locale($"请扫描产品[{CurPosition.CurWipSN.SN}]需要绑定的[{ExtInfo.FIELD_NAME}]标签条码");
return msg;
}
///
/// 尝试开始执行工序行为
///
///
public ApiAction TryBegin(SubmitInput input)
{
var action = new ApiAction(new SubmitOutput());
action.LocaleMsg = GetBeginMsg();
//如果返回成功则认为当前行为可以开始执行,否则返回失败
action.IsSuccessed = true;
return action;
}
///
/// 工序行为提交数据
///
///
public ApiAction Submit(SubmitInput input)
{
var action = new ApiAction(new SubmitOutput());
action = SaveExtInfo(input, action);
//上料数据保存失败
if (!action.IsSuccessed)
{
//如果行为设置为出错需要重置工序操作
if (NodeAct.NEED_RESET == "Y")
{
CurPosition.ResetNode();
}
}
return action;
}
public ApiAction SaveExtInfo(SubmitInput input, ApiAction action)
{
try
{
var isOK = true;
//验证扫描的条码是否SN的扩展信息的标签
if (input.SN.IsNullOrEmpty())
{
action.IsSuccessed = isOK = false;
//action.LocaleMsg = new Locale($"错误:[{ExtInfo.FIELD_NAME}]标签条码不能为空,请重新扫描");
action.LocaleMsg = new Locale("MES.WorkAction.WipExtInfo.SnEmptyError", ExtInfo.FIELD_NAME);
}
if (input.SN == CurPosition.CurWipSN.SN)
{
action.IsSuccessed = isOK = false;
//action.LocaleMsg = new Locale($"错误:扫描到产品条码[{input.SN}],请重新扫描[{ExtInfo.FIELD_NAME}]标签条码");
action.LocaleMsg = new Locale("MES.WorkAction.WipExtInfo.ScanProdSnError", input.SN, ExtInfo.FIELD_NAME);
}
//验证通过则保存上料信息
if (isOK)
{
CurWipExt.GetType().GetProperty($"FIELD_{ExtInfo.SEQ.ToString("00")}")?.SetValue(CurWipExt, input.SN);
action = End();
}
//都没有物料验证通过,则返回错误信息
}
catch (System.Exception ex)
{
action.CatchExceptionWithLog(ex, $"扩展信息绑定行为:产品[{CurPosition.CurWipSN.SN}]绑定[{ExtInfo.FIELD_NAME}]标签条码[{input.SN}]保存异常");
action.IsSuccessed = false;
//action.LocaleMsg = new($"产品[{CurPosition.CurWipSN.SN}]绑定[{ExtInfo.FIELD_NAME}]标签条码[{input.SN}]保存异常,工序已重置,请重新扫描进站产品条码");
action.LocaleMsg = new("MES.WorkAction.WipExtInfo.SaveExtInfoException", CurPosition.CurWipSN.SN, ExtInfo.FIELD_NAME, input.SN);
CurPosition.ResetNode();
}
return action;
}
///
/// 结束执行工序行为
///
///
public ApiAction End()
{
var action = new ApiAction(new SubmitOutput());
//记录行为操作记录
var wipAct = new MES_WIP_ACT()
{
AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
AUTH_PROD = CurPosition.CurLine.LINE_CODE,
HIS_ID = CurPosition.CurWipSNHis.ID,
SN = CurPosition.CurWipSN.SN,
STATUS = CurPosition.CurWipSN.STATUS,
ITEM_CODE = CurPosition.CurWipSN.ITEM_CODE,
WORK_ORDER = CurPosition.CurWipSN.WORK_ORDER,
BATCH_NO = CurPosition.CurWipSN.BATCH_NO,
ROT_CODE = CurPosition.CurWipSN.ROT_CODE,
NODE_ID = CurPosition.CurWipSN.NODE_ID,
NODE_NAME = CurPosition.CurWipSN.NODE_NAME,
ACT_ID = NodeAct.ID,
ACT_NAME = NodeAct.ACT_NAME,
FTY_CODE = CurPosition.CurWipSN.FTY_CODE,
WS_CODE = CurPosition.CurWipSN.WS_CODE,
LINE_CODE = CurPosition.CurWipSN.LINE_CODE,
POST_CODE = CurPosition.CurWipSN.POST_CODE,
OPER_CODE = CurPosition.CurWipSN.OPER_CODE,
SEGMENT = CurPosition.CurWipSN.SEGMENT,
TRAY_SN = CurPosition.CurWipSN.TRAY_SN,
OPERATION_TIME = DateTime.Now,
SFTS_CODE = CurPosition.CurWipSN.SFTS_CODE,
SFT_CODE = CurPosition.CurWipSN.SFT_CODE,
PRD_CODE = CurPosition.CurWipSN.PRD_CODE,
ACT_TYPE = NodeAct.ACT_TYPE,
ACT_SN = CurPosition.CurWipSN.SN,
ACT_VALUE_1 = CurWipExt.ToJson(),
ACT_RESULT = "Y",
TRACE_INFO = $"产品[{CurPosition.CurWipSN.SN}]绑定[{ExtInfo.FIELD_NAME}]标签条码[{CurWipExt.GetType().GetProperty($"FIELD_{ExtInfo.SEQ.ToString("00")}")?.GetValue(CurWipExt)?.ToString()}]保存成功",
};
//保存数据
CurStep.DBSubmitAction = () =>
{
var db = CurPosition.GetCommitDB();
db.Storageable(wipAct, CurPosition.UserCode).ExecuteCommand();
db.Storageable(CurWipExt, CurPosition.UserCode).ExecuteCommand();
};
IsFinished = true;
//action.LocaleMsg = new($"产品[{CurPosition.CurWipSN.SN}]绑定[{ExtInfo.FIELD_NAME}]标签条码[{CurWipExt.GetType().GetProperty($"FIELD_{ExtInfo.SEQ.ToString("00")}")?.GetValue(CurWipExt)?.ToString()}]保存成功");
action.LocaleMsg = new("MES.WorkAction.WipExtInfo.SaveSuccess", CurPosition.CurWipSN.SN, ExtInfo.FIELD_NAME, CurWipExt.GetType().GetProperty($"FIELD_{ExtInfo.SEQ.ToString("00")}")?.GetValue(CurWipExt)?.ToString());
return action;
}
#endregion Functions
}
}