using Rhea.Common;
|
using Tiger.IBusiness;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Linq.Expressions;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using Tiger.Model;
|
using static Tiger.Business.Biz;
|
using Org.BouncyCastle.Ocsp;
|
using Tiger.Model.Entitys.MES.Position;
|
using MailKit.Search;
|
|
namespace Tiger.Business.MES.Transaction
|
{
|
/// <summary>
|
/// MES岗位事务
|
/// </summary>
|
public class Position : MESTransactionBase, IPosition
|
{
|
public IPosition Init(string id, string apiHost, string userCode, string postCode)
|
{
|
TransID = id;
|
UserCode = userCode;
|
ApiHost = apiHost;
|
PostCode = postCode;
|
|
CurPosition = Biz.Db.Queryable<MES_POSITION>().Where(q => q.POST_CODE == postCode).First();
|
//if (CurPosition.IsNullOrEmpty()) throw new InvalidDataException($"MES.Transaction.Position.PositionNotExistsException", new Exception($"{postCode}|"));
|
if (CurPosition.IsNullOrEmpty()) throw new InvalidDataException($"岗位[{postCode}]不存在,请提交正确的岗位代码", new Exception($"{postCode}|"));
|
CurLine = Biz.Db.Queryable<MES_LINE>().Where(q => q.LINE_CODE == CurPosition.LINE_CODE).First();
|
//if (CurLine.IsNullOrEmpty()) throw new InvalidDataException($"MES.Transaction.Position.LineNotExistsException", new Exception($"{postCode}|{CurPosition.LINE_CODE}"));
|
if (CurLine.IsNullOrEmpty()) throw new InvalidDataException($"岗位[{postCode}]所属的产线[{CurPosition.LINE_CODE}]不存在,请先设置所属产线", new Exception($"{postCode}|{CurPosition.LINE_CODE}"));
|
CurWorkshop = Biz.Db.Queryable<MES_WORKSHOP>().Where(q => q.WS_CODE == CurLine.WS_CODE).First();
|
//if (CurWorkshop.IsNullOrEmpty()) throw new InvalidDataException($"MES.Transaction.Position.WorkshopNotExistsException", new Exception($"{postCode}|{CurLine.WS_CODE}"));
|
if (CurWorkshop.IsNullOrEmpty()) throw new InvalidDataException($"岗位[{postCode}]所属的车间[{CurLine.WS_CODE}]不存在,请先设置所属车间", new Exception($"{postCode}|{CurLine.WS_CODE}"));
|
CurFactory = Biz.Db.Queryable<MES_FACTORY>().Where(q => q.FTY_CODE == CurWorkshop.FTY_CODE).First();
|
//if (CurFactory.IsNullOrEmpty()) throw new InvalidDataException($"MES.Transaction.Position.FactoryNotExistsException", new Exception($"{postCode}|{CurWorkshop.FTY_CODE}"));
|
if (CurFactory.IsNullOrEmpty()) throw new InvalidDataException($"岗位[{postCode}]所属的工厂[{CurWorkshop.FTY_CODE}]不存在,请先设置所属工厂", new Exception($"{postCode}|{CurWorkshop.FTY_CODE}"));
|
|
return this;
|
}
|
|
#region Propertys & Variables
|
public string UserCode { get; set; }
|
public string PostCode { get; set; }
|
public MES_FACTORY CurFactory { get; set; }
|
public MES_WORKSHOP CurWorkshop { get; set; }
|
public MES_LINE CurLine { get; set; }
|
public MES_POSITION CurPosition { get; set; }
|
public WorkBatch CurBatch { get; set; }
|
public IWorkBatch WorkBatch => CurBatch;
|
public MES_WIP_DATA CurWipSN { get; set; }
|
public List<WorkStep> Steps { get; set; } = new();
|
public bool IsFinishAllSteps => Steps.Any() && !Steps.Any(q => !q.IsFinished);
|
public int CurStep => Steps.Where(q => !q.IsFinished).OrderBy(q => q.Sequence).FirstOrDefault()?.Sequence ?? 0;
|
private DbClient CommitDB;
|
#endregion Propertys & Variables
|
|
#region Functions
|
/// <summary>
|
/// 获取提交数据的DbClient对象
|
/// </summary>
|
/// <returns></returns>
|
public DbClient GetCommitDB()
|
{
|
return CommitDB ??= Biz.Db;
|
}
|
/// <summary>
|
/// 选择工单
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
public async Task<ApiAction> SelectOrder(WoInput input)
|
{
|
var action = new ApiAction();
|
try
|
{
|
if (!WoContext.ExistsBatch(input.OrderNo, CurLine.LINE_CODE))
|
{
|
var wo = await Biz.Db.Queryable<BIZ_MES_WO>().ByAuth(input.AuthOption).Where(q => q.ORDER_NO == input.OrderNo).FirstAsync();
|
//验证明细是否正确
|
if (wo.IsNullOrEmpty())
|
{
|
action.IsSuccessed = false;
|
//action.LocaleMsg = new($"工单[{input.OrderNo}]不存在", input.OrderNo);
|
action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.EmptyException", input.OrderNo);
|
return action;
|
}
|
if (wo.STATUS != BIZ_MES_WO.STATUSs.Release.GetValue() && wo.STATUS != BIZ_MES_WO.STATUSs.Working.GetValue())
|
{
|
action.IsSuccessed = false;
|
//action.LocaleMsg = new($"工单[{input.OrderNo}]状态[{wo.STATUS.GetEnum<BIZ_MES_WO.STATUSs>().GetName()}]不能生产");
|
action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.StatusException", input.OrderNo, wo.STATUS.GetEnum<BIZ_MES_WO.STATUSs>().GetName());
|
return action;
|
}
|
var batch = await Biz.Db.Queryable<BIZ_MES_WO_BATCH>().ByAuth(input.AuthOption).Where(q => q.ORDER_NO == input.OrderNo && q.ACT_LINE == CurLine.LINE_CODE).FirstAsync();
|
if (batch.IsNullOrEmpty())
|
{
|
action.IsSuccessed = false;
|
//action.LocaleMsg = new($"工单[{input.OrderNo}]没有下发到产线状态[{CurLine.LINE_CODE}]");
|
action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.LineException", input.OrderNo, CurLine.LINE_CODE);
|
return action;
|
}
|
var wb = new WorkBatch(input.OrderNo).Init(CurLine.LINE_CODE);
|
WoContext.WoBatchDic.Add(wb.Batch.BATCH_NO, wb);
|
}
|
CurBatch = WoContext.GetBatch(input.OrderNo, CurLine.LINE_CODE);
|
action.Data = new { WorkOrder = CurBatch.WO, Bacth = CurBatch.Batch };
|
}
|
catch (Exception ex)
|
{
|
action.CatchExceptionWithLog(ex, $"采集工序:选择工单异常");
|
}
|
return action;
|
}
|
|
/// <summary>
|
/// 重置当前工步
|
/// </summary>
|
public void ResetSteps()
|
{
|
Steps.Clear();
|
CurWipSN = null;
|
}
|
|
#endregion Functions
|
|
public override bool Close(bool needSaveHistoryLog = false)
|
{
|
//needSaveHistoryLog = true;
|
//保存操作日志
|
|
this.IsFinished = true;
|
return IsFinished ? base.Close(needSaveHistoryLog) : IsFinished;
|
}
|
}//endClass
|
}
|