602 lines
23 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 当前的项目
/// </summary>
public ResGeelyAssemblyProject Project { get => project; set => project = value; }
ResGeelyAssemblyProject project = null;
/// <summary>
/// 当前项目的所有零件号配置,正常程序启动可一次读取,数据固定
/// </summary>
public List<ResGeelyAssemblyPart> PartList { get => partList; set => partList = value; }
List<ResGeelyAssemblyPart> partList = null;
/// <summary>
/// 当前零件号的防错列表
/// </summary>
public List<ResGeelyAssemblyConfig> FCConfigList { get { return this.configList; } }
List<ResGeelyAssemblyConfig> 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<ResGeelyAssemblyPart>();
this.configList = new List<ResGeelyAssemblyConfig>();
}
/// <summary>
/// 项目->零件号列表,项目表的零件和配置表的零件是包含关系
/// </summary>
/// <returns></returns>
public bool GetAssemblyPartsList()
{
// 读取当前的项目,不同程序项目会分开,这里的项目一般会确定
//this.Project = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyProject>().Where(it => it.Site == "6000").First();
this.Project = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyProject>().Where(it => it.Project == global.CurrentProject).First();
int projectId = this.Project != null ? this.Project.Id : 0;
// 根据项目,返回所有对应的零件号
this.PartList = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyPart>().Where(it => it.ProjectId == projectId).ToList();
if(this.PartList != null&& this.PartList.Count > 0 )
{
return true;
}
return false;
}
/// <summary>
/// 根据索引返回ResGeelyAssemblyPart
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public ResGeelyAssemblyPart GetPartByIndex(int index)
{
ResGeelyAssemblyPart resGeelyAssemblyPart = null;
if(index<this.PartList.Count)
{
resGeelyAssemblyPart = this.PartList[index];
}
return resGeelyAssemblyPart;
}
public ResGeelyAssemblyPart GetPartByIndex(string groupPart,string color)
{
ResGeelyAssemblyPart resGeelyAssemblyPart = null;
if(this.PartList!=null)
{
foreach (ResGeelyAssemblyPart item in this.PartList)
{
if(!string.IsNullOrEmpty(item.UndefineValue2) && (!string.IsNullOrEmpty(item.Color)))
{
if(groupPart.Equals(item.UndefineValue2.Trim()) && color.Equals(item.Color.Trim()))
{
resGeelyAssemblyPart = item;
break;
}
}
}
}
return resGeelyAssemblyPart;
}
public ResGeelyAssemblyPart GetPartByPartId(int partId)
{
ResGeelyAssemblyPart resGeelyAssemblyPart = null;
if (this.PartList != null)
{
foreach (ResGeelyAssemblyPart item in this.PartList)
{
if (item.Id == partId)
{
resGeelyAssemblyPart = item;
}
}
}
return resGeelyAssemblyPart;
}
/// <summary>
/// 生成项目字符串返回的顺序和内存中PartList顺序一致可以根据索引返回当前零件号
/// UndefineValue2存放组名称
/// </summary>
/// <returns></returns>
public string[] ToPartsListInfo()
{
List<string> lst = new List<string>();
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<string> lst = new List<string>();
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();
}
/// <summary>
/// 返回当前选择的零件号的防错列表
/// 每个零件号,都有对应的防错列表
/// </summary>
/// <param name="id"></param>
/// <param name="stationName"></param>
/// <param name="Module"></param>
/// <returns></returns>
public bool GetResGeelyAssemblyConfigList(int partId,string stationName="OP10")
{
//todo 获取配置表
var expable = Expressionable.Create<ResGeelyAssemblyConfig>();
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<ResGeelyAssemblyConfig>().Where(exp).OrderBy(it => it.Seq).ToList();
if(configList!=null&configList.Count()==8)
{ return true; }
return false;
}
/// <summary>
/// 判断某个防错记录是否要显示
/// *************这个地方要改20230911是否启用扫码的信息发生变化*************
/// </summary>
/// <param name="resSeresAssemblyConfig"></param>
/// <param name="partId"></param>
/// <returns></returns>
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<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 (curAssemblyPart.Id== value && enable==1)
{
result = true;
describe = sublines[2];
break;
}
}
}
if (result) break;
}
}
}
return describe;
}
/// <summary>
/// 查找防错对象,通过触发值来查找
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 追溯码,存储到数据库
/// 插入数据Part ID 追溯码 时间
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public int PrintTrace(string code,int partId)
{
//ResGeelyAssemblyProject project = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyProject>().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;
}
/// <summary>
/// 当前追溯码对应的数据记录
/// </summary>
public ResGeelyAssemblyTrace ThisResGeelyAssemblyTrace { get => thisResGeelyAssemblyTrace; }
ResGeelyAssemblyTrace thisResGeelyAssemblyTrace = null;
/// <summary>
/// 在追溯码表中根据追溯码返回对应的id
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public ResGeelyAssemblyTrace GetTraceIDByCode(string code)
{
ResGeelyAssemblyTrace resGeelyAssemblyTrace = null;
List< ResGeelyAssemblyTrace> lst = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyTrace>().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<ResGeelyAssemblyTrace> lst = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyTrace>().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<ResGeelyAssemblyTraceMaster>().Where(it => it. == code).ToList();
}
/// <summary>
/// 在追溯主表中,查找指定的追溯码
/// </summary>
/// <param name="traceId"></param>
/// <param name="stationName"></param>
/// <returns></returns>
public List<ResGeelyAssemblyTraceMaster> GetResTraceMasterList(int traceId, string stationName = "OP10")
{
var expable = Expressionable.Create<ResGeelyAssemblyTraceMaster>();
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<ResGeelyAssemblyTraceMaster> lst = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyTraceMaster>().Where(exp).OrderBy(it => it.Id).ToList();
return lst;
}
public List<ResGeelyAssemblyTraceMaster> GetResTraceMasterListEx(int traceId)
{
var expable = Expressionable.Create<ResGeelyAssemblyTraceMaster>();
expable.And(it => it.TraceId == traceId);
var exp = expable.ToExpression();
List<ResGeelyAssemblyTraceMaster> lst = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyTraceMaster>().Where(exp).OrderBy(it => it.Id).ToList();
return lst;
}
public List<ResGeelyAssemblyTraceSubpart> GetResTraceSubpartList(string subpartCode)
{
var expable = Expressionable.Create<ResGeelyAssemblyTraceSubpart>();
expable.And(it => it.SubPartSn == subpartCode);
//expable.And(it => it.Module == Module);
//expable.And(it => it.Status >= 0);
var exp = expable.ToExpression();
List<ResGeelyAssemblyTraceSubpart> lst = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyTraceSubpart>().Where(exp).OrderBy(it => it.Id).ToList();
return lst;
}
public List<ResGeelyAssemblyTraceSubpart> GetResTraceSubpartListEx(int[] masterId)
{
var expable = Expressionable.Create<ResGeelyAssemblyTraceSubpart>();
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<ResGeelyAssemblyTraceSubpart> lst = SqlSugarHelper.Db.Queryable<ResGeelyAssemblyTraceSubpart>().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<ResGeelyAssemblyTraceSubpart> thisTimeFCList = new List<ResGeelyAssemblyTraceSubpart>();
/// <summary>
/// 清楚当次防错数据
/// </summary>
public void ClearThisTimeFCList()
{
// 清空本次防错列表,添加的扫码数据
thisTimeFCList.Clear();
// 同时清空追溯码对应的记录
this.thisResGeelyAssemblyTrace = null;
}
/// <summary>
/// 在一次流程中,先将防错结果数据,保存到缓存中,结束时一起保存
/// </summary>
/// <param name="SubPartSn"></param>
/// <param name="config"></param>
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);
}
/// <summary>
/// 保存防错数据,可以在整个流程结束后,再一起保存
/// </summary>
/// <param name="traceID">追溯码对应的记录ID</param>
/// <param name="rework">是否返工,真-为返工状态;假-生产状态</param>
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
}
}