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 MacOrderDalForEverlight { private IDatabase CurrDb = null; public MacOrderDalForEverlight(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; //休眠5秒,等待机台状态恢复 //Thread.Sleep(5000); //order = ReadMachineOrderDetail(mac.ID, 2, 41, "s2f41resume", ref errorinfo); //if (order == null) // return -1; ////从机型参数中读取程序参数信息 //condition = $" and a.preid={order.ID}"; //datas = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); //if (datas == null) // return -1; //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 string GetProgramName(Machine mac, ref string errorinfo) { try { OrderDetail order = ReadMachineOrderDetail(mac.ID, 1, 3, "programname", ref errorinfo); if (order == null) return ""; string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (datas == null) return ""; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return ""; string org = rec.Datalists[1].FContent; //condition = $" and a.id={org}"; //List programs = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); //if (programs.Count <= 0) //{ // errorinfo = $"未找到ID【{org}】的程序。"; // return ""; //} //return programs[0].ProgramName; return org; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return ""; } } public byte[] GetProgram(Machine mac,string programname, ref string errorinfo) { try { OrderDetail order = ReadMachineOrderDetail(mac.ID, 7, 5, "requestprogram", ref errorinfo); if (order == null) return null; string condition = $" and a.preid={order.ID}"; List datas = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); if (datas == null) return null; datas[0].FContent = programname; datas[0].FLen = programname.Length; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return null; if(rec.Datalists[2].OrgDatas==null) { errorinfo = rec.ToJson(); return null; } return rec.Datalists[2].OrgDatas; //string org = rec.Datalists[1].FContent; //condition = $" and a.id={org}"; //List programs = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); //if (programs.Count <= 0) //{ // errorinfo = $"未找到ID【{org}】的程序。"; // return ""; //} //return programs[0].ProgramName; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return null; } } private List GetS7F1Data(string programname, int len, 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 = 2; ldata.Add(lentity); OrderData entity = new OrderData(); entity.ID = 2; entity.ParentID = 1; entity.FNum = 10; entity.PreID = preid; entity.FCode = "A"; entity.FContent = programname; entity.FLen = programname.Length; ldata.Add(entity); entity = new OrderData(); entity.ID = 2; entity.ParentID = 1; entity.FNum = 20; entity.PreID = preid; entity.FCode = "U4"; entity.FLen = 1; entity.FContent = len.ToString(); //entity.OrgDatas = filedatas; //entity.FLen = programname.Length; ldata.Add(entity); return ldata; } private void SendInfo(string maccode, string info) { try { string temperrorinfo = ""; SendS10F3(maccode, info, ref temperrorinfo); } catch { return; } } private List GetS7F3Data(string programname, int filelen, string filepath, 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 = 2; ldata.Add(lentity); OrderData entity = new OrderData(); entity.ID = 2; entity.ParentID = 1; entity.FNum = 10; entity.PreID = preid; entity.FCode = "A"; entity.FContent = programname; entity.FLen = programname.Length; entity.Remark = ""; ldata.Add(entity); entity = new OrderData(); entity.ID = 2; entity.ParentID = 1; entity.FNum = 20; entity.PreID = preid; entity.FCode = "B"; entity.FContent = filepath; entity.OrgDatas = null; entity.FLen = filelen; //entity.FLen = programname.Length; ldata.Add(entity); return ldata; } public int DownloadProgram(Machine mac, string programname, int filelen, string filepath, ref string errorinfo) { try { //要修改程序名称 OrderDetail order = ReadMachineOrderDetail(mac.ID, 7, 1, ref errorinfo); if (order == null) return -1; string condition = $" and a.preid={order.ID}"; List datas = GetS7F1Data(programname, filelen, order.ID, ref errorinfo);// if (datas == null) return -1; HsmsWeb accessmac = new HsmsWeb(); OrderBlock rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return -1; int result = int.Parse(rec.Datalists[0].FContent); if (result > 1) { errorinfo = $"机台不接受程序。{rec.Datalists[0].FContent}"; SendInfo(mac.FCode, $" Recipe download fail [{rec.Datalists[0].FContent}]"); return -1; } if (result == 0) { //产生文件 ShareFileDal filedal = new ShareFileDal(CurrDb); ShareFile fileentity = filedal.MadeShareFile(filepath, ref errorinfo); if (fileentity == null) return -1; order = ReadMachineOrderDetail(mac.ID, 7, 3, ref errorinfo); datas = GetS7F3Data(programname, filelen, fileentity.FilePath, order.PreID, ref errorinfo); rec = accessmac.SendOrderFor(mac.FCode, order, datas, ref errorinfo); if (rec == null) return -1; if (int.Parse(rec.Datalists[0].FContent) != 0) { errorinfo = "机台没有正确接受程序。"; SendInfo(mac.FCode, $" Recipe download fail [{rec.Datalists[0].FContent}]"); return -1; } } return 1; } catch (Exception ex) { errorinfo = ex.Message.ToString(); return -1; } } } }