using System; using System.Collections.Generic; using System.Linq; using System.Text; using ICSSoft.Frame.Data.Entity; using ICSSoft.Base.Config.AppConfig; using System.Data; using ICSSoft.Base.Config.DBHelper; using ICSSoft.Frame.Helper; using System.Collections; namespace ICSSoft.Frame.Data.DAL { public class ICSOPBOMDAL { public static readonly string OPBOMITEMTYPE_DEFAULT = "lot"; public static readonly string OPBOMVERSION_DEFAULT = "1"; public static readonly string OPBOMISItemCheckValue_DEFAULT = "0"; public static readonly string OPBOMItemCheckValue_DEFAULT = "0000000"; public static readonly string OPBOMItemUOM_DEFAULT = "OPBOMItemUOM"; private FramDataContext _domainDataProvider = null; public ICSOPBOMDAL(FramDataContext domainDataProvider) { this._domainDataProvider = domainDataProvider; } #region 新增和修改 public static void Add(List tbInfoList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (ICSOPBOM tbinfo in tbInfoList) { bool isNew = false; var line = db.ICSOPBOM.SingleOrDefault(a => a.ITEMCODE == tbinfo.ITEMCODE && a.OBCODE == tbinfo.OBCODE && a.OPBOMVER == tbinfo.OPBOMVER ); if (line == null) { isNew = true; line = new ICSOPBOM(); line.ITEMCODE = tbinfo.ITEMCODE; line.OBCODE = tbinfo.OBCODE; line.OPBOMVER = tbinfo.OPBOMVER; } line.WorkPoint = tbinfo.WorkPoint; line.ITEMID = tbinfo.ITEMID; line.OBROUTE = tbinfo.OBROUTE; line.OPDESC = tbinfo.OPDESC; line.MUSER = tbinfo.MUSER; line.MUSERName = tbinfo.MUSERName; line.MTIME = tbinfo.MTIME; line.EATTRIBUTE1 = tbinfo.EATTRIBUTE1; line.AVIALABLE = tbinfo.AVIALABLE; if (isNew) db.ICSOPBOM.InsertOnSubmit(line); db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion public ICSOPBOM GetOPBOMByRouteCode(string itemCode, string routeCode, string bomVersion) { string sql = "select * from ICSOPBOM where 1=1 {0}"; string tmpString = string.Empty; if ((itemCode != string.Empty) && (itemCode.Trim() != string.Empty)) { tmpString += " and itemcode ='" + itemCode.Trim() + "'"; } if ((routeCode != string.Empty) && (routeCode.Trim() != string.Empty)) { tmpString += " and obroute ='" + routeCode.Trim() + "'"; } if ((bomVersion != string.Empty) && (bomVersion.Trim() != string.Empty)) { tmpString += " and opbomver ='" + bomVersion.Trim() + "'"; } tmpString += " and WorkPoint='"+AppConfig.WorkPointCode+"'" ; //工单途程是否有上料工序 bool IsComponetLoading = this.CheckItemRouteIsContainComponetLoading(itemCode, routeCode); List objsOp = this.GetItemRouteIsContainComponetLoading(itemCode, routeCode); List objs = this._domainDataProvider.ExecuteQuery(String.Format(sql, tmpString)).ToList(); //检查工单途程是否有上料工序,如果有则OPBOM不允许为空并抛出异常,否则则新增一个OPBOM插入数据库,并返回这个OPBOM,不再抛出异常 if (objs == null) { if (IsComponetLoading) { throw new Exception("$Error_OPBOMNotExist1"+string.Format("[$ItemCode='{0}',$RouteCode='{1}']", itemCode, routeCode)); } else { ICSOPBOM opBOM = CreateNewOPBOM(); opBOM.ITEMCODE = itemCode; opBOM.OBROUTE = routeCode; opBOM.MUSER = AppConfig.UserCode; opBOM.MUSERName = AppConfig.UserName; opBOM.OBCODE = routeCode; opBOM.WorkPoint = AppConfig.WorkPointCode; opBOM.OPBOMVER = bomVersion; this.AddOPBOM(opBOM); return opBOM; } } else { if (IsComponetLoading) { foreach (ICSITEMROUTE2OP opbom in objsOp) { string selectSql = "select count(*) from ICSopbomdetail where 1= 1 {0} and WorkPoint='" +AppConfig.WorkPointCode+ "'"; string tmpString2 = " and itemcode ='" + itemCode.Trim() + "' "; tmpString2 += " and opcode='" + opbom.OPCODE.Trim() + "'"; string opcodesSelect = string.Format(" AND obcode = '" + ((ICSOPBOM)objs[0]).OBCODE.Trim() + "' "); tmpString2 += opcodesSelect; int result = _domainDataProvider.ExecuteQuery(String.Format(selectSql, tmpString2)).First(); if (!(result > 0)) { throw new Exception("$Error_OPBOMNotExist1"+string.Format("[$ItemCode='{0}',$RouteCode='{1}',$OpCode='{2}']", itemCode, routeCode, opbom.OPCODE), null); } } } } return objs[0]; } #region 检查产品途程是否包含上料工序 public bool CheckItemRouteIsContainComponetLoading(string itemcode, string routecode) { bool returnbool = false; string sql = string.Format("select * from ICSITEMRoute2OP WHERE itemcode = '{0}' AND routecode = '{1}' AND WorkPoint='{2}'", itemcode, routecode, AppConfig.WorkPointCode); List itemroute2ops = this._domainDataProvider.ExecuteQuery(sql).ToList(); if (itemroute2ops != null) { foreach (object _item2op in itemroute2ops) { if (IsComponentLoadingOperation(((ICSITEMROUTE2OP)_item2op).OPCONTROL)) { returnbool = true; break; } } } return returnbool; } public List GetItemRouteIsContainComponetLoading(string itemcode, string routecode) { List objList = new List(); string sql = string.Format("select * from ICSITEMRoute2OP WHERE itemcode = '{0}' AND routecode = '{1}' AND WorkPoint='{2}'", itemcode, routecode, AppConfig.WorkPointCode); List itemroute2ops = this._domainDataProvider.ExecuteQuery(sql).ToList(); if (itemroute2ops != null && itemroute2ops.Count>0) { foreach (ICSITEMROUTE2OP _item2op in itemroute2ops) { if (IsComponentLoadingOperation((_item2op).OPCONTROL)) { objList.Add(_item2op); } } } if (objList.Count > 0) { return objList; } return null; } private bool IsComponentLoadingOperation(string opControl) { return FormatHelper.StringToBoolean(opControl, 0); } /// /// /// /// public ICSOPBOM CreateNewOPBOM() { return new ICSOPBOM(); } /// /// item下BOMCode,暂时不考虑版本版本为1 /// 不考虑版本的升级 /// /// public void AddOPBOM(ICSOPBOM opBOM) { if (opBOM.OPBOMVER.Trim().Length == 0) opBOM.OPBOMVER = OPBOMVERSION_DEFAULT; this._domainDataProvider.ICSOPBOM.InsertOnSubmit(opBOM); } #endregion } }