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 成员方法
}
}