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
}
}