材料管理修改(打印修改,出库单已审核已完成不计算匹配率)材料匹配修改,焊接任务单修改
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
|
||||
using Microsoft.SqlServer.Dts.Runtime;
|
||||
using Model;
|
||||
using System;
|
||||
using System.Collections;
|
||||
@@ -76,69 +77,54 @@ namespace BLL
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static List<Tw_PipeMatMatchOutput> GetPipeMatMatch(string projectid, List<string> pipelineIds,string WarehouseCode)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
/// <summary>
|
||||
/// 根据所需材料列表和库存列表获取匹配结果
|
||||
/// </summary>
|
||||
/// <param name="requiredMaterials"></param>
|
||||
/// <param name="warehouseCode"></param>
|
||||
/// <param name="projectId"></param>
|
||||
/// <returns></returns>
|
||||
public static List<Tw_PipeMatMatchOutput> GetMatMatchOutput(List<Tw_PipeMatMatchOutput> requiredMaterials ,string warehouseCode ,string projectId)
|
||||
{
|
||||
Tw_MaterialStockOutput twMaterialStockOutput = new Tw_MaterialStockOutput
|
||||
{
|
||||
var results = new List<Tw_PipeMatMatchOutput>();
|
||||
|
||||
// 获取所需材料列表
|
||||
var requiredMaterials = (from x in db.HJGL_PipeLineMat
|
||||
join y in db.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode
|
||||
join z in db.HJGL_Pipeline on x.PipelineId equals z.PipelineId
|
||||
join m in db.WBS_UnitWork on z.UnitWorkId equals m.UnitWorkId
|
||||
where z.ProjectId == projectid && pipelineIds.Contains(z.PipelineId) && x.PrefabricatedComponents!= "" //x.PrefabricatedComponents!="" 用于筛选非散件材料
|
||||
select new Tw_PipeMatMatchOutput
|
||||
{
|
||||
Id= Guid.NewGuid().ToString(),
|
||||
PipelineId =x.PipelineId,
|
||||
PipelineCode=z.PipelineCode,
|
||||
UnitWorkId=z.UnitWorkId,
|
||||
UnitWorkName=m.UnitWorkName,
|
||||
PrefabricatedComponents=x.PrefabricatedComponents,
|
||||
MaterialCode = x.MaterialCode,
|
||||
MaterialName= y.MaterialName,
|
||||
MaterialSpec= y.MaterialSpec,
|
||||
MaterialUnit= y.MaterialUnit,
|
||||
MaterialDef= y.MaterialDef,
|
||||
NeedNum=x.Number,
|
||||
}
|
||||
).ToList();
|
||||
Tw_MaterialStockOutput tw_MaterialStockOutput=new Tw_MaterialStockOutput();
|
||||
tw_MaterialStockOutput .WarehouseCode=WarehouseCode;
|
||||
var stockList= TwMaterialstockService.GetTw_MaterialStockByModle(tw_MaterialStockOutput).ToList();//获取库存列表
|
||||
|
||||
// 模拟库存管理
|
||||
foreach (var material in requiredMaterials)
|
||||
WarehouseCode = warehouseCode,
|
||||
ProjectId = projectId
|
||||
};
|
||||
var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(twMaterialStockOutput).ToList();//获取库存列表
|
||||
foreach (var material in requiredMaterials)
|
||||
{
|
||||
material.Id = Guid.NewGuid().ToString();
|
||||
var thisMaterialStockNum = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode)?.StockNum ?? 0;
|
||||
if (thisMaterialStockNum >= material.NeedNum)
|
||||
{
|
||||
var thisMaterialStockNum = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode)?.StockNum??0;
|
||||
if (thisMaterialStockNum >= material.NeedNum)
|
||||
{
|
||||
material.MatchNum=material.NeedNum;
|
||||
material.MatchRate=1;
|
||||
material.MatchRateString="100%";
|
||||
}
|
||||
else
|
||||
{
|
||||
material.MatchNum = thisMaterialStockNum<0?0:thisMaterialStockNum;
|
||||
material.MatchRate = (material.NeedNum == 0 ? 0 : material.MatchNum??0 / material.NeedNum);
|
||||
material.MatchRateString = Math.Round((decimal)material.MatchRate * 100, 2).ToString() + "%";
|
||||
|
||||
}
|
||||
//修改stockList对应的库存数量
|
||||
var stock = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode);
|
||||
if (stock != null)
|
||||
{
|
||||
stock.StockNum -= material.MatchNum;
|
||||
}
|
||||
material.MatchNum = material.NeedNum;
|
||||
material.MatchRate = 1;
|
||||
material.MatchRateString = "100%";
|
||||
}
|
||||
results = requiredMaterials;
|
||||
return results;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
material.MatchNum = thisMaterialStockNum < 0 ? 0 : thisMaterialStockNum;
|
||||
material.MatchRate = (material.NeedNum == 0 ? 0 : ((material.MatchNum ?? 0) / material.NeedNum));
|
||||
material.MatchRateString = Math.Round((decimal)(material.MatchRate ?? 0) * 100, 2).ToString() + "%";
|
||||
|
||||
}
|
||||
//修改stockList对应的库存数量
|
||||
var stock = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode);
|
||||
if (stock != null)
|
||||
{
|
||||
stock.StockNum -= material.MatchNum;
|
||||
}
|
||||
}
|
||||
|
||||
var results = requiredMaterials;
|
||||
return results;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取管线匹配率
|
||||
/// </summary>
|
||||
/// <param name="pipelineId"></param>
|
||||
/// <returns></returns>
|
||||
public static decimal? GetPipeMatch(string pipelineId)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
@@ -169,41 +155,18 @@ namespace BLL
|
||||
MaterialDef = y.MaterialDef,
|
||||
NeedNum = x.Number,
|
||||
}
|
||||
).ToList();
|
||||
Tw_MaterialStockOutput tw_MaterialStockOutput = new Tw_MaterialStockOutput();
|
||||
tw_MaterialStockOutput.WarehouseCode = warehouseCode;
|
||||
var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(tw_MaterialStockOutput).ToList();//获取库存列表
|
||||
|
||||
// 模拟库存管理
|
||||
foreach (var material in requiredMaterials)
|
||||
{
|
||||
var thisMaterialStockNum = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode)?.StockNum ?? 0;
|
||||
if (thisMaterialStockNum >= material.NeedNum)
|
||||
{
|
||||
material.MatchNum = material.NeedNum;
|
||||
material.MatchRate = 1;
|
||||
material.MatchRateString = "100%";
|
||||
}
|
||||
else
|
||||
{
|
||||
material.MatchNum = thisMaterialStockNum < 0 ? 0 : thisMaterialStockNum;
|
||||
material.MatchRate = (material.NeedNum == 0 ? 0 : material.MatchNum ?? 0 / material.NeedNum);
|
||||
material.MatchRateString = Math.Round((decimal)material.MatchRate * 100, 2).ToString() + "%";
|
||||
|
||||
}
|
||||
//修改stockList对应的库存数量
|
||||
var stock = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode);
|
||||
if (stock != null)
|
||||
{
|
||||
stock.StockNum -= material.MatchNum;
|
||||
}
|
||||
}
|
||||
twPipeMatMatchOutputs = requiredMaterials;
|
||||
).ToList();
|
||||
|
||||
twPipeMatMatchOutputs = GetMatMatchOutput(requiredMaterials, warehouseCode, pipelineModel.ProjectId);
|
||||
var result = twPipeMatMatchOutputs.Count==0?0: twPipeMatMatchOutputs.Sum(x=>x.MatchRate)/ twPipeMatMatchOutputs.Count;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据出库单主键获取材料匹配信息
|
||||
/// </summary>
|
||||
/// <param name="outPlanMasterId"></param>
|
||||
/// <returns></returns>
|
||||
public static List<Tw_PipeMatMatchOutput> GetMatMatchByOutPlanMasterId(string outPlanMasterId)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
@@ -227,44 +190,83 @@ namespace BLL
|
||||
MaterialSpec = y.MaterialSpec,
|
||||
MaterialUnit = y.MaterialUnit,
|
||||
MaterialDef = y.MaterialDef,
|
||||
NeedNum = x.Number,
|
||||
NeedNum = x.Number,
|
||||
}
|
||||
).ToList();
|
||||
var masterModle = db.Tw_InOutPlanMaster.FirstOrDefault(x => x.Id == outPlanMasterId);
|
||||
Tw_MaterialStockOutput tw_MaterialStockOutput = new Tw_MaterialStockOutput();
|
||||
tw_MaterialStockOutput.WarehouseCode = masterModle.WarehouseCode;
|
||||
var stockList = TwMaterialstockService.GetTw_MaterialStockByModle(tw_MaterialStockOutput).ToList();//获取库存列表
|
||||
|
||||
// 模拟库存管理
|
||||
foreach (var material in requiredMaterials)
|
||||
{
|
||||
var thisMaterialStockNum = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode)?.StockNum ?? 0;
|
||||
if (thisMaterialStockNum >= material.NeedNum)
|
||||
{
|
||||
material.MatchNum = material.NeedNum;
|
||||
material.MatchRate = 1;
|
||||
material.MatchRateString = "100%";
|
||||
}
|
||||
else
|
||||
{
|
||||
material.MatchNum = thisMaterialStockNum < 0 ? 0 : thisMaterialStockNum;
|
||||
material.MatchRate = (material.NeedNum == 0 ? 0 : material.MatchNum ?? 0 / material.NeedNum);
|
||||
material.MatchRateString = Math.Round((decimal)material.MatchRate * 100, 2).ToString() + "%";
|
||||
|
||||
}
|
||||
//修改stockList对应的库存数量
|
||||
var stock = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode);
|
||||
if (stock != null)
|
||||
{
|
||||
stock.StockNum -= material.MatchNum;
|
||||
}
|
||||
}
|
||||
results = requiredMaterials;
|
||||
var masterModle = db.Tw_InOutPlanMaster.FirstOrDefault(x => x.Id == outPlanMasterId);
|
||||
results = GetMatMatchOutput(requiredMaterials.OrderBy(x=>x.PipelineId).ThenBy(x=>x.MaterialCode).ToList(), masterModle.WarehouseCode, masterModle.ProjectId);
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据管线id获取材料匹配信息
|
||||
/// </summary>
|
||||
/// <param name="projectId"></param>
|
||||
/// <param name="pipelineIds"></param>
|
||||
/// <param name="warehouseCode"></param>
|
||||
/// <returns></returns>
|
||||
public static List<Tw_PipeMatMatchOutput> GetPipeMatMatch(string projectId, List<string> pipelineIds, string warehouseCode)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
{
|
||||
var results = new List<Tw_PipeMatMatchOutput>();
|
||||
|
||||
// 获取所需材料列表
|
||||
var requiredMaterials = (from x in db.HJGL_PipeLineMat
|
||||
join y in db.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode
|
||||
join z in db.HJGL_Pipeline on x.PipelineId equals z.PipelineId
|
||||
join m in db.WBS_UnitWork on z.UnitWorkId equals m.UnitWorkId
|
||||
where z.ProjectId == projectId && pipelineIds.Contains(z.PipelineId) && x.PrefabricatedComponents != "" //x.PrefabricatedComponents!="" 用于筛选非散件材料
|
||||
select new Tw_PipeMatMatchOutput
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
PipelineId = x.PipelineId,
|
||||
PipelineCode = z.PipelineCode,
|
||||
UnitWorkId = z.UnitWorkId,
|
||||
UnitWorkName = m.UnitWorkName,
|
||||
PrefabricatedComponents = x.PrefabricatedComponents,
|
||||
MaterialCode = x.MaterialCode,
|
||||
MaterialName = y.MaterialName,
|
||||
MaterialSpec = y.MaterialSpec,
|
||||
MaterialUnit = y.MaterialUnit,
|
||||
MaterialDef = y.MaterialDef,
|
||||
NeedNum = x.Number,
|
||||
}
|
||||
).ToList();
|
||||
var newRequiredMaterials = new List<Tw_PipeMatMatchOutput>();
|
||||
foreach (string id in pipelineIds)
|
||||
{
|
||||
newRequiredMaterials.AddRange(requiredMaterials.Where(x => x.PipelineId == id));
|
||||
}
|
||||
results = GetMatMatchOutput(newRequiredMaterials, warehouseCode, projectId);
|
||||
return results;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据管线材料匹配结果,获取管线匹配率
|
||||
/// </summary>
|
||||
/// <param name="twPipeMatMatch"></param>
|
||||
/// <returns></returns>
|
||||
public static List<Tw_PipeMatchOutput> GetPipeMatch(List<Tw_PipeMatMatchOutput> twPipeMatMatch)
|
||||
{
|
||||
var result = twPipeMatMatch
|
||||
.GroupBy(item => new { item.PipelineId, item.PipelineCode, item.UnitWorkName }) // 按 PipelineId 和 PipelineCode 分组
|
||||
.Select(group => new Tw_PipeMatchOutput
|
||||
{
|
||||
PipelineId = group.Key.PipelineId, // 当前组的 PipelineId
|
||||
PipelineCode = group.Key.PipelineCode, // 当前组的 PipelineCode
|
||||
UnitWorkName = group.Key.UnitWorkName, // 当前组的 UnitWorkName
|
||||
SumNeedNum = group.Sum(item => item.NeedNum),
|
||||
SumMatchNum = group.Sum(item => item.MatchNum),
|
||||
MatchRate = group.Sum(item => item.MatchNum) > 0 && group.Sum(item => item.NeedNum) > 0 ? (decimal)group.Sum(item => item.MatchNum) / (decimal)group.Sum(item => item.NeedNum) : 0,
|
||||
MatchRateString = Math.Round((decimal)group.Sum(item => item.MatchNum) / (decimal)group.Sum(item => item.NeedNum) * 100, 2).ToString() + "%"
|
||||
})
|
||||
.ToList(); // 转换为 List
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user