Merge branch 'dev' of https://git.tuotong-tech.com/tnb/tnb.server into dev
This commit is contained in:
@@ -64,5 +64,10 @@ namespace Tnb.BasicData.Entities.Dto
|
|||||||
/// 工序排序序号
|
/// 工序排序序号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long? ordinal { get; set; }
|
public long? ordinal { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产bom工序id
|
||||||
|
/// </summary>
|
||||||
|
public string? mbom_process_id { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,5 +53,25 @@ public partial class PrdFeedingD : BaseEntity<string>
|
|||||||
/// 物料签收单子表id
|
/// 物料签收单子表id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? material_receipt_detail_id { get; set; }
|
public string? material_receipt_detail_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建用户
|
||||||
|
/// </summary>
|
||||||
|
public string? create_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? create_time { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 状态 0 未消耗 1 部分消耗 2 消耗完
|
||||||
|
/// </summary>
|
||||||
|
public string? status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 使用数量
|
||||||
|
/// </summary>
|
||||||
|
public decimal use_num { get; set; } = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -177,4 +177,9 @@ public partial class PrdMoTask : BaseEntity<string>
|
|||||||
/// 工序id
|
/// 工序id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string process_id { get; set; }
|
public string process_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产bom工序id
|
||||||
|
/// </summary>
|
||||||
|
public string? mbom_process_id { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ namespace Tnb.ProductionMgr
|
|||||||
batch = item["batch"],
|
batch = item["batch"],
|
||||||
unit_id = item["unit_id"],
|
unit_id = item["unit_id"],
|
||||||
carry_id = input.carry_id,
|
carry_id = input.carry_id,
|
||||||
|
status = "0",
|
||||||
|
use_num = 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (detail != null)
|
if (detail != null)
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ using System.Dynamic;
|
|||||||
using Tnb.EquipMgr.Entities.Dto;
|
using Tnb.EquipMgr.Entities.Dto;
|
||||||
using JNPF.Common.Filter;
|
using JNPF.Common.Filter;
|
||||||
using JNPF.Systems.Entitys.System;
|
using JNPF.Systems.Entitys.System;
|
||||||
|
using Microsoft.ClearScript.Util.Web;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Tnb.BasicData.Entities.Dto;
|
using Tnb.BasicData.Entities.Dto;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
@@ -369,7 +370,8 @@ namespace Tnb.ProductionMgr
|
|||||||
workline_code = b.EnCode,
|
workline_code = b.EnCode,
|
||||||
workline_name = b.FullName,
|
workline_name = b.FullName,
|
||||||
mo_task_status = a.mo_task_status,
|
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),
|
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_start_date = a.estimated_start_date,
|
||||||
estimated_end_date = a.estimated_end_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),
|
material_id = SqlFunc.Subqueryable<BasMaterial>().Where(it => it.id == e.material_id).Select(it => it.id),
|
||||||
num = e.num,
|
num = e.num,
|
||||||
ordinal = d.ordinal,
|
ordinal = d.ordinal,
|
||||||
|
mbom_process_id = b.id,
|
||||||
})
|
})
|
||||||
.Mapper(it => it.output_qty = it.num.ParseToInt())
|
.Mapper(it => it.output_qty = it.num.ParseToInt())
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
@@ -839,6 +842,7 @@ namespace Tnb.ProductionMgr
|
|||||||
subMoTask.parent_id = moTask.id;
|
subMoTask.parent_id = moTask.id;
|
||||||
subMoTask.bom_id = input.bom_id;
|
subMoTask.bom_id = input.bom_id;
|
||||||
subMoTask.process_id = item.process_id;
|
subMoTask.process_id = item.process_id;
|
||||||
|
subMoTask.mbom_process_id = item.mbom_process_id;
|
||||||
subMoTask.mo_task_status = DictConst.ToBeScheduledEncode;
|
subMoTask.mo_task_status = DictConst.ToBeScheduledEncode;
|
||||||
subMoTask.workroute_id = item.route_id;
|
subMoTask.workroute_id = item.route_id;
|
||||||
subMoTask.workline_id = input.workline_id;
|
subMoTask.workline_id = input.workline_id;
|
||||||
@@ -1229,7 +1233,80 @@ namespace Tnb.ProductionMgr
|
|||||||
await db.Updateable(master).ExecuteCommandAsync();
|
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;
|
return result.IsSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,8 @@ namespace Tnb.ProductionMgr
|
|||||||
plan_start_date = a.estimated_start_date,
|
plan_start_date = a.estimated_start_date,
|
||||||
plan_end_date = a.estimated_end_date,
|
plan_end_date = a.estimated_end_date,
|
||||||
plan_qty = c.plan_qty,
|
plan_qty = c.plan_qty,
|
||||||
complete_qty = SqlFunc.Subqueryable<PrdReport>().Where(it => it.mo_task_code == a.mo_task_code).Sum(it => it.reported_work_qty),
|
// complete_qty = SqlFunc.Subqueryable<PrdReport>().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,
|
mo_task_status = a.mo_task_status,
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user