工单完成情况汇总

This commit is contained in:
2023-09-21 15:45:03 +08:00
parent 84d65644c7
commit 1d9e74b45f
5 changed files with 120 additions and 3 deletions

View File

@@ -72,8 +72,11 @@ public static class DictConst
/// 工单状态-强制接单
/// </summary>
public const string MoCloseId = "25501969636645";
/// <summary>
/// 工单状态-code
/// </summary>
public const string MoTaskStatusCode = "OrderStatus";
/// <summary>
/// 工单状态 已下发字典Id
/// </summary>

View File

@@ -0,0 +1,16 @@
namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
{
public class PrdMoStatisticsInput
{
public string mo_status { get; set; }
/// <summary>
/// 页码.
/// </summary>
public int currentPage { get; set; }
/// <summary>
/// 页容量.
/// </summary>
public int pageSize { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
{
public class PrdMoStatisticsOutput
{
public string id { get; set; }
public string mo_code { get; set; }
public string mo_status { get; set; }
public string material_name { get; set; }
public string material_code { get; set; }
public decimal? plan_qty { get; set; }
public decimal? scheduled_qty { get; set; }
public decimal? tobe_scheduled_qty { get; set; }
public decimal? reported_work_qty { get; set; }
public decimal? complete_rate { get; set; }
public List<PrdMoStatisticsDetailOutput> children { get; set; } = new List<PrdMoStatisticsDetailOutput>();
}
public class PrdMoStatisticsDetailOutput
{
public string id { get; set; }
public string mo_task_code { get; set; }
public string mo_task_status { get; set; }
public string estimated_start_date { get; set; }
public string estimated_end_date { get; set; }
public decimal? scheduled_qty { get; set; }
public decimal? reported_work_qty { get; set; }
public decimal? scrap_qty { get; set; }
}
}

View File

@@ -362,7 +362,52 @@ namespace Tnb.ProductionMgr
.ExecuteCommandHasChangeAsync();
}
/// <summary>
/// 工单统计
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> GetPrdMoStatistics(PrdMoStatisticsInput input)
{
var result = await _db.Queryable<PrdMo>()
.LeftJoin<DictionaryDataEntity>((a, b) => a.mo_status == b.Id)
.LeftJoin<BasMaterial>((a, b, c) => a.material_id == c.id)
.WhereIF(!string.IsNullOrEmpty(input.mo_status), (a, b) => b.EnCode == input.mo_status)
// .OrderByDescending((a,b,c)=>a.reported_work_qty==null?0:a.reported_work_qty*100/a.plan_qty)
.Select((a, b, c) => new PrdMoStatisticsOutput
{
id = a.id,
mo_code = a.mo_code,
mo_status = b.FullName,
material_code = c.code,
material_name = c.name,
plan_qty = a.plan_qty,
scheduled_qty = a.scheduled_qty,
tobe_scheduled_qty = a.plan_qty - a.scheduled_qty,
reported_work_qty = a.reported_work_qty,
complete_rate = a.reported_work_qty==null?0:SqlFunc.ToDecimal(a.reported_work_qty*100)/SqlFunc.ToDecimal(a.plan_qty),
children = SqlFunc.Subqueryable<PrdMoTask>()
.LeftJoin<DictionaryDataEntity>((x,y)=>x.mo_task_code==y.EnCode && y.DictionaryTypeId==DictConst.PrdTaskStatusTypeId)
.Where(x=>x.mo_id==a.id)
.OrderByDesc((x,y)=>x.create_time)
.ToList((x,y)=>new PrdMoStatisticsDetailOutput()
{
id = x.id,
mo_task_code = x.mo_task_code,
mo_task_status = y.FullName,
estimated_start_date = x.estimated_start_date==null ? "" : x.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"),
estimated_end_date = x.estimated_end_date==null ? "" : x.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"),
scheduled_qty = x.scheduled_qty,
reported_work_qty = x.reported_work_qty,
scrap_qty = x.scrap_qty,
}),
})
.MergeTable().OrderByDescending(a=>a.complete_rate)
.ToPagedListAsync(input.currentPage, input.pageSize);
return PageResult<PrdMoStatisticsOutput>.SqlSugarPageResult(result);
}
#endregion

View File

@@ -670,6 +670,9 @@ namespace Tnb.ProductionMgr
if (input.schedule_type.Value == 1) //注塑、基础排产
{
var mo = await db.Queryable<PrdMo>().FirstAsync(it => it.id == input.mo_id);
BasMbomProcess basMbomProcess = null;
if(!string.IsNullOrEmpty(input.bom_id))
basMbomProcess = await db.Queryable<BasMbomProcess>().FirstAsync(x => x.mbom_id == input.bom_id);
var moTask = input.Adapt<PrdMoTask>();
moTask.id = SnowflakeIdHelper.NextId();
moTask.create_id = _userManager.UserId;
@@ -677,6 +680,7 @@ namespace Tnb.ProductionMgr
moTask.mo_task_status = DictConst.ToBeScheduledEncode;
moTask.scheduled_qty = input.scheduled_qty;
moTask.unit_id = mo.unit_id;
moTask.mbom_process_id = basMbomProcess?.id ?? "";
if (!string.IsNullOrEmpty(input.eqp_id))
{
@@ -2335,6 +2339,26 @@ namespace Tnb.ProductionMgr
return result.IsSuccess ? "排产成功" : result.ErrorMessage;
}
/// <summary>
/// 获取工单各个状态数量
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> GetMoTaskStatusNum()
{
return await _db.Queryable<DictionaryTypeEntity>().
LeftJoin<DictionaryDataEntity>((a,b)=>a.Id==b.DictionaryTypeId)
.LeftJoin<PrdMo>((a,b,c)=>b.Id==c.mo_status)
.Where((a,b,c)=>a.EnCode==DictConst.MoTaskStatusCode)
.GroupBy((a,b,c)=>new { mo_status_code = b.EnCode,mo_status_name = b.FullName})
.Select((a,b,c) => new
{
mo_status_code = b.EnCode,
mo_status_name = b.FullName,
count = SqlFunc.AggregateCount(c.mo_status)
}).ToListAsync();
}
}