调整生产管理模块代码

This commit is contained in:
DEVICE8\12494
2023-05-15 13:44:23 +08:00
parent e435ab6f34
commit c3809e2f45
9 changed files with 457 additions and 193 deletions

View File

@@ -31,6 +31,7 @@ using JNPF.VisualDev.Interfaces;
using JNPF.VisualDev.Entitys;
using Aop.Api.Domain;
using Senparc.Weixin.MP.AdvancedAPIs.Card;
using Aspose.Cells.Drawing.Texts;
namespace Tnb.ProductionMgr
{
@@ -47,6 +48,7 @@ namespace Tnb.ProductionMgr
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
private static Dictionary<string, object> _dicDefect = new Dictionary<string, object>();
private readonly ISqlSugarClient _db;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
@@ -63,6 +65,7 @@ namespace Tnb.ProductionMgr
_dictionaryDataService = dictionaryDataService;
_runService = runService;
_visualDevService = visualDevService;
_db = _repository.AsSugarClient();
OverideFuncs.DeleteAsync = Delete;
OverideFuncs.GetListAsync = GetList;
@@ -162,14 +165,27 @@ namespace Tnb.ProductionMgr
public async Task<dynamic> PrdTaskSort(string eqpId)
{
var taskStatusDic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId);
var list = await _repository.AsSugarClient().Queryable<PrdTask>()
.Where(it => it.eqp_id == eqpId)
.OrderBy(o => o.estimated_start_date)
var list = await _repository.AsSugarClient().Queryable<PrdMoTask>()
.LeftJoin<PrdMo>((a, b) => a.mo_id == b.id)
.LeftJoin<BasMaterial>((a, b, c) => a.material_id == c.id)
.LeftJoin<Molds>((a, b, c, d) => a.mold_id == d.id)
.Where((a, b, c, d) => a.eqp_id == eqpId)
.OrderBy((a, b, c, d) => a.estimated_start_date)
.Select((a, b, c, d) => new PrdTaskSortOutput
{
mo_status_code = a.mo_task_code,
status = a.mo_task_status,
group_flag = a.group_flag,
plan_qty = b.plan_qty,
comple_qty = a.complete_qty,
item_name = c.name,
mold_code = d.mold_code,
})
.ToListAsync();
var data = list.Select((x, idx) => new PrdTaskSortOutput
{
no = idx + 1,
mo_id = x.mo_id,
mo_status_code = x.mo_status_code,
status = taskStatusDic.ContainsKey(x.status) ? taskStatusDic[x.status].ToString() : "",
group_flag = x.group_flag,
plan_qty = x.plan_qty,
@@ -188,7 +204,7 @@ namespace Tnb.ProductionMgr
[HttpGet("{taskId}")]
public async Task<dynamic> GetMoOperRecord(string taskId)
{
var list = await _repository.AsSugarClient().Queryable<PrdTaskLog>().Where(it => it.id == taskId).ToListAsync();
var list = await _repository.AsSugarClient().Queryable<PrdTaskLog>().Where(it => it.mo_task_id == taskId).ToListAsync();
var data = list.Adapt<List<PrdTaskOperOutput>>();
var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId);
_repository.AsSugarClient().ThenMapper(data, x => x.statusName = dic.ContainsKey(x.status) ? dic[x.status].ToString() : "");
@@ -284,7 +300,7 @@ namespace Tnb.ProductionMgr
{
scrap_qty = t.Sum(d => d.defective_item_qty),
batch = t.Key.batch,
create_time =t.Key.batch.ParseToDateTime().ToString("yyyy-MM-dd HH:mm:ss"),
create_time = t.Key.batch.ParseToDateTime().ToString("yyyy-MM-dd HH:mm:ss"),
categoryItems = t.GroupBy(g => g.defective_cagetory_id).Select(c => new CategoryItem
{
name = _dicDefect[c.Key]?.ToString(),
@@ -299,6 +315,65 @@ namespace Tnb.ProductionMgr
}
return output;
}
/// <summary>
/// 根据工单Id获取任务单列表
/// </summary>
/// <param name="moId"></param>
/// <remarks>
/// output:
/// <br/>{
/// <br/> mo_task_code:生产任务单号
/// <br/> material_code:物料编码
/// <br/> mold_code:模具编码
/// <br/> mold_name:模具名称
/// <br/> eqp_code:设备编码
/// <br/> eqp_name:设备名称
/// <br/> eqp_type_code:设备型号
/// <br/> mo_task_qty:任务单数量
/// <br/> mo_task_status:任务状态
/// <br/> scheduled_qty:计划生产数量
/// <br/> complete_qty:完成数量
/// <br/> estimated_start_date:预计开工时间
/// <br/> estimated_end_date:预计完工时间
/// <br/>}
/// </remarks>
[HttpGet("{moId}")]
public async Task<dynamic> GetPrdTaskInfoByMoId(string moId)
{
var dic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId);
var result = await _db.Queryable<PrdMoTask>().LeftJoin<PrdMo>((a, b) => a.mo_id == b.id)
.LeftJoin<BasMaterial>((a, b, c) => a.material_id == c.id)
.LeftJoin<Molds>((a, b, c, d) => a.mold_id == d.id)
.LeftJoin<EqpEquipment>((a, b, c, d, e) => a.eqp_id == e.id)
.Where((a, b, c, d, e) => a.mo_id == moId)
.Select((a, b, c, d, e) => new PrdMoTaskOutput
{
mo_task_code = a.mo_task_code,
mo_task_status = a.mo_task_status,
mold_code = d.mold_code,
mold_name = d.mold_name,
material_code = c.code,
material_name = c.name,
eqp_code = e.code,
eqp_name = e.name,
eqp_type_code = SqlFunc.Subqueryable<EqpEquipType>().Where(it => it.id == e.equip_type_id).Select(it => it.code),
mo_task_qty = SqlFunc.Subqueryable<PrdMoTask>().Where(a => a.mo_id == moId).Count(),
estimated_start_date = a.estimated_start_date,
estimated_end_date = a.estimated_end_date,
plan_qty = b.plan_qty,
complete_qty = a.complete_qty,
})
.Mapper(it =>
{
it.mo_task_status = dic.ContainsKey(it.mo_task_status) ? dic[it.mo_task_status].ToString() : "";
})
.ToListAsync();
return result;
}
#endregion
@@ -335,6 +410,8 @@ namespace Tnb.ProductionMgr
moTask.create_id = _userManager.UserId;
moTask.create_time = DateTime.Now;
moTask.mo_task_status = DictConst.ToBeScheduledEncode;
moTask.scheduled_qty = input.scheduled_qty;
var mo = await db.Queryable<PrdMo>().FirstAsync(it => it.id == input.mo_id);
var moCode = mo?.mo_code;
var taskCode = await db.Queryable<PrdMoTask>().Where(it => !string.IsNullOrEmpty(it.mo_task_code) && it.mo_task_code.Contains(moCode)).OrderByDescending(it => it.mo_task_code).Select(it => it.mo_task_code).FirstAsync();
@@ -349,7 +426,7 @@ namespace Tnb.ProductionMgr
{
var sb = new StringBuilder();
var num = taskCode.AsSpan().Slice(pos + 1).ToString().ParseToInt();
var code = taskCode.AsSpan().Slice(pos + 1).ToString();
var code = taskCode.AsSpan().Slice(0, pos).ToString();
var n = (num + 1).ToString().PadLeft(2, '0');
moTask.mo_task_code = sb.Append(code).Append("-").Append(n).ToString();
}
@@ -362,16 +439,17 @@ namespace Tnb.ProductionMgr
//根据工单号获取当前工单包含的已排产数
var schedQty = db.Queryable<PrdMoTask>().Where(it => it.mo_id == input.mo_id)?.Sum(d => d.scheduled_qty);
//判断如果当前 工单的已排产数大于工单计划数量则更新工单状态为 已排产
if (schedQty >= mo.plan_qty)
if (mo != null && schedQty.HasValue && schedQty.Value >= mo.plan_qty)
{
mo.mo_status = DictConst.AlreadyId;
row = await db.Updateable(mo).ExecuteCommandAsync();
}
var material = await db.Queryable<BasMaterial>().FirstAsync(it => it.id == moTask.material_id);
//将生产任务插入到自检报废记录表
var sacipRecord = new PrdMoTaskDefectRecord();
sacipRecord.id = SnowflakeIdHelper.NextId();
sacipRecord.material_code = (await db.Queryable<BasMaterial>().FirstAsync(it => it.id == moTask.material_id))?.code;
sacipRecord.material_name = (await db.Queryable<BasMaterial>().FirstAsync(it => it.id == moTask.material_id))?.name;
sacipRecord.material_code = material?.code;
sacipRecord.material_name = material?.name;
sacipRecord.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == moTask.eqp_id))?.code;
sacipRecord.mold_name = (await db.Queryable<Molds>().FirstAsync(it => it.id == moTask.mold_id))?.mold_name;
sacipRecord.estimated_start_date = moTask.plan_start_date;
@@ -384,6 +462,7 @@ namespace Tnb.ProductionMgr
sacipRecord.mo_task_id = moTask.id;
sacipRecord.mo_task_code = moTask.mo_task_code;
await db.Insertable(sacipRecord).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
}
catch (Exception ex)
@@ -427,9 +506,10 @@ namespace Tnb.ProductionMgr
PrdTaskBehavior behavior = input.Behavior.ToEnum<PrdTaskBehavior>();
var status = SetTaskStatus(behavior);
var db = _repository.AsSugarClient();
var list = await db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.id)).Select(it => it).ToListAsync();
if (behavior == PrdTaskBehavior.Compled)
{
var list = await db.Queryable<PrdTask>().Where(it => input.TaskIds.Contains(it.id)).Select(it => it).ToListAsync();
if (list?.Count > 0)
{
var schedQtySum = list.Sum(x => x.scheduled_qty);
@@ -444,6 +524,55 @@ namespace Tnb.ProductionMgr
.SetColumns(it => new PrdMoTask { mo_task_status = status })
.Where(it => input.TaskIds.Contains(it.id))
.ExecuteCommandAsync();
//插入操作记录日志
List<PrdTaskLog> taskLogEntities = new();
foreach (var taskId in input.TaskIds)
{
var taskLog = await db.Queryable<PrdTaskLog>().FirstAsync(it => it.mo_task_id == taskId);
if (taskLog is null)
{
var taskItem = list?.Find(x => x.id == taskId);
taskLog = new PrdTaskLog();
taskLog.id = SnowflakeIdHelper.NextId();
if (taskItem != null)
{
if (taskItem.mo_id.IsNotEmptyOrNull())
{
taskLog.mo_code = (await db.Queryable<PrdMo>().FirstAsync(it => it.id == taskItem.mo_id))?.mo_code;
}
if (taskItem.eqp_id.IsNotEmptyOrNull())
{
taskLog.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == taskItem.eqp_id))?.code;
}
if (taskItem.mold_id.IsNotEmptyOrNull())
{
taskLog.mold_code = (await db.Queryable<Molds>().FirstAsync(it => it.id == taskItem.mold_id))?.mold_code;
}
if (taskItem.material_id.IsNotEmptyOrNull())
{
var material = await db.Queryable<BasMaterial>().FirstAsync(it => it.id == taskItem.material_id);
taskLog.item_code = material?.code;
taskLog.item_standard = material?.material_standard;
}
taskLog.operator_name = _userManager.RealName;
taskLog.status = status;
taskLog.create_id = _userManager.UserId;
taskLog.create_time = DateTime.Now;
taskLog.mo_task_id = taskItem.id;
}
taskLogEntities.Add(taskLog);
}
else
{
if (taskLog.status != status)
{
taskLog.id = SnowflakeIdHelper.NextId();
taskLog.status = status;
taskLogEntities.Add(taskLog);
}
}
}
row = await db.Insertable(taskLogEntities).ExecuteCommandAsync();
return (row > 0);
}
@@ -460,7 +589,7 @@ namespace Tnb.ProductionMgr
var db = _repository.AsSugarClient();
if (input.icmo_id.IsNullOrWhiteSpace())
throw new ArgumentNullException(nameof(input.icmo_id));
var icmoItem = await db.Queryable<PrdTask>().FirstAsync(it => it.id == input.icmo_id);
var icmoItem = await db.Queryable<PrdMoTask>().FirstAsync(it => it.id == input.icmo_id);
switch (input.category)
{
case 1: //设备
@@ -489,7 +618,7 @@ namespace Tnb.ProductionMgr
}
break;
}
row = await db.Updateable(icmoItem).ExecuteCommandAsync();
row = await db.Updateable(icmoItem).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
return (row > 0);
}
/// <summary>
@@ -513,8 +642,8 @@ namespace Tnb.ProductionMgr
var row = -1;
var db = _repository.AsSugarClient();
var report = await db.Queryable<PrdReport>().FirstAsync(it => it.mo_task_code == input.mo_task_code);
if (report is not null)
{
report.mo_task_code = input.mo_task_code;
@@ -535,7 +664,7 @@ namespace Tnb.ProductionMgr
var record = prdTask.Adapt<PrdReportRecord>();
if (prdTask != null)
{
record.id =SnowflakeIdHelper.NextId();
record.id = SnowflakeIdHelper.NextId();
record.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == prdTask.eqp_id))?.code;
record.completed_qty = input.reported_qty;
row = await db.Insertable(record).ExecuteCommandAsync();