using Tiger.Model;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq.Expressions;
|
using System.Text;
|
using System.Threading.Tasks;
|
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;
|
|
namespace Tiger.Business
|
{
|
public partial class Biz
|
{
|
/// <summary>
|
/// 工单批次
|
/// </summary>
|
public partial class WorkBatch : IWorkBatch, IDisposable
|
{
|
public WorkBatch(string order)
|
{
|
OrderNo = order;
|
}
|
#region Propertys & Variables
|
public string OrderNo { get; set; }
|
public BIZ_MES_WO WO { get; set; }
|
public BIZ_MES_WO_BATCH Batch { get; set; }
|
public BAS_CUSTOMER Customer { get; set; }
|
public List<BIZ_MES_WO_SN> WoSNs { get; set; }
|
public List<MES_WO_EDGE> Edges { get; set; }
|
public List<MES_WO_NODE> Nodes { get; set; }
|
public List<MES_WO_OPER> NodeSets { get; set; }
|
public List<MES_WO_NODE_ACT> NodeActs { get; set; }
|
public List<MES_WO_ACTION> ActionSets { get; set; }
|
public List<MES_WO_NODE_POST> NodePosts { get; set; }
|
public List<MES_WO_NODE_DFTG> NodeDftgs { get; set; }
|
public List<BAS_DEFECT_GRP> DefectGroups { get; set; }
|
/// <summary>
|
/// 事务锁
|
/// </summary>
|
public object TransLock { get; }
|
#endregion
|
|
#region Functions
|
/// <summary>
|
/// 初始化工单资料
|
/// </summary>
|
/// <returns></returns>
|
public WorkBatch Init(string lineCode)
|
{
|
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
|
&& (q.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || q.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())).First();
|
Customer = Biz.Db.Queryable<BAS_CUSTOMER>().Where(q => q.CUST_CODE == WO.CUST_CODE).First();
|
WoSNs = Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
Edges = Biz.Db.Queryable<MES_WO_EDGE>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
Nodes = Biz.Db.Queryable<MES_WO_NODE>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
NodeSets = Biz.Db.Queryable<MES_WO_OPER>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
NodeActs = Biz.Db.Queryable<MES_WO_NODE_ACT>().Where(q => q.WORK_ORDER == OrderNo).IncludesAllFirstLayer().ToList();
|
ActionSets = Biz.Db.Queryable<MES_WO_ACTION>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
NodePosts = Biz.Db.Queryable<MES_WO_NODE_POST>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
NodeDftgs = Biz.Db.Queryable<MES_WO_NODE_DFTG>().Where(q => q.WORK_ORDER == OrderNo).ToList();
|
DefectGroups = Biz.Db.Queryable<BAS_DEFECT_GRP>().IncludesAllFirstLayer().ToList();
|
return this;
|
}
|
|
/// <summary>
|
/// 工单开工
|
/// </summary>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
public bool StartWorking(string user)
|
{
|
if (Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue() || Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue())
|
{
|
WO.STATUS = BIZ_MES_WO.STATUSs.Working.GetValue();
|
WO.ACT_START_TIME = WO.ACT_START_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : WO.ACT_START_TIME;
|
Batch.STATUS = BIZ_MES_WO_BATCH.STATUSs.Working.GetValue();
|
Batch.ACT_START_TIME = WO.ACT_START_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : WO.ACT_START_TIME;
|
//保存数据库
|
var db = Biz.Db;
|
var dbTran = db.UseTran(() =>
|
{
|
db.Updateable(WO, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.ACT_START_TIME }).ExecuteCommand();
|
db.Updateable(Batch, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.ACT_START_TIME }).ExecuteCommand();
|
});
|
if (!dbTran.IsSuccess)
|
{
|
//throw dbTran.ErrorException;
|
return false;
|
}
|
}
|
return true;
|
}
|
|
/// <summary>
|
/// 根据岗位编码判断是不是首站
|
/// </summary>
|
/// <param name="postCode"></param>
|
/// <returns></returns>
|
public bool IsFirstNode(string postCode)
|
{
|
return Nodes.Any(q => q.IS_FIRST_NODE == "Y" && NodePosts.Any(p => p.NODE_ID == q.ID && p.POST_CODE == postCode));
|
}
|
|
/// <summary>
|
/// 根据岗位编码返回工序节点
|
/// </summary>
|
/// <param name="postCode"></param>
|
/// <returns></returns>
|
public MES_WO_NODE GetNode(string postCode)
|
{
|
return Nodes.FirstOrDefault(q => NodePosts.Any(p => p.NODE_ID == q.ID && p.POST_CODE == postCode));
|
}
|
|
/// <summary>
|
/// 根据岗位编码返回工序不良代码
|
/// </summary>
|
/// <param name="postCode"></param>
|
/// <returns></returns>
|
public List<DefectOutput> GetNodeDefects(string postCode)
|
{
|
var result = new List<DefectOutput>();
|
var groups = DefectGroups.Where((b, s) => NodeDftgs.Any(d => d.NODE_ID == GetNode(postCode).ID && d.DFTG_CODE == b.DFTG_CODE)).ToList();
|
foreach (var group in groups)
|
{
|
result.AddRange(group.Defects.Select(q => new DefectOutput {
|
DFTG_CODE = q.DFTG_CODE,
|
DFTG_NAME = group.DFTG_NAME,
|
DFT_CODE = q.DFT_CODE,
|
DFT_NAME = q.DFT_NAME,
|
DFT_LEVEL = q.DFT_LEVEL,
|
}));
|
}
|
return result;
|
}
|
|
#endregion
|
|
/// <summary>
|
/// 关闭工单
|
/// </summary>
|
/// <returns></returns>
|
public bool Close()
|
{
|
Dispose();
|
return true;
|
}
|
public virtual void Dispose()
|
{
|
WoContext.WoBatchDic.Remove(OrderNo);
|
}
|
}
|
}
|
}
|