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

474 lines
22 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using FactorySystemCommon;
using FactorySystemModel.EnumModel;
using FactorySystemModel.SqlSugarModel;
using Newtonsoft.Json;
using SqlSugar;
namespace FactorySystemBll
{
public class PackageBll
{
/// <summary>
/// 获取包材信息
/// </summary>
public object GetPackageInfo(int teamId)
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
TFS_FTeamwork teamwork = db.Queryable<TFS_FTeamwork>().Where(s => s.FID == teamId).First();
TFS_PackageMain main;
if (teamwork.FPackID > 0) main = db.Queryable<TFS_PackageMain>().Where(s => s.FID == teamwork.FPackID).First();
else main = db.Queryable<TFS_PackageMain>().Where(string.Format("FID=(select FPackID from TFS_FTeamwork where FID={0})", teamId)).First();
if (main != null)
{
List<TFS_PackageChild> childs = db.Queryable<TFS_PackageChild>().Where(s => s.FPackageID == teamwork.FPackID && s.FDeleted != 1).ToList();
return new
{
Main = main,
FCode = teamwork.FPackCode,
List = childs.Count == 0 ? new List<TFS_PackageChild>() : childs
};
}
return new { FCode = teamwork.FPackCode };
}
/// <summary>
/// 修改包材主信息
/// </summary>
public int UpdatePackageData(Dictionary<string, object> inParam)
{
int mainId = -1;
try
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
TFS_PackageMain main = db.Queryable<TFS_PackageMain>().Where(s => s.FCode == inParam["FCode"].ToString()).First();
if (main == null)
{
main = new TFS_PackageMain();
SetFieldVal(typeof(TFS_PackageMain).GetProperties(), main, inParam);
main.FID = db.Insertable(main).AS("TFS_PackageMain").IgnoreColumns(true).ExecuteReturnIdentity();
}
else
{
SetFieldVal(typeof(TFS_PackageMain).GetProperties(), main, inParam);
inParam.Add("FEditDate", DateTime.Now);
db.Updateable(main).AS("TFS_PackageMain").Where(s => s.FID == main.FID).ExecuteCommand();
}
mainId = main.FID;
int teamId = int.Parse(inParam["FTeamID"].ToString());
//2022-10-08 所谓的成品字段值是包材的规格、毛重、净重
db.Ado.ExecuteCommand(string.Format(@"update a set a.FBaseSpecification=isnull(b.FSpecs,''),
a.FBaseGrossWeight=isnull(b.FGrossWeight,''),a.FBaseNetWeight=isnull(b.FNetWeight,'') from
TFS_ViewMaterial a,TFS_PackageMain b where a.FTeamID={0} and b.FID={1} and a.FViewType=1", teamId, mainId));
db.Updateable<TFS_FTeamwork>(new { FPackID = mainId, FPackCode = main.FCode }).Where(s => s.FID == teamId).ExecuteCommand();
}
catch (Exception) { }
return mainId;
}
/**
* 20230404
*
*
* FOperateType1
* FOperateType == 1
* **/
public int UpdatePackage(Dictionary<string, object> inParam)
{
int mainId = -1;
try
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
TFS_PackageMain main = db.Queryable<TFS_PackageMain>().Where(s => s.FCode == inParam["FCode"].ToString()).First();
if (main == null)
{
main = new TFS_PackageMain();
SetFieldVal(typeof(TFS_PackageMain).GetProperties(), main, inParam);
main.FID = db.Insertable(main).AS("TFS_PackageMain").IgnoreColumns(true).ExecuteReturnIdentity();
}
else
{
SetFieldVal(typeof(TFS_PackageMain).GetProperties(), main, inParam);
inParam.Add("FEditDate", DateTime.Now);
db.Updateable(main).AS("TFS_PackageMain").Where(s => s.FID == main.FID).ExecuteCommand();
}
mainId = main.FID;
}
catch (Exception) { }
return mainId;
}
/// <summary>
/// 不补充包材信息
/// </summary>
public int NoSupplyPackageChild(Dictionary<string, object> inParam)
{
//直接进度完成不让修改
int teamId = int.Parse(inParam["FTeamID"].ToString());
string taskSql = BaseBll.GetTaskSql(-1, 2, teamId, (int)Constant.TaskType., 2);
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
int result = db.Ado.ExecuteCommand(taskSql);
TeamworkBll.ChangeTeamProcess(teamId, db);
return result;
}
/// <summary>
/// 包材子项新增
/// </summary>
public int InsertChildData(Dictionary<string, object> inParam, List<TFS_PackageChild> childList)
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
db.BeginTran();
int childId = -1;
try
{
int userId = int.Parse(inParam["FEditUser"].ToString());
int mainId = int.Parse(inParam["FID"].ToString());
int teamId = int.Parse(inParam["FTeamID"].ToString());
{
List<TFS_PackageChild> updateList = childList.Where(s => s.FID > 0).ToList();
//删除已删除的
List<int> updateIds = updateList.Count > 0 ? updateList.Select(s => s.FID).ToList() : new List<int>() { -1 };
db.Updateable<TFS_PackageChild>(new { FDeleted = 1, FEditUser = userId, FEditDate = DateTime.Now })
.Where(s => !updateIds.Contains(s.FID) && s.FPackageID == mainId && s.FDeleted != 1).ExecuteCommand();
}
TFS_FTeamwork teamwork = db.Queryable<TFS_FTeamwork>().Where(s => s.FID == teamId).First();
bool hasTask = false;//是否创建“新子项包材申请”
List<int> viewFactory = new List<int>();//视图分工厂
foreach (TFS_PackageChild child in childList)
{
child.FPackageID = mainId;
child.FEditUser = userId;
if (child.FID <= 0)
{
if (child.FMaterialID <= 0) child.FMaterialID = -1;
child.FID = db.Insertable(child).IgnoreColumns(true).ExecuteReturnIdentity();
}
if (child.FMaterialID > 0)
{
TFS_Material material = null;
List<TFS_ViewMaterial> viewList = db.Queryable<TFS_ViewMaterial>().Where(s => s.FMaterialID == child.FMaterialID
&& s.FDeleted != 1).ToList();
bool hasCreate = false;
if (viewList.Find(s => s.FFactoryID == teamwork.FCreateFactoryID) == null)
{
hasCreate = true;
if (viewFactory.IndexOf(teamwork.FCreateFactoryID) == -1) viewFactory.Add(teamwork.FCreateFactoryID);
if (material == null) db.Queryable<TFS_Material>().Where(s => s.FID == child.FMaterialID).First();
TFS_ViewMaterial view = SetViewVal(material, teamwork, userId);
view.FFactoryCode = teamwork.FCreateFactoryCode;
view.FFactoryID = teamwork.FCreateFactoryID;
db.Insertable(view).IgnoreColumns(true).ExecuteCommand();
}
if (viewList.Find(s => s.FFactoryID == teamwork.FProdFactoryID) == null)
{
if (viewFactory.IndexOf(teamwork.FProdFactoryID) == -1) viewFactory.Add(teamwork.FProdFactoryID);
if (material == null) db.Queryable<TFS_Material>().Where(s => s.FID == child.FMaterialID).First();
TFS_ViewMaterial view = SetViewVal(material, teamwork, userId);
view.FFactoryCode = teamwork.FProdFactoryCode;
view.FFactoryID = teamwork.FProdFactoryID;
if (hasCreate) view.FQualityType4 = "05";
else view.FQualityType1 = "01";
db.Insertable(view).IgnoreColumns(true).ExecuteCommand();
}
}
else
{
hasTask = true;
}
}
//删除视图
db.Deleteable<TFS_ViewMaterial>().Where(s => s.FTeamID == teamId && s.FViewType == (int)Constant.ViewType.)
.Where(string.Format("FMaterialID not in(select FMaterialID from TFS_PackageChild where FPackageID={0} and FDeleted!=1)", mainId))
.ExecuteCommand();
if (hasTask)
{
BaseBll.CreateTaskData(teamId, userId, "10");
}
if (viewFactory.Count > 0)
{
BaseBll.CreateTaskData(teamId, userId, "11", string.Join(",", viewFactory));
}
db.CommitTran();
}
catch (Exception)
{
db.RollbackTran();
}
return childId;
}
/**
* 20230404
*
*
* FOperateType1
* FOperateType == 1
* **/
// 新的包材子项新增
public void InsertPackageChild(Dictionary<string, object> inParam, List<TFS_PackageChild> childList)
{
try
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
int userId = int.Parse(inParam["FEditUser"].ToString());
int mainId = int.Parse(inParam["FID"].ToString());
foreach (TFS_PackageChild child in childList)
{
child.FPackageID = mainId;
child.FEditUser = userId;
db.Insertable(child).IgnoreColumns(true).ExecuteReturnIdentity();
}
}
catch (Exception ex)
{
}
}
// 新的包材子项更新(包括逻辑删除)
public void UpdatePackageChild(Dictionary<string, object> inParam, List<TFS_PackageChild> childList)
{
try
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
int userId = int.Parse(inParam["FEditUser"].ToString());
int mainId = int.Parse(inParam["FID"].ToString());
foreach (TFS_PackageChild child in childList)
{
child.FEditUser = userId;
child.FEditDate = DateTime.Now;
}
db.Updateable<TFS_PackageChild>(childList).ExecuteCommand();
//db.Updateable<TFS_PackageChild>(new {
// FEditUser = userId,
// FEditDate = DateTime.Now
//}).Where(s => s.FPackageID == mainId && s.FDeleted != 1).ExecuteCommand();
}
catch (Exception ex)
{
}
}
/// <summary>
/// 导入包材
/// </summary>
public object InsertBatchPackageData(List<TFS_PackageMain> mainList, List<TFS_PackageChild> childList, int userId)
{
int result = 0;
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
List<TFS_PackageMain> mainList2 = new List<TFS_PackageMain>();
List<TFS_PackageChild> childList2 = new List<TFS_PackageChild>();
for (int i = 0; i < mainList.Count; i++)
{
TFS_PackageMain item = mainList[i];
TFS_PackageMain main = db.Queryable<TFS_PackageMain>().Where(s => s.FCode == item.FCode).First();
if (main == null)
{
main = item;
main.FEditUser = userId;
main.FFactoryID = -1;
main.FID = db.Insertable(main).IgnoreColumns(true).ExecuteReturnIdentity();
}
else if (mainList2.Find(s => s.FID == main.FID) == null)
{
main.FFactoryCode = string.IsNullOrEmpty(item.FFactoryCode) ? main.FFactoryCode : item.FFactoryCode;
main.FCode = string.IsNullOrEmpty(item.FCode) ? main.FCode : item.FCode;
main.FBomUnit = string.IsNullOrEmpty(item.FBomUnit) ? main.FBomUnit : item.FBomUnit;
main.FRemark = string.IsNullOrEmpty(item.FRemark) ? main.FRemark : item.FRemark;
main.FSpecs = string.IsNullOrEmpty(item.FSpecs) ? main.FSpecs : item.FSpecs;
main.FNetWeight = GetWeight2(string.IsNullOrEmpty(item.FNetWeight) ? main.FNetWeight : item.FNetWeight);
main.FGrossWeight = GetWeight2(string.IsNullOrEmpty(item.FGrossWeight) ? main.FGrossWeight : item.FGrossWeight);
main.FSize = string.IsNullOrEmpty(item.FSize) ? main.FSize : item.FSize;
main.FVolume = string.IsNullOrEmpty(item.FVolume) ? main.FVolume : item.FVolume;
db.Updateable(main).ExecuteCommand();
}
TFS_PackageChild item2 = childList[i];
TFS_PackageChild child = db.Queryable<TFS_PackageChild>().Where(s => s.FCode == item2.FCode && s.FPackageID == main.FID).First();
TFS_Material material = db.Queryable<TFS_Material>().Where(s => s.FCode == item2.FCode).First();
if (child == null)
{
child = item2;
child.FPackageID = main.FID;
child.FMaterialID = material != null ? material.FID : -1;
child.FEditUser = userId;
child.FID = db.Insertable(child).IgnoreColumns(true).ExecuteReturnIdentity();
}
else
{
child.FPackageID = main.FID;
child.FMaterialID = material != null ? material.FID : -1;
child.FName = !string.IsNullOrEmpty(item2.FName) ? item2.FName : child.FName;
child.FCode = !string.IsNullOrEmpty(item2.FCode) ? item2.FCode : child.FCode;
child.FCount = !string.IsNullOrEmpty(item2.FCount) ? item2.FCount : child.FCount;
child.FUnit = !string.IsNullOrEmpty(item2.FUnit) ? item2.FUnit : child.FUnit;
child.FGroup = !string.IsNullOrEmpty(item2.FGroup) ? item2.FGroup : child.FGroup;
child.FOutSize = !string.IsNullOrEmpty(item2.FOutSize) ? item2.FOutSize : child.FOutSize;
child.FWeight = !string.IsNullOrEmpty(item2.FWeight) ? item2.FWeight : child.FWeight;
db.Updateable(child).ExecuteCommand();
}
mainList2.Add(main);
childList2.Add(child);
result += 1;
}
ExceptionHelper.AddSystemJournal(null, new { mainList, childList }, new { mainList2, childList2 }, userId, "InsertBatchPackageData");
return result;
}
private string GetWeight2(string weight)
{
if (string.IsNullOrEmpty(weight)) return "";
try
{
if (decimal.TryParse(weight, out decimal dWeight))
{
return Math.Round(dWeight, 2, MidpointRounding.AwayFromZero).ToString("f2");
}
}
catch (Exception) { }
return weight;
}
/// <summary>
/// 包材新增完成
/// </summary>
public void TaskCompleted(Dictionary<string, object> inParam)
{
int taskId = int.Parse(inParam["FTaskID"].ToString()); ;
int teamId = int.Parse(inParam["FTeamID"].ToString());
string taskSql = BaseBll.GetTaskSql(taskId, 2, teamId, (int)Constant.TaskType.);
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
db.Ado.ExecuteCommand(taskSql);
TeamworkBll.ChangeTeamProcess(teamId, db);
}
/// <summary>
/// 对接子项代码
/// </summary>
public object DockChildCode(Dictionary<string, object> inParam, List<TFS_PackageChild> childs, int userId)
{
SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
db.BeginTran();
int result = 0;
try
{
int teamId = int.Parse(inParam["FTeamID"].ToString());
TFS_FTeamwork teamwork = db.Queryable<TFS_FTeamwork>().Where(s => s.FID == teamId).First();
foreach (var item in childs)
{
TFS_Material material = new TFS_Material()
{
FName = item.FName,
FType = "40",
FTestCode = "",
FFactoryID = teamwork.FCreateFactoryID,
FFactoryCode = teamwork.FCreateFactoryCode,
FMaterialGroup = item.FGroup,
FBaseUnit = item.FUnit,
FCode = item.FCode
};
material.FID = db.Insertable(material).IgnoreColumns(true).ExecuteReturnIdentity();
item.FAddDate = null;
item.FMaterialID = material.FID;
item.FCode = material.FCode;
item.FEditUser = userId;
item.FEditDate = DateTime.Now;
if (item.FID > 0) result += db.Updateable(item).IgnoreColumns(true).ExecuteCommand() + 1;
else result += db.Insertable(item).IgnoreColumns(true).ExecuteCommand() + 1;
TFS_ViewMaterial view = SetViewVal(material, teamwork, userId);
view.FBaseMaterialGroup = string.IsNullOrEmpty(material.FMaterialGroup) ? item.FGroup : "";
view.FFactoryCode = teamwork.FCreateFactoryCode;
view.FFactoryID = teamwork.FCreateFactoryID;
view.FBaseBasicMeter = material.FBaseUnit;
result += db.Insertable(view).IgnoreColumns(true).ExecuteCommand();
if (teamwork.FCreateFactoryID != teamwork.FProdFactoryID)
{
view.FFactoryCode = teamwork.FProdFactoryCode;
view.FFactoryID = teamwork.FProdFactoryID;
result += db.Insertable(view).IgnoreColumns(true).ExecuteCommand();
}
}
string taskSql = BaseBll.GetTaskSql(-1, 2, teamId, (int)Constant.TaskType., 2,
string.Format("(select count(1) from TFS_PackageChild where FPackageID={0} and FDeleted!=1 and FMaterialID<1)=0",
inParam["FID"].ToString()));
if (!string.IsNullOrEmpty(taskSql))
{
db.Ado.ExecuteCommand(taskSql);
TeamworkBll.ChangeTeamProcess(teamId, db);
}
string factory = teamwork.FCreateFactoryID.ToString();
if (teamwork.FCreateFactoryID != teamwork.FProdFactoryID) factory += "," + teamwork.FProdFactoryID;
BaseBll.CreateTaskData(teamId, userId, "11", factory, true, db);
db.CommitTran();
}
catch (Exception)
{
db.RollbackTran();
}
return result;
}
/// <summary>
/// 设置视图值
/// </summary>
private TFS_ViewMaterial SetViewVal(TFS_Material material, TFS_FTeamwork teamwork, int userId)
{
TFS_ViewMaterial view = new TFS_ViewMaterial()
{
FMaterialID = material.FID,
FTeamID = teamwork.FID,
FViewType = (int)Constant.ViewType.,
FLevel = 1,
FEditUser = userId,
FAddDate = DateTime.Now,
FBaseMaterialCode = string.IsNullOrEmpty(material.FPlmCode) ? material.FCode : material.FPlmCode,
FBaseTestCode = material.FTestCode,
FBaseMaterialDesc = material.FName
};
return view;
}
/// <summary>
/// 类属性赋值
/// </summary>
private void SetFieldVal(PropertyInfo[] props, object dataObj, Dictionary<string, object> inParam)
{
foreach (PropertyInfo prop in props)
{
if (inParam.ContainsKey(prop.Name))
{
object value = inParam[prop.Name];
if (prop.PropertyType.Name == "Decimal")
{
prop.SetValue(dataObj, ((decimal)value).ToString("#0.00"));
}
else if (prop.PropertyType.Name == "Int32" || prop.PropertyType.Name == "Int64")
{
prop.SetValue(dataObj, int.Parse(value.ToString()));
}
else
{
prop.SetValue(dataObj, value);
}
}
}
}
}
}