using Cksoft.Data; using Cksoft.Unity; using DllEapEntity; using DllHsms; using DllHsmsWeb; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace DllEapDal { public class MacOrderSendDal { private IDatabase CurrDb = null; public MacOrderSendDal(IDatabase db) { CurrDb = db; } public Machine ReadMachine(string maccode, ref string errorinfo) { //读取机台信息 string condition = $" and a.fcode='{maccode}'"; List macs = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (macs == null) return null; if (macs.Count <= 0) { errorinfo = $"未找到机台编号【{maccode}】的机台信息。"; return null; } return macs[0]; } public OrderDetail ReadMachineOrderDetail(int macid, int sval, int fval, ref string errorinfo) { //读取机台信息 string condition = $" and a.macid={macid}"; List macs = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (macs == null) return null; if (macs.Count <= 0) { errorinfo = $"未找到机台ID【{macid}】的机台指令信息。"; return null; } condition = $" and a.preid={macs[0].PreID} and a.sval={sval} and a.fval={fval}"; List details = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (details == null) return null; if (details.Count <= 0) { errorinfo = "未找到您要的指令。"; return null; } return details[0]; } public OrderDetail ReadMachineOrderDetail(int macid, int sval, int fval, string fname, ref string errorinfo) { //读取机台信息 string condition = $" and a.macid={macid}"; List macs = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (macs == null) return null; if (macs.Count <= 0) { errorinfo = $"未找到机台ID【{macid}】的机台指令信息。"; return null; } condition = $" and a.preid={macs[0].PreID} and a.sval={sval} and a.fval={fval} and lower(a.FName)='{fname.ToLower()}'"; List details = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (details == null) return null; if (details.Count <= 0) { errorinfo = "未找到您要的指令。"; return null; } return details[0]; } public int SendStopMac(string maccode, ref string errorinfo) { try { Machine mac = ReadMachine(maccode, ref errorinfo); if (mac == null) return -1; OrderDetail order = ReadMachineOrderDetail(mac.ID, 2, 41, "s2f41stop", ref errorinfo); if (order == null) return -1; //从机型参数中读取程序参数信息 string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (datas == null) return -1; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return -1; return 1; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return -1; } } public int SendResumeMac(string maccode, ref string errorinfo) { try { Machine mac = ReadMachine(maccode, ref errorinfo); if (mac == null) return -1; OrderDetail order = ReadMachineOrderDetail(mac.ID, 2, 41, "s2f41resume", ref errorinfo); if (order == null) return -1; //从机型参数中读取程序参数信息 string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (datas == null) return -1; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return -1; return 1; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return -1; } } public int SendS10F3(string maccode,string info, ref string errorinfo) { try { Machine mac = ReadMachine(maccode, ref errorinfo); if (mac == null) return -1; OrderDetail order = ReadMachineOrderDetail(mac.ID, 10, 3, "s10f3", ref errorinfo); if (order == null) return -1; //从机型参数中读取程序参数信息 string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).OrderBy(t => t.FNum).ToList(); if (datas == null) return -1; List tempdatas = datas.Where(t => t.ParentID == 0).ToList(); tempdatas = datas.Where(t => t.ParentID == tempdatas[0].ID).OrderBy(t => t.FNum).ToList(); tempdatas[1].FContent = info; tempdatas[1].FLen = info.Length; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return -1; if(rec.Datalists[0].FContent!="00") { errorinfo = rec.Datalists[0].FContent; return -1; } return 1; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return -1; } } public List SendOrder(Machine mac, int sval,int fval,string fname, ref string errorinfo) { try { OrderDetail order = ReadMachineOrderDetail(mac.ID, sval, fval, fname, ref errorinfo); if (order == null) return null; //从机型参数中读取程序参数信息 string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).OrderBy(t => t.FNum).ToList(); if (datas == null) return null; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return null; return rec.Datalists; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return null; } } public int SendS7F5(string maccode, string programname, ref string errorinfo) { try { Machine mac = ReadMachine(maccode, ref errorinfo); if (mac == null) return -1; OrderDetail order = ReadMachineOrderDetail(mac.ID, 7, 5, "s7f5", ref errorinfo); if (order == null) return -1; //从机型参数中读取程序参数信息 string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).OrderBy(t => t.FNum).ToList(); if (datas == null) return -1; datas[0].FContent = programname; datas[0].FLen = programname.Length; //List tempdatas = datas.Where(t => t.ParentID == 0).ToList(); //tempdatas = datas.Where(t => t.ParentID == tempdatas[0].ID).OrderBy(t => t.FNum).ToList(); //tempdatas[0].FContent = programname; //tempdatas[0].FLen = programname.Length; HsmsWeb accessmac = new HsmsWeb(); int result = accessmac.SendOrderNoAnswer(mac.FCode, order, datas, ref errorinfo); if (result <=0) return -1; return 1; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return -1; } } public List GetParamValue(string macCode, List paramlists,ref string errorinfo) { try { string condition = $" and a.fcode='{macCode}'"; List macs = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (macs == null || macs.Count <= 0) { errorinfo = $"在EAP系统中,未找到机台编号为【{macCode}】的机台信息。"; return null; } string fcode = ""; foreach (var item in paramlists) { if (fcode == "") fcode = $"'{item.FCode}'"; else fcode = $"{fcode},'{item.FCode}'"; } condition = $" and b.FCode in({fcode}) and a.PreID={macs[0].MModeID}"; List secdetails = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (secdetails == null || secdetails.Count <= 0) { errorinfo = $"在EAP系统中,未找您给的参数代码【{fcode}】。"; return null; } List svids = secdetails.Where(t => t.SecFType == SecType.SVID).ToList(); if (svids.Count > 0) { //从机台中取值 svids = ReadDataFor(macs[0], svids, SecType.SVID, ref errorinfo); if (svids == null) return null; } List ecids = secdetails.Where(t => t.SecFType == SecType.ECID).ToList(); if (ecids.Count > 0) { //从机台中取值 ecids = ReadDataFor(macs[0], ecids, SecType.ECID, ref errorinfo); if (ecids == null) return null; } foreach(var item in paramlists) { var templist = secdetails.Where(t => t.SecFCode == item.FCode).ToList(); if (templist.Count > 0) item.FValue = templist[0].Remark; } return paramlists; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return null; } } private List GetData(List mmsecs, int preid, ref string errorinfo) { List ldata = new List(); OrderData lentity = new OrderData(); lentity.ID = 1; lentity.ParentID = 0; lentity.PreID = preid; lentity.FCode = "L"; lentity.FLen = 1; ldata.Add(lentity); int id = 2; int fnum = 0; foreach (var item in mmsecs) { id++; fnum += 10; OrderData entity = new OrderData(); entity.ID = id; entity.ParentID = 1; entity.FNum = fnum; entity.PreID = preid; entity.FCode = item.DCode; entity.FContent = item.FVal; entity.FLen = 1; ldata.Add(entity); } return ldata; } //db机台主动取数据 private List ReadDataFor(Machine mac, List mmsecs, int ftype, ref string errorinfo) { try { int sval = 1; int fval = 3; if (ftype == SecType.ECID) { sval = 2; fval = 13; } string condition = $" and a.preid=(SELECT preid FROM macorder where macid={mac.ID}) and a.sval={sval} and a.fval={fval}"; List orders = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (orders.Count <= 0) { errorinfo = $"未找到机台{mac.FCode}对应的S{sval}F{fval}指令。"; return null; } List datas = GetData(mmsecs, orders[0].ID, ref errorinfo); if (datas == null) return null; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, orders[0], datas, ref errorinfo); if (rec == null) return null; for (int i = 1; i < rec.Datalists.Count; i++) { mmsecs[i - 1].Remark = rec.Datalists[i].FContent; } return mmsecs; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return null; } } public int SendS10F3NoAnswer(string maccode, string info, ref string errorinfo) { try { Machine mac = ReadMachine(maccode, ref errorinfo); if (mac == null) return -1; OrderDetail order = ReadMachineOrderDetail(mac.ID, 10, 3, "s10f3", ref errorinfo); if (order == null) return -1; //从机型参数中读取程序参数信息 string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).OrderBy(t => t.FNum).ToList(); if (datas == null) return -1; List tempdatas = datas.Where(t => t.ParentID == 0).ToList(); tempdatas = datas.Where(t => t.ParentID == tempdatas[0].ID).OrderBy(t => t.FNum).ToList(); tempdatas[1].FContent = info; tempdatas[1].FLen = info.Length; HsmsWeb accessmac = new HsmsWeb(); return accessmac.SendOrderNoAnswer(mac.FCode, order, datas, ref errorinfo); } catch (Exception ex) { errorinfo = ex.Message.ToString(); return -1; } } } }