diff --git a/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs b/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
index 7f382d40..27de3443 100644
--- a/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
+++ b/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
@@ -64,5 +64,10 @@ namespace Tnb.BasicData.Entities.Dto
/// 工序排序序号
///
public long? ordinal { get; set; }
+
+ ///
+ /// 生产bom工序id
+ ///
+ public string? mbom_process_id { get; set; }
}
}
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs
index 29bc4b6c..58f50b8d 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs
@@ -53,5 +53,25 @@ public partial class PrdFeedingD : BaseEntity
/// 物料签收单子表id
///
public string? material_receipt_detail_id { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 状态 0 未消耗 1 部分消耗 2 消耗完
+ ///
+ public string? status { get; set; }
+
+ ///
+ /// 使用数量
+ ///
+ public decimal use_num { get; set; } = 0;
}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs
index 7d4dfe1e..16772015 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTask.cs
@@ -177,4 +177,9 @@ public partial class PrdMoTask : BaseEntity
/// 工序id
///
public string process_id { get; set; }
+
+ ///
+ /// 生产bom工序id
+ ///
+ public string? mbom_process_id { get; set; }
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs
index 06c5e640..047a6725 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs
@@ -91,6 +91,8 @@ namespace Tnb.ProductionMgr
batch = item["batch"],
unit_id = item["unit_id"],
carry_id = input.carry_id,
+ status = "0",
+ use_num = 0,
});
if (detail != null)
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
index 4561e5c0..503dbbfd 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs
@@ -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().Where(it => it.mo_id == a.mo_id).Sum(it => it.scheduled_qty),
+ // scheduled_qty = SqlFunc.Subqueryable().Where(it => it.mo_id == a.mo_id).Sum(it => it.scheduled_qty),
+ scheduled_qty = a.scheduled_qty,
plan_qty = SqlFunc.Subqueryable().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().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 prdFeedingDs = await db.Queryable()
+ .LeftJoin((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().SingleAsync(x => x.id == prdMoTask.bom_id);
+ List basMbomInputs = await db.Queryable().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().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().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().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;
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs
index 6f426481..8b47fbca 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs
@@ -69,7 +69,8 @@ namespace Tnb.ProductionMgr
plan_start_date = a.estimated_start_date,
plan_end_date = a.estimated_end_date,
plan_qty = c.plan_qty,
- complete_qty = SqlFunc.Subqueryable().Where(it => it.mo_task_code == a.mo_task_code).Sum(it => it.reported_work_qty),
+ // complete_qty = SqlFunc.Subqueryable().Where(it => it.mo_task_code == a.mo_task_code).Sum(it => it.reported_work_qty),
+ complete_qty = a.reported_work_qty+a.scrap_qty,
mo_task_status = a.mo_task_status,
})