using DoAn.Core; using DoAn.SugarModels; using DoAn.UI; using SqlSugar; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Drawing; using System.IO.Ports; using System.Linq; using static System.Windows.Forms.AxHost; namespace DoAn.servicce { public class DBService { /// /// 当前的项目 /// public ResGeelyAssemblyProject Project { get => project; set => project = value; } ResGeelyAssemblyProject project = null; /// /// 当前项目的所有零件号配置,正常程序启动可一次读取,数据固定 /// public List PartList { get => partList; set => partList = value; } List partList = null; /// /// 当前零件号的防错列表 /// public List FCConfigList { get { return this.configList; } } List configList = null; public static DBService dbService = DBService.GetIntance; public static DBService GetIntance { get { if (dbService != null) { return dbService; } else { dbService = new DBService(); return dbService; } } } private DBService() { this.PartList = new List(); this.configList = new List(); } /// /// 项目->零件号列表,项目表的零件和配置表的零件是包含关系 /// /// public bool GetAssemblyPartsList() { // 读取当前的项目,不同程序项目会分开,这里的项目一般会确定 //this.Project = SqlSugarHelper.Db.Queryable().Where(it => it.Site == "6000").First(); this.Project = SqlSugarHelper.Db.Queryable().Where(it => it.Project == global.CurrentProject).First(); int projectId = this.Project != null ? this.Project.Id : 0; // 根据项目,返回所有对应的零件号 this.PartList = SqlSugarHelper.Db.Queryable().Where(it => it.ProjectId == projectId).ToList(); if(this.PartList != null&& this.PartList.Count > 0 ) { return true; } return false; } /// /// 根据索引返回,ResGeelyAssemblyPart /// /// /// public ResGeelyAssemblyPart GetPartByIndex(int index) { ResGeelyAssemblyPart resGeelyAssemblyPart = null; if(index /// 生成项目字符串,返回的顺序和内存中PartList顺序一致,可以根据索引返回当前零件号 /// UndefineValue2,存放组名称 /// /// public string[] ToPartsListInfo() { List lst = new List(); if(PartList!=null) { foreach (ResGeelyAssemblyPart item in PartList) { if(!string.IsNullOrEmpty(item.UndefineValue2)) { if(!lst.Contains(item.UndefineValue2.Trim())) { lst.Add(item.UndefineValue2.Trim()); } } //lst.Add(/*item.Name + " " + */item.PartNo); } } return lst.ToArray(); } public string[] ToPartsListColor() { List lst = new List(); if (PartList != null) { //Newtonsoft.Json.Linq.JArray obj = (Newtonsoft.Json.Linq.JArray)Newtonsoft.Json.JsonConvert.DeserializeObject(PartList[0].Color); //for(int i=0;i< obj.Count;i++) //{ // string t = obj[i].ToArray()[0].ToString(); // t = t.Replace("\"", ""); // string[] t1 = t.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); // lst.Add(t1[0] + "-" + t1[1]); //} foreach (ResGeelyAssemblyPart item in PartList) { if (!string.IsNullOrEmpty(item.Color)) { if (!lst.Contains(item.Color.Trim())) { lst.Add(item.Color.Trim()); } } } ; } return lst.ToArray(); } /// /// 返回当前选择的零件号的防错列表 /// 每个零件号,都有对应的防错列表 /// /// /// /// /// public bool GetResGeelyAssemblyConfigList(int partId,string stationName="OP10") { //todo 获取配置表 var expable = Expressionable.Create(); expable.And(it => it.Station == stationName); expable.And(it => it.PartId == partId); //expable.And(it => it.Module == Module); expable.And(it => it.Status >= 0); var exp = expable.ToExpression(); configList = SqlSugarHelper.Db.Queryable().Where(exp).OrderBy(it => it.Seq).ToList(); if(configList!=null&configList.Count()==8) { return true; } return false; } /// /// 判断某个防错记录是否要显示 /// *************这个地方要改,20230911,是否启用扫码的信息发生变化************* /// /// /// /// public int CheckCurrentConfigState(ResGeelyAssemblyConfig resSeresAssemblyConfig,int partId) { bool state = false; if (resSeresAssemblyConfig!=null && resSeresAssemblyConfig.Extend_config != null) { //string[] lines = resSeresAssemblyConfig.Extend_config.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); //if (lines != null && lines.Length > 0) //{ // if (lines.Contains(partId.ToString())) // state = resSeresAssemblyConfig.Status > 0; //} string[] lines = resSeresAssemblyConfig.Extend_config.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (lines != null && lines.Length > 0) { bool result = false; for (int i = 0; i < lines.Length; i++) // 按照零件号分割查找 { string[] sublines = lines[i].Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); if (sublines != null && sublines.Length >= 3) { for (int j = 0; j < sublines.Length; j++) // 单个零件号内部,分割查找 { int value = Convert.ToInt32(sublines[0].Trim()); int enable = Convert.ToInt32(sublines[1].Trim()); if (partId == value && enable==1) { result = true; state = resSeresAssemblyConfig.Status > 0; break; } } } if (result) break; } } } return state ? 1 : 0; } public string GetFCDescribe(ResGeelyAssemblyPart curAssemblyPart, ResGeelyAssemblyConfig resSeresAssemblyConfig) { string describe = string.Empty; if (curAssemblyPart!=null && resSeresAssemblyConfig != null && resSeresAssemblyConfig.Extend_config != null) { string[] lines = resSeresAssemblyConfig.Extend_config.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (lines != null && lines.Length > 0) { bool result = false; for(int i=0;i=3) { for(int j=0;j /// 查找防错对象,通过触发值来查找 /// /// /// public ResGeelyAssemblyConfig GetFCObjectByTriggerValue(int value) { ResGeelyAssemblyConfig resSeresAssemblyConfig = null; if(this.configList!=null) { foreach (ResGeelyAssemblyConfig item in this.configList) { if(item.Status==value && "FC".Equals(item.Module.Trim())) { resSeresAssemblyConfig = item; break; } } } return resSeresAssemblyConfig; } public ResGeelyAssemblyConfig GetFCObjectByOption(string option) { ResGeelyAssemblyConfig resSeresAssemblyConfig = null; if (this.configList != null) { foreach (ResGeelyAssemblyConfig item in this.configList) { if(!string.IsNullOrEmpty(item.Option)) { if (item.Option.Trim().Equals(option.Trim()) && "FC".Equals(item.Module.Trim())) { resSeresAssemblyConfig = item; break; } } } } return resSeresAssemblyConfig; } public string GetFC_msg() { string msg = ""; if(this.configList!=null) { foreach (ResGeelyAssemblyConfig item in this.configList) { msg += ("ID=" + item.Id.ToString() + "-" + "partId=" + item.PartId.ToString() + "-" + "工位=" + item.Station + "-" + "名称=" + item.Option.ToString() + "-" + "模块=" + item.Module.ToString() + "-" + "状态=" + item.Status.ToString() + Environment.NewLine ); } } return msg; } /// /// 追溯码,存储到数据库 /// 插入数据:Part ID 追溯码 时间 /// /// /// public int PrintTrace(string code,int partId) { //ResGeelyAssemblyProject project = SqlSugarHelper.Db.Queryable().Where(it => it.Site == "6000").First(); //string workcenter = project != null ? project.WorkCenter : "null"; //string flowTime = DateTime.Now.ToString("yyyyMMddHHmmss"); //string counter = counterFunc(); ResGeelyAssemblyTrace trace = new ResGeelyAssemblyTrace(); //if (this.configList != null) trace.PartId = (int)this.configList[0].Id; //else trace.PartId = 0; trace.PartId = partId; trace.PartSn = code; trace.CreateTime = DateTime.Now; int traceID = SqlSugarHelper.Db.Insertable(trace).ExecuteReturnIdentity(); if (traceID > 0) { globalMethod.UpdateRunInfoListBox("ResGeelyAssemblyTrace插入成功," + code + "/" + traceID.ToString()); } return traceID; } /// /// 当前追溯码对应的数据记录 /// public ResGeelyAssemblyTrace ThisResGeelyAssemblyTrace { get => thisResGeelyAssemblyTrace; } ResGeelyAssemblyTrace thisResGeelyAssemblyTrace = null; /// /// 在追溯码表中,根据追溯码返回对应的id /// /// /// public ResGeelyAssemblyTrace GetTraceIDByCode(string code) { ResGeelyAssemblyTrace resGeelyAssemblyTrace = null; List< ResGeelyAssemblyTrace> lst = SqlSugarHelper.Db.Queryable().Where(it => it.PartSn == code).ToList(); if(lst!=null && lst.Count>0) { resGeelyAssemblyTrace = lst[0]; } this.thisResGeelyAssemblyTrace = resGeelyAssemblyTrace; return resGeelyAssemblyTrace; } public ResGeelyAssemblyTrace GetTraceIDByTime(DateTime beginTime, DateTime endTime,string id,string lineName) { ResGeelyAssemblyTrace resGeelyAssemblyTrace = null; List lst = SqlSugarHelper.Db.Queryable().Where(it => (it.CreateTime>= beginTime && it.CreateTime<= endTime)).ToList(); if(lst!=null && lst.Count>0) { foreach (ResGeelyAssemblyTrace item in lst) { if(item.PartSn.EndsWith(id) && item.PartSn.StartsWith(lineName)) { resGeelyAssemblyTrace = item; break; } } } return resGeelyAssemblyTrace; } public void GetPreStationFC(string code,string preStation) { //ResGeelyAssemblyTraceMaster resGeelyAssemblyTraceMaster = SqlSugarHelper.Db.Queryable().Where(it => it. == code).ToList(); } /// /// 在追溯主表中,查找指定的追溯码 /// /// /// /// public List GetResTraceMasterList(int traceId, string stationName = "OP10") { var expable = Expressionable.Create(); expable.And(it => it.Station == stationName); expable.And(it => it.TraceId == traceId); //expable.And(it => it.Module == Module); //expable.And(it => it.Status >= 0); var exp = expable.ToExpression(); List lst = SqlSugarHelper.Db.Queryable().Where(exp).OrderBy(it => it.Id).ToList(); return lst; } public List GetResTraceMasterListEx(int traceId) { var expable = Expressionable.Create(); expable.And(it => it.TraceId == traceId); var exp = expable.ToExpression(); List lst = SqlSugarHelper.Db.Queryable().Where(exp).OrderBy(it => it.Id).ToList(); return lst; } public List GetResTraceSubpartList(string subpartCode) { var expable = Expressionable.Create(); expable.And(it => it.SubPartSn == subpartCode); //expable.And(it => it.Module == Module); //expable.And(it => it.Status >= 0); var exp = expable.ToExpression(); List lst = SqlSugarHelper.Db.Queryable().Where(exp).OrderBy(it => it.Id).ToList(); return lst; } public List GetResTraceSubpartListEx(int[] masterId) { var expable = Expressionable.Create(); foreach (int item in masterId) { expable.Or(it => it.MasterId == item); } //expable.And(it => it.Module == Module); //expable.And(it => it.Status >= 0); var exp = expable.ToExpression(); List lst = SqlSugarHelper.Db.Queryable().Where(exp).OrderBy(it => it.Id).ToList(); return lst; } public int InsertResSeresAssemblyTraceLog(int newTraceId,int oldTraceId) { resSeresAssemblyTraceLog obj = new resSeresAssemblyTraceLog(); obj.TraceId = newTraceId; obj.TraceIdOld = oldTraceId; obj.CreateTime = DateTime.Now; //obj.CreateTime = DateTime.Now; 由服务器设置默认时间 // 先把记录插入到表,res_客户_assembly_trace_master 返回记录 ID int insertRes = SqlSugarHelper.Db.Insertable(obj).ExecuteReturnIdentity(); return insertRes; } #region 插入防错 轨迹 private List thisTimeFCList = new List(); /// /// 清楚当次防错数据 /// public void ClearThisTimeFCList() { // 清空本次防错列表,添加的扫码数据 thisTimeFCList.Clear(); // 同时清空追溯码对应的记录 this.thisResGeelyAssemblyTrace = null; } /// /// 在一次流程中,先将防错结果数据,保存到缓存中,结束时一起保存 /// /// /// public void insertTrace_Subpart(string SubPartSn, ResGeelyAssemblyConfig config,string result) { ResGeelyAssemblyTraceSubpart subpart = new ResGeelyAssemblyTraceSubpart(); subpart.SubPartSn = SubPartSn; // 零件号,所扫的编码 subpart.Name = config.Option; // 防错名称 subpart.SubPartNo = result; // 定义防错结果 subpart.CreateTime = DateTime.Now; //由服务器设置默认时间 thisTimeFCList.Add(subpart); } /// /// 保存防错数据,可以在整个流程结束后,再一起保存 /// /// 追溯码对应的记录ID /// 是否返工,真-为返工状态;假-生产状态 public void insertTraceData(string code, bool rework) { ResGeelyAssemblyTrace resGeelyAssemblyTrace = this.GetTraceIDByCode(code); if (resGeelyAssemblyTrace!=null) { ResGeelyAssemblyTraceMaster master = new ResGeelyAssemblyTraceMaster(); master.TraceId = resGeelyAssemblyTrace.Id; master.Station = global.CurrentStation; master.CreateTime = DateTime.Now; //由服务器设置默认时间 master.IsRework = (byte)(rework ? 1 : 0); // 先把记录插入到表,res_客户_assembly_trace_master 返回记录 ID int insertRes = SqlSugarHelper.Db.Insertable(master).ExecuteReturnIdentity(); // 如果插入成功,则将之前的防错信息插入到表:res_客户_assembly_trace_subpart if (insertRes > 0) { globalMethod.UpdateRunInfoListBox("ResGeelyAssemblyTraceMaster插入成功"); thisTimeFCList.ForEach(item => item.MasterId = insertRes); SqlSugarHelper.Db.Insertable(thisTimeFCList).ExecuteCommand(); thisTimeFCList.Clear(); } else globalMethod.UpdateRunInfoListBox("存储数据时,当前没有数据"); } else globalMethod.UpdateRunInfoListBox("存储数据时,resGeelyAssemblyTrace=NULL"); return; } #endregion } }