using System.Collections; using Estsh.Core.Dapper; using Estsh.Core.Models; using System.Data; using System.Text; using Dapper; using Estsh.Core.Repository.IRepositories; using Estsh.Core.Model.Result; using Estsh.Core.Model.ExcelModel; /*************************************************************************************************** * * 更新人:sitong.dong * 描述:BOM管理数据访问类 * 修改时间:2022.06.22 * 修改日志:系统迭代升级 * **************************************************************************************************/ namespace Estsh.Core.Repositories { /// /// BOM管理数据访问类 /// public class BOMDefineRepository : BaseRepository, IBOMDefineRepository { public BOMDefineRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext) { } #region 成员方法 /// /// 获取下拉框菜单数据,这里显示的是配置信息 /// /// public List getSelectModel(String modelType) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("select model_id as [value],model_name as [key] from sys_model where Enabled = 'Y' and model_type_id =@modelType"); DynamicParameters Params = new DynamicParameters(); Params.Add("@modelType", modelType); List result = dbConn.Query(SqlStringBuilder.ToString(), Params).ToList(); return result; } } /// /// 获取下拉框菜单数据,这里显示的是零件号 /// /// public List getSelectPartNo(String bomType, String model) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); StringBuilder sqlbuilder = new StringBuilder(); if (model == null || model.ToLower().Equals("null")) { //DynamicParameters parameters = new DynamicParameters(); //parameters.Add("@bom_type", bomType); //SqlStringBuilder.Append("SELECT DISTINCT "); //SqlStringBuilder.Append(" b.part_id as [value],b.part_no as [key] "); //SqlStringBuilder.Append("FROM dbo.sys_bom a , "); //SqlStringBuilder.Append(" dbo.sys_part b "); //SqlStringBuilder.Append("WHERE a.part_id = b.part_id and bom_type=@bom_type and a.enabled='Y' "); //SqlStringBuilder.Append("ORDER BY b.part_no "); SqlStringBuilder.Append("SELECT DISTINCT "); SqlStringBuilder.Append(" b.part_id as [value],b.part_no as [key] "); SqlStringBuilder.Append("FROM dbo.sys_bom a , "); SqlStringBuilder.Append(" dbo.sys_part b "); SqlStringBuilder.Append("WHERE a.part_id = b.part_id and a.enabled='Y' "); SqlStringBuilder.Append("ORDER BY b.part_no "); List result = dbConn.Query(SqlStringBuilder.ToString()).ToList(); return result; } else { DynamicParameters parameters = new DynamicParameters(); parameters.Add("@bom_type", bomType); parameters.Add("@model_id", model); if (bomType == "10")//绑定 { sqlbuilder.AppendLine(" select DISTINCT d.part_id as [value],d.part_no as [key] "); sqlbuilder.AppendLine(" from sys_bom a"); sqlbuilder.AppendLine(" JOIN sys_part b ON a.part_id=b.part_id"); sqlbuilder.AppendLine(" JOIN sys_bom_detail c ON a.bom_id=c.bom_id "); sqlbuilder.AppendLine(" join sys_part d ON d.part_id=c.item_part_id "); sqlbuilder.AppendLine(" JOIN sys_model e ON e.model_name=b.part_no "); sqlbuilder.AppendLine(" where e.model_id = @model_id and d.enabled = 'Y' "); sqlbuilder.AppendLine(" ORDER BY d.part_no "); } else if (bomType == "20")//回冲 { sqlbuilder.Append("SELECT DISTINCT "); sqlbuilder.Append(" d.part_id AS [value] ,d.part_no AS [key] "); sqlbuilder.Append("FROM dbo.sys_bom a "); sqlbuilder.Append(" LEFT JOIN dbo.sys_part b ON a.part_id = b.part_id "); sqlbuilder.Append(" AND b.part_type = 2 "); sqlbuilder.Append(" LEFT JOIN dbo.sys_bom_detail c ON a.bom_id = c.bom_id "); sqlbuilder.Append(" LEFT JOIN dbo.sys_part d ON c.item_part_id = d.part_id "); sqlbuilder.Append("WHERE b.model_id = @model_id and a.enabled='Y' "); sqlbuilder.Append("ORDER BY d.part_no "); } else { sqlbuilder.AppendLine("SELECT DISTINCT b.part_id as [value],b.part_no as [key] "); sqlbuilder.AppendLine("FROM dbo.sys_bom a, dbo.sys_part b "); sqlbuilder.AppendLine("WHERE a.part_id = b.part_id "); sqlbuilder.AppendLine(" AND bom_type = @bom_type "); sqlbuilder.AppendLine(" AND b.model_id = @model_id and a.enabled='Y' "); sqlbuilder.AppendLine("ORDER BY b.part_no "); } List result = dbConn.Query(sqlbuilder.ToString(), parameters).ToList(); return result; } } } /// /// 获取获取工站数据列表 /// /// /// public List getProcessData(int factoryId) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT b.process_id as [value],b.process_name as [key] "); SqlStringBuilder.Append("FROM sys_stage a, sys_process b "); SqlStringBuilder.Append("WHERE b.stage_id = a.stage_id "); SqlStringBuilder.Append("AND b.factory_id = @factory_id "); SqlStringBuilder.Append("AND a.enabled = 'Y' "); SqlStringBuilder.Append("AND b.enabled = 'Y' "); SqlStringBuilder.Append("ORDER BY a.stage_code "); SqlStringBuilder.Append(" , b.process_code "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@factory_id", factoryId); List result = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return result; } } /// /// 获取BOM数据列表 /// /// /// /// /// /// public List getBOMList(String bomType, String partId, String sort, String direction, string pdline, string enabled) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT a.part_id "); SqlStringBuilder.Append(" , a.bom_id "); SqlStringBuilder.Append(" , b.item_part_id "); SqlStringBuilder.Append(" , d.part_no "); SqlStringBuilder.Append(" , d.part_spec "); SqlStringBuilder.Append(" , e.part_no AS item_part_no "); SqlStringBuilder.Append(" , e.part_spec AS item_part_spec "); SqlStringBuilder.Append(" , b.step_type "); SqlStringBuilder.Append(" , b.item_group "); SqlStringBuilder.Append(" , b.location "); SqlStringBuilder.Append(" , b.unit "); SqlStringBuilder.Append(" , b.vitual_part "); SqlStringBuilder.Append(" , b.version "); SqlStringBuilder.Append(" , c.process_name "); SqlStringBuilder.Append(" , c.process_id "); SqlStringBuilder.Append(" , b.guid "); SqlStringBuilder.Append("FROM sys_bom a, sys_bom_detail b "); if (bomType == "10")//绑定 { SqlStringBuilder.Append(" LEFT JOIN sys_process c ON b.process_id = c.process_id LEFT JOIN dbo.sys_terminal f ON c.process_id=f.process_id, sys_part d, sys_part e "); } else { SqlStringBuilder.Append(" LEFT JOIN sys_process c ON b.process_id = c.process_id , sys_part d, sys_part e "); } SqlStringBuilder.Append("WHERE a.part_id = d.part_id "); SqlStringBuilder.Append(" AND b.item_part_id = e.part_id "); SqlStringBuilder.Append(" AND a.bom_id = b.bom_id "); if (bomType == "10")//绑定 { SqlStringBuilder.Append(" AND f.pdline_id=@pdline "); } SqlStringBuilder.Append(" AND d.part_id = @part_id "); SqlStringBuilder.Append(" AND a.bom_type = @bom_type "); if (!string.IsNullOrEmpty(enabled)) { SqlStringBuilder.Append(" AND a.enabled = @enabled "); } //SqlStringBuilder.Append("ORDER BY e.part_no "); SqlStringBuilder.Append("ORDER BY process_name, e.part_no "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@part_id", partId); parameters.Add("@bom_type", bomType); parameters.Add("@pdline", pdline == "null" ? 0 : pdline); if (!string.IsNullOrEmpty(enabled)) { parameters.Add("@enabled", enabled); } List result = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return result; } } /// /// 获取导出BOM数据列表 /// /// /// /// /// /// public List getExpotBOMList(String bomType, String partId, String sort, String direction) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT "); SqlStringBuilder.Append(" d.part_no as part_no_f ");//父阶零件号 SqlStringBuilder.Append(" , e.part_no as part_no_z ");//子阶零件号 SqlStringBuilder.Append(" , a.bom_type ");//BOM类型 SqlStringBuilder.Append(" , '' as 'ItemGroup' ");//分组 SqlStringBuilder.Append(" , b.location ");//位置 SqlStringBuilder.Append(" , '' as 'Version' ");//版本 SqlStringBuilder.Append(" , c.process_name ");//工站 SqlStringBuilder.Append(" , b.step_type ");//工步序号 SqlStringBuilder.Append(" , 'N' as 'virtual_order' ");//虚阶 SqlStringBuilder.Append(" , d.part_spec AS 'part_spec_f' ");//父阶零件号描述 SqlStringBuilder.Append(" , e.part_spec AS 'part_spec_z' ");//子阶零件号描述 //SqlStringBuilder.Append(" , c.process_name AS '流程名称' "); //SqlStringBuilder.Append(" , b.location AS '显示位置' "); SqlStringBuilder.Append("FROM sys_bom a, sys_bom_detail b "); SqlStringBuilder.Append(" LEFT JOIN sys_process c ON b.process_id = c.process_id, sys_part d, sys_part e "); SqlStringBuilder.Append("WHERE a.part_id = d.part_id "); SqlStringBuilder.Append(" AND b.item_part_id = e.part_id "); SqlStringBuilder.Append(" AND a.bom_id = b.bom_id "); SqlStringBuilder.Append(" AND d.part_id = @part_id "); SqlStringBuilder.Append(" AND a.bom_type = @bom_type "); SqlStringBuilder.Append(" AND a.enabled = 'Y' "); SqlStringBuilder.Append("ORDER BY e.part_no "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@part_id", partId); parameters.Add("@bom_type", bomType); List result = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return result; } } public List exportALL(String bomType, String sort, String direction) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" d.part_no_f ");//父阶零件号 SqlStringBuilder.Append(" , e.part_no_z ");//子阶零件号 SqlStringBuilder.Append(" , a.bom_type ");//BOM类型 SqlStringBuilder.Append(" , '' as 'ItemGroup' ");//分组 SqlStringBuilder.Append(" , b.location ");//位置 SqlStringBuilder.Append(" , '' as 'Version' ");//版本 SqlStringBuilder.Append(" , c.process_name ");//工站 SqlStringBuilder.Append(" , b.step_type ");//工步序号 SqlStringBuilder.Append(" , 'N' as 'virtual_order' ");//虚阶 SqlStringBuilder.Append(" , d.part_spec AS 'part_spec_f' ");//父阶零件号描述 SqlStringBuilder.Append(" , e.part_spec AS 'part_spec_z' ");//子阶零件号描述 SqlStringBuilder.Append("FROM sys_bom a , "); SqlStringBuilder.Append("sys_bom_detail b "); SqlStringBuilder.Append("LEFT JOIN sys_process c ON b.process_id = c.process_id , "); SqlStringBuilder.Append("sys_part d , "); SqlStringBuilder.Append("sys_part e "); SqlStringBuilder.Append("WHERE a.part_id = d.part_id "); SqlStringBuilder.Append("AND b.item_part_id = e.part_id "); SqlStringBuilder.Append("AND a.bom_id = b.bom_id "); SqlStringBuilder.Append("AND a.bom_type = @bom_type "); //lvf 20210317 加入过滤条件,过滤禁用的BOM SqlStringBuilder.Append(" AND a.enabled = 'Y' and d.enabled = 'Y' "); SqlStringBuilder.Append("ORDER BY d.part_no , "); SqlStringBuilder.Append("e.part_no "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@bom_type", bomType); List result = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return result; } } /// /// 根据客户零件号查询零件编号 /// /// 客户零件号 /// 零件编号 public int GetPartIDByCPN(string cpn) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "SELECT part_id FROM dbo.sys_part WHERE cust_part_no=@cpn AND enabled='Y'"; DynamicParameters parameters = new DynamicParameters(); parameters.Add("@cpn", cpn); object obj = dbConn.ExecuteScalar(SqlString, parameters); if (obj == null) return 0; return Convert.ToInt32(obj); } } /// /// 根据零件号 或 客户零件号 查询零件编号 /// /// 零件号 或 客户零件号 /// 零件编号 public int GetPartID(string partNO) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "SELECT part_id FROM dbo.sys_part WHERE part_no=@partNo AND enabled='Y' union SELECT part_id FROM dbo.sys_part WHERE cust_part_no=@partNo"; DynamicParameters parameters = new DynamicParameters(); parameters.Add("@partNo", partNO); object obj = dbConn.ExecuteScalar(SqlString, parameters); return obj == null ? 0 : Convert.ToInt32(obj); } } /// /// 通过part_id获取bom类型 /// /// /// public string GetBOMType(int bomID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "select bom_type from dbo.sys_bom where bom_id=@bom_id "; DynamicParameters parameters = new DynamicParameters(); parameters.Add("@bom_id", bomID); object obj = dbConn.ExecuteScalar(SqlString, parameters); if (obj == null) return string.Empty; return obj.ToString(); } } /// /// 通过part_no获取part_id类型 /// /// /// public string GetBOMPartId(string partNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "SELECT TOP 1 part_id FROM dbo.sys_part WHERE part_no=@partNo"; DynamicParameters parameters = new DynamicParameters(); parameters.Add("@partNo", partNo); object obj = dbConn.ExecuteScalar(SqlString, parameters); if (obj == null) return string.Empty; return obj.ToString(); } } /// /// 根据零件号和bom类型获取bomID /// /// /// /// public int GetBOMID(string partNo, int bomType) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "select a.bom_id from sys_bom a, sys_part b where a.part_id=b.part_id and a.enabled='Y' and b.part_no=@partNo and a.bom_type=@bom_type"; DynamicParameters parameters = new DynamicParameters(); parameters.Add("@partNo", partNo); parameters.Add("@bom_type", bomType); List result = dbConn.Query(SqlString, parameters).ToList(); if (result == null) return 0; if (result.Count == 0) return 0; return Convert.ToInt32(result[0].BomId.ToString()); } } //更新表字段 public bool UpdateBOMDetail(SysBomDetail values, int bomID, int itemPartID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE sys_bom_detail SET "); SqlStringBuilder.Append(@"bom_id=@bomId,part_id=@partId,part_no=@partNo,step_type=@stepType,item_part_id=@itemPartId, item_group=@itemGroup,process_id=@processId,version=@version,location=@location,vitual_part=@vitualPart ,update_userid = @updateUserId ,update_time=CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(" Where bom_id=" + bomID + " and item_part_id=" + itemPartID); return dbConn.Execute(SqlStringBuilder.ToString(), values) > 0 ? true : false; } } public bool UpdateBOMDetail(SysBomDetail values, string guid) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE sys_bom_detail SET "); SqlStringBuilder.Append(@"bom_id=@bomId,part_id=@partId,part_no=@partNo,step_type=@stepType,item_part_id=@itemPartId, item_group=@itemGroup,process_id=@processId,version=@version,location=@location,vitual_part=@vitualPart ,update_userid = @updateUserId ,update_time=CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(" Where guid='" + guid + "'"); return dbConn.Execute(SqlStringBuilder.ToString(), values) > 0 ? true : false; } } /// /// 删除 BOM 明细表 /// /// /// public bool DeleteBOMDetail(int bomID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); if (bomID == 0) return false; List SqlStrings = new List(3); List Parameters = new List(); DynamicParameters Params = new DynamicParameters(); Params.Add("@bom_id", bomID); SqlStrings.Add("update sys_bom_match set Enabled='N' WHERE bom_id=@bom_id"); Parameters.Add(Params); SqlStrings.Add("update sys_bom_detail set Enabled='N' WHERE bom_id=@bom_id"); Parameters.Add(Params); for (int i = 0; i < SqlStrings.Count; i++) { object obj = dbConn.Execute(SqlStrings[i], Parameters[i]); } return true; } } //启用 public int EnableData(String ids) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); DynamicParameters Params = new DynamicParameters(); Params.Add("@bom_id", ids); string SqlStrings = "update sys_bom_ set Enabled='Y' WHERE bom_id=@bom_id"; int obj = dbConn.Execute(SqlStrings, Params); return obj; } } //禁用 public int DisableData(String ids) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); DynamicParameters Params = new DynamicParameters(); Params.Add("@bom_id", ids); string SqlStrings="update sys_bom_ set Enabled='N' WHERE bom_id=@bom_id"; int obj = dbConn.Execute(SqlStrings, Params); return obj; } } /// /// 根据Guid删除BomDetail数据 /// /// /// public int DeleteBOMDetial(String guid) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); if (guid == null) return 0; String delStr = "update sys_bom_detail set Enabled='N' where guid ='" + guid + "'"; object obj = dbConn.Execute(delStr); return Convert.ToInt32(obj); } } /// /// 判断零件号是否已经定义了 KPSN RULE /// /// /// public bool ExistsPartSNRule(int partID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "select top 1 1 from dbo.sys_part_sn_rule where part_id=@part_id"; DynamicParameters Params = new DynamicParameters(); Params.Add("@part_id", partID); object obj = dbConn.ExecuteScalar(SqlString, Params); return Convert.ToInt32(obj) != null; } } /// /// 判断流程是否存在 /// /// /// public int ExistsProcessId(string processName) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "SELECT * FROM dbo.sys_process WHERE process_name=@processName and a.enabled='Y' "; DynamicParameters Params = new DynamicParameters(); Params.Add("@processName", processName); object obj = dbConn.ExecuteScalar(SqlString, Params); return obj == null ? 0 : Convert.ToInt32(obj); } } /// /// 为特征 BOM 产生匹配清单,用于发运绑定时的车型匹配 /// /// /// public bool BuildBOMMatchForTransBind(int bomID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT c.fix1 "); SqlStringBuilder.Append("FROM dbo.sys_bom a , "); SqlStringBuilder.Append(" dbo.sys_bom_detail b , "); SqlStringBuilder.Append(" dbo.sys_part_sn_rule c "); SqlStringBuilder.Append("WHERE a.bom_id = b.bom_id "); SqlStringBuilder.Append(" AND b.item_part_id = c.part_id "); SqlStringBuilder.Append(" AND a.bom_id = @bom_id and a.enabled='Y' "); SqlStringBuilder.Append("ORDER BY c.fix1 "); DynamicParameters Params = new DynamicParameters(); Params.Add("@bom_id", bomID); List slist1 = dbConn.Query(SqlStringBuilder.ToString(), Params).ToList(); if (slist1 == null) return false; if (slist1.Count == 0) return false; string MatchContent = string.Empty; for (int i = 0; i < slist1.Count; i++) { MatchContent += slist1[i].Fix1.ToString() + " "; } Params = new DynamicParameters(); Params.Add("bom_id", bomID); Params.Add("match_content", MatchContent.Trim()); Hashtable hsParams = new Hashtable(); hsParams.Add("bom_id", bomID); hsParams.Add("match_content", MatchContent.Trim()); String sql = "Delete from sys_bom_match where bom_id = " + bomID; object obj = dbConn.Execute(sql); StringBuilder sqlInsert = new StringBuilder(1024); sqlInsert.Append("INSERT INTO dbo.sys_bom_match(bom_id,match_content,enabled) values"); sqlInsert.Append("(@bom_id,@match_content,'Y'))"); int result = dbConn.Execute(sqlInsert.ToString(), hsParams); return result > 0 ? true : false; } } /// /// 从 SYS_BASE 表中读取 BOMMatchByCPN 参数 /// 判断生成车型匹配字符串时是否使用 sys_part.cust_part_no 字段 /// /// public bool BOMMatchByCPN() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = "select 1 from dbo.sys_base where param_name='BOMMatchByCPN' and param_value='Y' and a.enabled='Y' "; object obj = dbConn.ExecuteScalar(SqlString); return obj != null; } } /// /// 更新 BOM 匹配表,用于车型匹配 /// /// /// public bool BuildBOMMatch(int bomID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string SqlString = string.Empty; bool isBomByCPN; // 如果系统参数配置了使用客户零件号,则用其组合匹配字符串 if (BOMMatchByCPN()) { SqlString = @"select b.cust_part_no from sys_bom_detail a, sys_part b where a.item_part_id=b.part_id and a.enabled='Y' and a.bom_id=@bom_id order by b.cust_part_no "; isBomByCPN = true; } else { SqlString = @"select b.part_no from sys_bom_detail a, sys_part b where a.item_part_id=b.part_id and a.enabled='Y' and a.bom_id=@bom_id order by b.part_no"; isBomByCPN = false; } DynamicParameters Params = new DynamicParameters(); Params.Add("@bom_id", bomID); List slist1 = dbConn.Query(SqlString, Params).ToList(); if (slist1 == null) return false; if (slist1.Count == 0) return false; string MatchContent = string.Empty; for (int i = 0; i < slist1.Count; i++) { if (isBomByCPN == true) { MatchContent += slist1[i].CustPartNo.ToString() + " "; } else { MatchContent += slist1[i].PartNo.ToString() + " "; } } Params = new DynamicParameters(); Params.Add("bom_id", bomID); Params.Add("match_content", MatchContent.Trim()); Hashtable hsParams = new Hashtable(); hsParams.Add("bom_id", bomID); hsParams.Add("match_content", MatchContent.Trim()); String sql = "delete from sys_bom_match where bom_id =" + bomID; object obj = dbConn.Execute(sql); StringBuilder sqlInsert = new StringBuilder(1024); sqlInsert.Append("INSERT INTO dbo.sys_bom_match(bom_id,match_content,enabled) values"); sqlInsert.Append("(@bom_id,@match_content,'Y'))"); int result = dbConn.Execute(sqlInsert.ToString(), hsParams); return result > 0 ? true : false; } } public bool InsertData(List dt, bool isBOMMatchByCPN) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); List Parts = new List(dt.Count); List SqlStrings = new List(dt.Count); List hs = new List(dt.Count); int ProcessID = 0; for (int i = 0; i < dt.Count; i++) { // 跳过空行 if (string.IsNullOrEmpty(dt[i].PartNoF.ToString().Trim()) || string.IsNullOrEmpty(dt[i].PartNoZ.ToString().Trim())) continue; ProcessID = GetProcessID(dt[i].ProcessName.ToString()); // 跳过 父零件号+子零件号+工站 重复的行 if (!Parts.Contains(dt[i].PartNoF.ToString() + dt[i].PartNoZ.ToString() + ProcessID.ToString())) { Parts.Add(dt[i].PartNoF.ToString() + dt[i].PartNoZ.ToString() + ProcessID.ToString()); } else { continue; } StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_bom_detail "); SqlStringBuilder.Append(" ( bom_id , "); SqlStringBuilder.Append(" part_id , "); SqlStringBuilder.Append(" item_part_id , "); SqlStringBuilder.Append(" item_group , "); SqlStringBuilder.Append(" location , "); SqlStringBuilder.Append(" version , "); SqlStringBuilder.Append(" process_id , "); SqlStringBuilder.Append(" step_type , "); SqlStringBuilder.Append(" vitual_part, "); SqlStringBuilder.Append(" enabled, "); SqlStringBuilder.Append(" create_userid ,"); SqlStringBuilder.Append(" create_time ,"); SqlStringBuilder.Append(" guid "); SqlStringBuilder.Append(" ) "); SqlStringBuilder.Append("VALUES ( "); SqlStringBuilder.Append(" @bom_id, "); SqlStringBuilder.Append(" @part_id, "); SqlStringBuilder.Append(" @item_part_id, "); SqlStringBuilder.Append(" @item_group , "); SqlStringBuilder.Append(" @location , "); SqlStringBuilder.Append(" @version , "); SqlStringBuilder.Append(" @process_id , "); SqlStringBuilder.Append(" @step_type , "); SqlStringBuilder.Append(" @vitual_part, "); SqlStringBuilder.Append(" 'Y' ,"); SqlStringBuilder.Append(" @createUserid ,"); SqlStringBuilder.Append(" CONVERT(varchar(50), GETDATE(), 21),"); SqlStringBuilder.Append(" newid() "); SqlStringBuilder.Append(" ) "); int BomID = GetBOMID(dt[i].PartNoF.ToString(), int.Parse(dt[i].BomType.ToString())); int PartID = GetPartID(dt[i].PartNoF.ToString()); int ItemPartID = GetPartID(dt[i].PartNoZ.ToString()); ; DynamicParameters values = new DynamicParameters(); values.Add("@bom_id", BomID); values.Add("@part_id", PartID); values.Add("@item_part_id", ItemPartID); values.Add("@item_group", dt[i].ItemGroup.ToString()); values.Add("@location", dt[i].location.ToString()); values.Add("@version", dt[i].version.ToString()); values.Add("@process_id", ProcessID); values.Add("@step_type", string.IsNullOrEmpty(dt[i].StepType.ToString()) ? 0 : Convert.ToDouble(dt[i].StepType.ToString())); values.Add("@vitual_part", dt[i].VirtualOrder.ToString()); SqlStrings.Add(SqlStringBuilder.ToString()); hs.Add(values); } for (int i = 0; i < SqlStrings.Count; i++) { object obj = dbConn.Execute(SqlStrings[i], hs[i]); } return true; } } public int GetProcessID(string processName) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); int ProcessID = 0; int.TryParse(processName, out ProcessID); // 如果用户填的是 PROCESS_ID 则直接返回 if (ProcessID != 0) return ProcessID; string SqlString = "select process_id from dbo.sys_process where process_name=@process_name and a.enabled='Y' "; DynamicParameters Params = new DynamicParameters(); Params.Add("@process_name", processName); object obj = dbConn.ExecuteScalar(SqlString, Params); return obj != null ? Convert.ToInt32(obj) : 0; } } /// /// 新增BOM /// /// /// public bool InsertBOM(SysBom Params) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder sqlInsert = new StringBuilder(1024); sqlInsert.Append("INSERT INTO dbo.sys_bom(part_id,bom_type,create_userid, create_time,enabled) values"); sqlInsert.Append("(@partId,@bomType,@createUserid, CONVERT(varchar(50), GETDATE(), 21),@enabled)"); int result = dbConn.Execute(sqlInsert.ToString(), Params); return result > 0 ? true : false; } } /// /// 根据 BOM ID 删除整个 BOM (主表和所有系表) /// /// BOM ID /// public bool DeleteBOM(int bomID) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); if (bomID == 0) return false; List SqlStrings = new List(3); List Parameters = new List(); DynamicParameters Params = new DynamicParameters(); Params.Add("@bom_id", bomID); SqlStrings.Add("update sys_bom_match set Enabled='N' WHERE bom_id=@bom_id"); Parameters.Add(Params); SqlStrings.Add("update sys_bom_detail set Enabled='N' WHERE bom_id=@bom_id"); Parameters.Add(Params); SqlStrings.Add("update sys_bom set Enabled='N' WHERE bom_id=@bom_id"); Parameters.Add(Params); for (int i = 0; i < SqlStrings.Count; i++) { object obj = dbConn.Execute(SqlStrings[i], Parameters[i]); } return true; } } /// /// 为特征 BOM 产生匹配清单,用于发运绑定时的车型匹配 /// /// /// public bool insertBom(string tableName, SysBom Params) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder sqlInsert = new StringBuilder(1024); sqlInsert.Append("INSERT INTO dbo." + tableName + "(part_id,bom_type,enabled,create_userid, create_time) values"); sqlInsert.Append("(@partId,@bomType,'Y',@createUserid, CONVERT(varchar(50), GETDATE(), 21)))"); int result = dbConn.Execute(sqlInsert.ToString(), Params); return result > 0 ? true : false; } } public bool insertBomDetail(string tableName, SysBomDetail Params) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_bom_detail "); SqlStringBuilder.Append("(bom_id,part_id,part_no,enabled,item_part_id,item_part_no ,item_group,process_id,version,location "); SqlStringBuilder.Append(",unit,vitual_part,enabled,update_userid,update_time,create_userid,create_time "); SqlStringBuilder.Append(",step_type,only_retrospect) "); SqlStringBuilder.Append(" VALUES (@bomId,@partid ,@partno,'Y',@itempartid,@itempartno,@itemgroup ,@processid,@version "); SqlStringBuilder.Append(",@location,@unit,@vitualpart,@enabled,@updateuserid,CONVERT(varchar(50), GETDATE(), 21),@createuserid,CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(",@steptype,@onlyretrospect) "); int result = dbConn.Execute(SqlStringBuilder.ToString(), Params); return result > 0 ? true : false; } } #endregion 成员方法 } }