using FactorySystemCommon;
using FactorySystemModel.SqlSugarModel;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using FactorySystemModel.EnumModel;
using FactorySystemModel.RequestModel;
using FactorySystemModel.ResponseModel;
namespace FactorySystemBll
{
public class FormulaBll
{
///
/// 获取配置信息
///
public object GetBasicList(int type)
{
return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FType == type && s.FState == 1).ToList();
}
///
/// 获取配置信息
///
public static List GetFormulaList()
{
int isDelete = (int)Constant.DeleteCode.已删除;
return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FDeleted != isDelete).Distinct().ToList();
}
public List GetFormulaListById(int id)
{
int isDelete = (int)Constant.DeleteCode.已删除;
return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FID == id && s.FDeleted != isDelete).Distinct().ToList();
}
public object GetFormulaByFTestCode(string code)
{
int isDelete = (int)Constant.DeleteCode.已删除;
return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FDeleted != isDelete&&s.FTestCode==code).First();
}
public List GetList(FormulaQuery tr, out int totalNumber)
{
totalNumber = 0;
var db = AppSettingsHelper.GetSqlSugar();
return db.Queryable().Where(s => s.FTestCode != "")
.WhereIF(tr.FName != null, s => s.FName.Contains(tr.FName) || s.FPlmCode.Contains(tr.FPlmCode) || s.FTestCode.Contains(tr.FTestCode) || s.FVersionCode.Contains(tr.FVersionCode))
.Select("*").ToPageList(tr.FPageIndex, tr.FPageSize, ref totalNumber);
}
///
/// 配方数据比对
///
public int DockingRecipeData(List formulaList, int userId)
{
formulaList = formulaList.Where(s => !string.IsNullOrEmpty(s.FPlmCode)).ToList();
if (formulaList.Count == 0) return 1;
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
List updateList = new List();
List insertList = new List();
List factorys = db.Queryable().OrderBy(s => s.FDeleted).ToList();
List materials = db.Queryable().OrderBy(s => s.FDeleted).ToList();
List typeList = db.Queryable().Where(s => s.FType == (int)Constant.BasicCode.配方种类).ToList();
//根据PLM码分组
foreach (var item in formulaList.GroupBy(s => s.FPlmCode))
{
List formulas = db.Queryable().Where(s => s.FPlmCode == item.Key
&& s.FDeleted != (int)Constant.DeleteCode.已删除).ToList();
List temps = item.Where(s1 => !string.IsNullOrEmpty(s1.FVersionCode.Trim())).ToList();
if (temps.Count > 0)//版本号非空
{
//根据版本号分组
foreach (var item2 in item.GroupBy(ss => ss.FVersionCode.Trim()))
{
TFS_Formula formula = formulas.Find(d => d.FVersionCode == item2.Key.Trim());
if (formula == null) formula = formulas.Find(d => d.FVersionCode == "");
TFS_Formula temp = item2.FirstOrDefault();
if (formula != null)
{
formula.FName = temp.FName.Trim();
formula.FDesc = (string.IsNullOrEmpty(temp.FDesc) ? formula.FDesc : temp.FDesc).Trim();
formula.FType = (string.IsNullOrEmpty(temp.FType) ? formula.FType : temp.FType).Trim();
formula.FTestCode = (string.IsNullOrEmpty(temp.FTestCode) ? formula.FTestCode : temp.FTestCode).Trim();
formula.FProductCode = (string.IsNullOrEmpty(temp.FProductCode) ? formula.FProductCode : temp.FProductCode).Trim();
formula.FFactoryCode = (string.IsNullOrEmpty(temp.FFactoryCode) ? formula.FFactoryCode : temp.FFactoryCode).Trim();
formula.FVersionCode = (string.IsNullOrEmpty(temp.FVersionCode) ? formula.FVersionCode : temp.FVersionCode).Trim();
if (!string.IsNullOrEmpty(formula.FFactoryCode))
{
TFS_Factory factory = factorys.Find(s => s.FCode == formula.FFactoryCode);
if (factory == null) factory = factorys.Find(s => s.FName == formula.FFactoryCode);
if (factory == null) formula.FFactoryID = -1;
else formula.FFactoryID = factory.FID;
}
formula.FEditDate = DateTime.Now;
formula.FEditUser = userId;
/**
* 20230401 新增
* 表中增加:
* 转规格人员 FConversionPersonnel
* 开发日期 FDevDate
* BOM版本号 FBomVersionCode
* **/
formula.FConversionPersonnel = (string.IsNullOrEmpty(temp.FConversionPersonnel) ? formula.FConversionPersonnel : temp.FConversionPersonnel).Trim();
formula.FDevDate = DateTime.Now;
formula.FBomVersionCode = (string.IsNullOrEmpty(temp.FBomVersionCode) ? formula.FBomVersionCode : temp.FBomVersionCode).Trim();
// 20230401 根据试验号获取生产号
if (materials != null && materials.Count > 0)
{
TFS_Material material = materials.Find(m => m.FTestCode == formula.FTestCode);
if (material != null && !string.IsNullOrEmpty(material.FCode))
{
formula.FProductCode = material.FCode;
}
}
// 按照协同物料清单下来的逻辑修改配方物料类型
string ftype = formula.FType.ToLower();
if(ftype == "f")
{
formula.FType = "10";
}
else if (ftype == "a")
{
formula.FType = "20";
}
else if (ftype == "b" || ftype == "bb" || ftype == "i" || ftype == "iz")
{
formula.FType = "30";
}
else
{
formula.FType = "40";
}
TBasicCode bType = typeList.Find(s => s.FName == formula.FType || s.FValue == formula.FType);
if (bType != null) formula.FType = bType.FValue;
updateList.Add(formula);
}
else
{
if (!string.IsNullOrEmpty(temp.FFactoryCode))
{
TFS_Factory factory = factorys.Find(s => s.FCode == temp.FFactoryCode);
if (factory == null) factory = factorys.Find(s => s.FName == temp.FFactoryCode);
if (factory == null) temp.FFactoryID = -1;
else temp.FFactoryID = factory.FID;
}
temp.FID = -1;
temp.FAddDate = temp.FEditDate = DateTime.Now;
temp.FEditUser = userId;
/**
* 20230401 新增
* 表中增加:
* 转规格人员 FConversionPersonnel
* 开发日期 FDevDate
* BOM版本号 FBomVersionCode
* **/
temp.FDevDate = DateTime.Now;
// 20230401 根据试验号获取生产号
if (materials != null && materials.Count > 0)
{
TFS_Material material = materials.Find(m => m.FTestCode == temp.FTestCode);
if (material != null && !string.IsNullOrEmpty(material.FCode))
{
temp.FProductCode = material.FCode;
}
}
TBasicCode bType = typeList.Find(s => s.FName == temp.FType || s.FValue == temp.FType);
if (bType != null) temp.FType = bType.FValue;
insertList.Add(temp);
}
}
}
else if (formulas == null || formulas.Count == 0)
{
TFS_Formula temp = item.FirstOrDefault();
temp.FAddDate = temp.FEditDate = DateTime.Now;
temp.FEditUser = userId;
// 按照协同物料清单下来的逻辑修改配方物料类型
string ftype = temp.FType.ToLower();
if (ftype == "f")
{
temp.FType = "10";
}
else if (ftype == "a")
{
temp.FType = "20";
}
else if (ftype == "b" || ftype == "bb" || ftype == "i" || ftype == "iz")
{
temp.FType = "30";
}
else
{
temp.FType = "40";
}
/**
* 20230401 新增
* 表中增加:
* 转规格人员 FConversionPersonnel
* 开发日期 FDevDate
* BOM版本号 FBomVersionCode
* **/
temp.FDevDate = DateTime.Now;
// 20230401 根据试验号获取生产号
if (materials != null && materials.Count > 0)
{
TFS_Material material = materials.Find(m => m.FTestCode == temp.FTestCode);
if (material != null && !string.IsNullOrEmpty(material.FCode))
{
temp.FProductCode = material.FCode;
}
}
insertList.Add(temp);
}
}
try
{
db.BeginTran();
if (updateList.Count > 0)
{
for (int i = 0; i < updateList.Count; i++)
{
db.Updateable(updateList[i]).IgnoreColumns(true).ExecuteCommand();
}
}
if (insertList.Count > 0)
{
for (int i = 0; i < insertList.Count; i++)
{
db.Insertable(insertList[i]).IgnoreColumns(true).ExecuteCommand();
}
}
db.CommitTran();
return 1;
}
catch (Exception)
{
db.RollbackTran();
}
return 0;
}
///
/// (对接)SAP配方同步
///
public int DockSapFormula(List formulaList)
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
int okCount = 0;
db.BeginTran();
try
{
foreach (TFS_Formula item in formulaList)
{
TFS_Formula temp = db.Queryable().Where(s => s.FName == item.FName && s.FFactoryID == item.FFactoryID
&& s.FTestCode == item.FTestCode).First();
if (string.IsNullOrEmpty(item.FType)) item.FType = "";
if (temp == null) okCount += db.Insertable(item).IgnoreColumns(true).ExecuteCommand();
}
db.CommitTran();
}
catch (Exception ex)
{
ExceptionHelper.AddSystemJournal(null, formulaList, ex.Message, -1, "DockSapFormulaDb");
db.RollbackTran();
}
return okCount;
}
// 获取用户事项权限
public List