using Cksoft.Data; using Cksoft.Unity; using DllEapEntity; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DllStatusShowDal { public class LayoutMstDal { private IDatabase CurrDb = null; public LayoutMstDal(IDatabase db) { CurrDb = db; } public LayoutMst IULayoutMst(LayoutMst mst, string usercode, ref string errorinfo) { try { int result = 0; int id = mst.ID; if (mst.EntityStatusID == 1) { //mst.reccode = usercode; //mst.RecTime = DateTime.Now; //mst.ModCode = usercode; //mst.ModTime = DateTime.Now; string fcode = GetLayoutMstCode(ref errorinfo); if (fcode == "") return null; mst.FCode = fcode; result = CurrDb.InsertFor(mst, usercode); if (result < 0) { return null; } object objid = CurrDb.FindObject("select @@IDENTITY"); if (objid.ToString() == "") { return null; } id = int.Parse(objid.ToString()); } else { //mst.ModCode = usercode; //mst.ModTime = DateTime.Now; result = CurrDb.UpdateFor(mst, usercode); if (result < 0) { return null; } } mst = CurrDb.FindEntityFor(id); return mst; } catch (Exception e) { errorinfo = e.Message; return null; } } private string GetLayoutMstCode(ref string errorinfo) { try { StringBuilder sqlstr = new StringBuilder(100); string code = "Y"; sqlstr.AppendFormat("SELECT max(fcode) FROM LayoutMst where fcode like '{0}%'", code); object obj = CurrDb.FindObject(sqlstr.ToString()); if (obj.ToString() == "") return code + "00001"; int fnum = int.Parse(obj.ToString().Substring(1, 5)); fnum++; return code + fnum.ToString().PadLeft(5, '0'); } catch (Exception ex) { errorinfo = ex.Message.ToString(); return ""; } } public LayoutMst IULayoutMst(LayoutMst mst,List details, string usercode, ref string errorinfo) { try { LayoutMst result = IULayoutMst(mst, usercode, ref errorinfo); if (result == null) return null; //处理明细 List templist = details.Where(t => t.EntityStatusID == 1).ToList(); foreach (var item in templist) item.PreID = result.ID; int count = CurrDb.InsertFor(templist, usercode); if (count < 0) return null; templist = details.Where(t => t.EntityStatusID == 2).ToList(); count = CurrDb.UpdateFor(templist, usercode); if (count < 0) return null; templist = details.Where(t => t.EntityStatusID == -1).ToList(); count = CurrDb.DeleteForEntity(templist); if (count < 0) return null; return result; } catch (Exception e) { errorinfo = e.Message; return null; } } //private string GetTLcdCode(ref string errorinfo) //{ // try // { // StringBuilder sqlstr = new StringBuilder(100); // string code = "L"; // sqlstr.AppendFormat("SELECT max(fcode) FROM TLcd where fcode like '{0}%'", code); // object obj = CurrDb.FindObject(sqlstr.ToString()); // if (obj.ToString() == "") // return code + "00001"; // int fnum = int.Parse(obj.ToString().Substring(1, 5)); // fnum++; // return code + fnum.ToString().PadLeft(5, '0'); // } // catch (Exception ex) // { // errorinfo = ex.Message.ToString(); // return ""; // } //} public LayoutMst DelLayoutMst(List mst, string usercode, ref string errorinfo) { try { foreach(var item in mst) { int result = DelLayoutMst(item, usercode, ref errorinfo); if (result < 0) return null; } return mst[0]; } catch (Exception e) { errorinfo = e.Message; return null; } } private int DelLayoutMst(LayoutMst mst, string usercode, ref string errorinfo) { try { string condition = $" and {EntityAttribute.GetPropertyCondition(nameof(LayoutDetail.PreID))}={mst.ID}"; int result = CurrDb.DeleteForCondition(condition); if (result < 0) return -1; result = CurrDb.DeleteFor(mst.ID); if (result < 0) return -1; return 1; } catch (Exception e) { errorinfo = e.Message; return 1; } } public LayoutMst ReadOrderMst(LayoutMst mst,List macorders,List orderstatus, ref string errorinfo) { try { string condition = $" and b.fcode in(SELECT b.FCode FROM layoutdetail a inner join tentity b on a.EntityID = b.id where a.PreID = {mst.ID} and b.FType = 1)"; List temporders = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); macorders.AddRange(temporders); condition = $@" and a.preid in(select tt.PreID from macorder tt inner join machine ma on tt.MacID = ma.id where ma.fcode in( SELECT b.FCode FROM layoutdetail a inner join tentity b on a.EntityID = b.id where a.PreID = {mst.ID} and b.FType = 1))"; List tempstatus = CurrDb.FindListForCondition(condition, ref errorinfo).ToList(); orderstatus.AddRange(tempstatus); return mst; } catch (Exception e) { errorinfo = e.Message; return null; } } } }