You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

908 lines
42 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// BOM管理数据访问类
/// </summary>
public class BOMDefineRepository : BaseRepository<SysBom>, IBOMDefineRepository
{
public BOMDefineRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
#region 成员方法
/// <summary>
/// 获取下拉框菜单数据,这里显示的是配置信息
/// </summary>
/// <returns></returns>
public List<KeyValueResult> 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<KeyValueResult> result = dbConn.Query<KeyValueResult>(SqlStringBuilder.ToString(), Params).ToList();
return result;
}
}
/// <summary>
/// 获取下拉框菜单数据,这里显示的是零件号
/// </summary>
/// <returns></returns>
public List<KeyValueResult> 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<KeyValueResult> result = dbConn.Query<KeyValueResult>(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<KeyValueResult> result = dbConn.Query<KeyValueResult>(sqlbuilder.ToString(), parameters).ToList();
return result;
}
}
}
/// <summary>
/// 获取获取工站数据列表
/// </summary>
/// <param name="factoryId"></param>
/// <returns></returns>
public List<KeyValueResult> 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<KeyValueResult> result = dbConn.Query<KeyValueResult>(SqlStringBuilder.ToString(), parameters).ToList();
return result;
}
}
/// <summary>
/// 获取BOM数据列表
/// </summary>
/// <param name="bomType"></param>
/// <param name="partNo"></param>
/// <param name="sort"></param>
/// <param name="direction"></param>
/// <returns></returns>
public List<SysBom> 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<SysBom> result = dbConn.Query<SysBom>(SqlStringBuilder.ToString(), parameters).ToList();
return result;
}
}
/// <summary>
/// 获取导出BOM数据列表
/// </summary>
/// <param name="bomType"></param>
/// <param name="partNo"></param>
/// <param name="sort"></param>
/// <param name="direction"></param>
/// <returns></returns>
public List<BOMDefine> 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<BOMDefine> result = dbConn.Query<BOMDefine>(SqlStringBuilder.ToString(), parameters).ToList();
return result;
}
}
public List<BOMDefine> 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<BOMDefine> result = dbConn.Query<BOMDefine>(SqlStringBuilder.ToString(), parameters).ToList();
return result;
}
}
/// <summary>
/// 根据客户零件号查询零件编号
/// </summary>
/// <param name="cpn">客户零件号</param>
/// <returns>零件编号</returns>
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);
}
}
/// <summary>
/// 根据零件号 或 客户零件号 查询零件编号
/// </summary>
/// <param name="partNO">零件号 或 客户零件号</param>
/// <returns>零件编号</returns>
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);
}
}
/// <summary>
/// 通过part_id获取bom类型
/// </summary>
/// <param name="bomID"></param>
/// <returns></returns>
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();
}
}
/// <summary>
/// 通过part_no获取part_id类型
/// </summary>
/// <param name="bomID"></param>
/// <returns></returns>
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();
}
}
/// <summary>
/// 根据零件号和bom类型获取bomID
/// </summary>
/// <param name="partNo"></param>
/// <param name="bomType"></param>
/// <returns></returns>
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<SysBom> result = dbConn.Query<SysBom>(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;
}
}
/// <summary>
/// 删除 BOM 明细表
/// </summary>
/// <param name="bomID"></param>
/// <returns></returns>
public bool DeleteBOMDetail(int bomID)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
if (bomID == 0)
return false;
List<string> SqlStrings = new List<string>(3);
List<DynamicParameters> Parameters = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 根据Guid删除BomDetail数据
/// </summary>
/// <param name="row"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 判断零件号是否已经定义了 KPSN RULE
/// </summary>
/// <param name="partID"></param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 判断流程是否存在
/// </summary>
/// <param name="partID"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 为特征 BOM 产生匹配清单,用于发运绑定时的车型匹配
/// </summary>
/// <param name="bomID"></param>
/// <returns></returns>
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<SysBom> slist1 = dbConn.Query<SysBom>(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;
}
}
/// <summary>
/// 从 SYS_BASE 表中读取 BOMMatchByCPN 参数
/// 判断生成车型匹配字符串时是否使用 sys_part.cust_part_no 字段
/// </summary>
/// <returns></returns>
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;
}
}
/// <summary>
/// 更新 BOM 匹配表,用于车型匹配
/// </summary>
/// <param name="bomID"></param>
/// <returns></returns>
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<SysBomDetail> slist1 = dbConn.Query<SysBomDetail>(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<BOMDefine> dt, bool isBOMMatchByCPN)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
List<string> Parts = new List<string>(dt.Count);
List<String> SqlStrings = new List<string>(dt.Count);
List<DynamicParameters> hs = new List<DynamicParameters>(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;
}
}
/// <summary>
/// 新增BOM
/// </summary>
/// <param name="Params"></param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 根据 BOM ID 删除整个 BOM (主表和所有系表)
/// </summary>
/// <param name="bomID">BOM ID</param>
/// <returns></returns>
public bool DeleteBOM(int bomID)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
if (bomID == 0)
return false;
List<string> SqlStrings = new List<string>(3);
List<DynamicParameters> Parameters = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 为特征 BOM 产生匹配清单,用于发运绑定时的车型匹配
/// </summary>
/// <param name="bomID"></param>
/// <returns></returns>
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 成员方法
}
}