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 { /// /// 工单批次 /// 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 WoSNs { get; set; } public List Edges { get; set; } public List Nodes { get; set; } public List NodeSets { get; set; } public List NodeActs { get; set; } public List ActionSets { get; set; } public List NodePosts { get; set; } public List NodeDftgs { get; set; } public List DefectGroups { get; set; } /// /// 事务锁 /// public object TransLock { get; } #endregion #region Functions /// /// 初始化工单资料 /// /// public WorkBatch Init(string lineCode) { WO = Biz.Db.Queryable().Where(q => q.ORDER_NO == OrderNo).First(); Batch = Biz.Db.Queryable().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().Where(q => q.CUST_CODE == WO.CUST_CODE).First(); WoSNs = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); Edges = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); Nodes = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); NodeSets = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); NodeActs = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).IncludesAllFirstLayer().ToList(); ActionSets = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); NodePosts = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); NodeDftgs = Biz.Db.Queryable().Where(q => q.WORK_ORDER == OrderNo).ToList(); DefectGroups = Biz.Db.Queryable().IncludesAllFirstLayer().ToList(); return this; } /// /// 工单开工 /// /// /// public bool StartWorking(string user) { if (Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.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; } /// /// 工单暂停 /// /// /// public bool PausedWorking(string user) { if (Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()) { WO.STATUS = BIZ_MES_WO.STATUSs.Paused.GetValue(); Batch.STATUS = BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue(); //保存数据库 var db = Biz.Db; var dbTran = db.UseTran(() => { db.Updateable(WO, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); db.Updateable(Batch, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); }); if (!dbTran.IsSuccess) { //throw dbTran.ErrorException; return false; } } return true; } /// /// 根据岗位编码判断是不是首站 /// /// /// 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)); } /// /// 根据岗位编码返回工序节点 /// /// /// public MES_WO_NODE GetNode(string postCode) { return Nodes.FirstOrDefault(q => NodePosts.Any(p => p.NODE_ID == q.ID && p.POST_CODE == postCode)); } /// /// 根据岗位编码返回工序不良代码 /// /// /// public List GetNodeDefects(string postCode) { var result = new List(); 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 /// /// 关闭工单 /// /// public bool Close() { Dispose(); return true; } public virtual void Dispose() { WoContext.WoBatchDic.Remove(OrderNo); } } } }