bug,报工扣除投料

This commit is contained in:
2023-06-20 13:52:54 +08:00
parent 8e44d842c2
commit a2b60b287f
6 changed files with 112 additions and 2 deletions

View File

@@ -39,6 +39,7 @@ using System.Dynamic;
using Tnb.EquipMgr.Entities.Dto;
using JNPF.Common.Filter;
using JNPF.Systems.Entitys.System;
using Microsoft.ClearScript.Util.Web;
using Newtonsoft.Json;
using Tnb.BasicData.Entities.Dto;
using NPOI.SS.Formula.Functions;
@@ -369,7 +370,8 @@ namespace Tnb.ProductionMgr
workline_code = b.EnCode,
workline_name = b.FullName,
mo_task_status = a.mo_task_status,
scheduled_qty = SqlFunc.Subqueryable<PrdMoTask>().Where(it => it.mo_id == a.mo_id).Sum(it => it.scheduled_qty),
// scheduled_qty = SqlFunc.Subqueryable<PrdMoTask>().Where(it => it.mo_id == a.mo_id).Sum(it => it.scheduled_qty),
scheduled_qty = a.scheduled_qty,
plan_qty = SqlFunc.Subqueryable<PrdMo>().Where(it => it.id == a.mo_id).Select(it => it.plan_qty),
estimated_start_date = a.estimated_start_date,
estimated_end_date = a.estimated_end_date,
@@ -824,6 +826,7 @@ namespace Tnb.ProductionMgr
material_id = SqlFunc.Subqueryable<BasMaterial>().Where(it => it.id == e.material_id).Select(it => it.id),
num = e.num,
ordinal = d.ordinal,
mbom_process_id = b.id,
})
.Mapper(it => it.output_qty = it.num.ParseToInt())
.ToListAsync();
@@ -839,6 +842,7 @@ namespace Tnb.ProductionMgr
subMoTask.parent_id = moTask.id;
subMoTask.bom_id = input.bom_id;
subMoTask.process_id = item.process_id;
subMoTask.mbom_process_id = item.mbom_process_id;
subMoTask.mo_task_status = DictConst.ToBeScheduledEncode;
subMoTask.workroute_id = item.route_id;
subMoTask.workline_id = input.workline_id;
@@ -1229,7 +1233,80 @@ namespace Tnb.ProductionMgr
await db.Updateable(master).ExecuteCommandAsync();
}
//扣除生产投料 按最先投入的依次扣除
List<PrdFeedingD> prdFeedingDs = await db.Queryable<PrdFeedingH>()
.LeftJoin<PrdFeedingD>((a,b)=>a.id==b.feeding_id)
.Where((a,b) => a.workline_id == prdMoTask.workline_id && (b.status=="0" || b.status=="1"))
.OrderBy((a,b) => b.create_time)
.Select((a,b)=>b)
.ToListAsync();
if (prdFeedingDs != null && prdFeedingDs.Count>0)
{
BasMbom basMbom = await db.Queryable<BasMbom>().SingleAsync(x => x.id == prdMoTask.bom_id);
List<BasMbomInput> basMbomInputs = await db.Queryable<BasMbomInput>().Where(x =>
x.mbom_id == prdMoTask.bom_id && x.mbom_process_id == prdMoTask.mbom_process_id).ToListAsync();
foreach (var item in basMbomInputs)
{
var details = prdFeedingDs.Where(x => x.material_id == item.material_id).OrderBy(x=>x.create_time).ToList();
if (details?.Count>0)
{
decimal deductNum = input.reported_qty * item.num / basMbom.num;
decimal? notUseNum = details.Sum(x => x.num - x.use_num);
if (notUseNum > deductNum)
{
foreach (var detail in details)
{
if (deductNum - (detail.num - detail.use_num) < 0)
{
await db.Updateable<PrdFeedingD>().SetColumns(x => x.use_num == x.use_num+deductNum)
.SetColumns(x=>x.status=="1")
.Where(x => x.id == detail.id).ExecuteCommandAsync();
}
else
{
await db.Updateable<PrdFeedingD>().SetColumns(x => x.use_num == x.num)
.SetColumns(x=>x.status=="2")
.Where(x => x.id == detail.id).ExecuteCommandAsync();
}
deductNum = deductNum - (detail.num - detail.use_num);
}
if (deductNum > 0)
{
throw new Exception("投入物料不足");
}
}
else if(notUseNum == deductNum)
{
foreach (var detail in details)
{
db.Updateable<PrdFeedingD>().SetColumns(x => x.use_num == x.num)
.SetColumns(x=>x.status=="2")
.Where(x => x.id == detail.id);
}
}
else
{
throw new Exception("投入物料不足");
}
}
}
}
});
if (!result.IsSuccess) throw Oops.Bah(result.ErrorMessage);
return result.IsSuccess;
}