1
This commit is contained in:
@@ -589,22 +589,22 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
await db.Insertable(taskLog).ExecuteCommandAsync();
|
||||
//将生产任务插入到自检报废记录表
|
||||
var sacipRecord = new PrdMoTaskDefectRecord();
|
||||
sacipRecord.id = SnowflakeIdHelper.NextId();
|
||||
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<ToolMolds>().FirstAsync(it => it.id == moTask.mold_id))?.mold_name!;
|
||||
sacipRecord.estimated_start_date = moTask.plan_start_date;
|
||||
sacipRecord.estimated_end_date = moTask.plan_end_date;
|
||||
sacipRecord.plan_qty = moTask.plan_qty;
|
||||
sacipRecord.scrap_qty = moTask.scrap_qty;
|
||||
sacipRecord.status = moTask.mo_task_status;
|
||||
sacipRecord.create_id = _userManager.UserId;
|
||||
sacipRecord.create_time = DateTime.Now;
|
||||
sacipRecord.mo_task_id = moTask.id;
|
||||
sacipRecord.mo_task_code = moTask.mo_task_code;
|
||||
await db.Insertable(sacipRecord).ExecuteCommandAsync();
|
||||
//var sacipRecord = new PrdMoTaskDefectRecord();
|
||||
//sacipRecord.id = SnowflakeIdHelper.NextId();
|
||||
//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<ToolMolds>().FirstAsync(it => it.id == moTask.mold_id))?.mold_name!;
|
||||
//sacipRecord.estimated_start_date = moTask.plan_start_date;
|
||||
//sacipRecord.estimated_end_date = moTask.plan_end_date;
|
||||
//sacipRecord.plan_qty = moTask.plan_qty;
|
||||
//sacipRecord.scrap_qty = moTask.scrap_qty;
|
||||
//sacipRecord.status = moTask.mo_task_status;
|
||||
//sacipRecord.create_id = _userManager.UserId;
|
||||
//sacipRecord.create_time = DateTime.Now;
|
||||
//sacipRecord.mo_task_id = moTask.id;
|
||||
//sacipRecord.mo_task_code = moTask.mo_task_code;
|
||||
//await db.Insertable(sacipRecord).ExecuteCommandAsync();
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
}
|
||||
@@ -804,102 +804,164 @@ namespace Tnb.ProductionMgr
|
||||
{
|
||||
throw new ArgumentException($"{nameof(input.Behavior)} not be null or empty");
|
||||
}
|
||||
string SetTaskStatus(PrdTaskBehavior behavior) => behavior switch
|
||||
var taskList = await _db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.id) && it.mo_task_status == DictConst.ToBeScheduledEncode).ToListAsync();
|
||||
if (taskList?.Count > 0)
|
||||
{
|
||||
PrdTaskBehavior.Release => DictConst.ToBeStartedEnCode,
|
||||
PrdTaskBehavior.Start => DictConst.InProgressEnCode,
|
||||
PrdTaskBehavior.Closed => DictConst.ClosedEnCode,
|
||||
PrdTaskBehavior.Compled => DictConst.ComplatedEnCode,
|
||||
_ => throw new NotImplementedException(),
|
||||
};
|
||||
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)
|
||||
{
|
||||
|
||||
if (list?.Count > 0)
|
||||
string SetTaskStatus(PrdTaskBehavior behavior) => behavior switch
|
||||
{
|
||||
var schedQtySum = list.Sum(x => x.scheduled_qty);
|
||||
var planQtySum = list.Sum(x => x.plan_qty);
|
||||
if (schedQtySum < planQtySum)
|
||||
PrdTaskBehavior.Release => DictConst.ToBeStartedEnCode,
|
||||
PrdTaskBehavior.Start => DictConst.InProgressEnCode,
|
||||
PrdTaskBehavior.Closed => DictConst.ClosedEnCode,
|
||||
PrdTaskBehavior.Compled => DictConst.ComplatedEnCode,
|
||||
_ => throw new NotImplementedException(),
|
||||
};
|
||||
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)
|
||||
{
|
||||
if (list?.Count > 0)
|
||||
{
|
||||
throw new AppFriendlyException("任务数量必须大于等于生产计划数量,才可完成", 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
row = await db.Updateable<PrdMoTask>()
|
||||
.SetColumns(it => new PrdMoTask { mo_task_status = status })
|
||||
.Where(it => input.TaskIds.Contains(it.id))
|
||||
.ExecuteCommandAsync();
|
||||
if (row > 0)
|
||||
{
|
||||
//更新子任务
|
||||
var subMoTaskList = await db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.parent_id)).ToListAsync();
|
||||
if (subMoTaskList?.Count > 0)
|
||||
{
|
||||
var subTaskIds = subMoTaskList.Select(it => it.id).ToList();
|
||||
row = await db.Updateable<PrdMoTask>()
|
||||
.SetColumns(it => new PrdMoTask { mo_task_status = status })
|
||||
.Where(it => subTaskIds.Contains(it.id))
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
//插入操作记录日志
|
||||
var prdMOTasks = await _db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.id) && string.IsNullOrEmpty(it.parent_id)).ToListAsync();
|
||||
if (prdMOTasks?.Count > 0)
|
||||
{
|
||||
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)
|
||||
var schedQtySum = list.Sum(x => x.scheduled_qty);
|
||||
var planQtySum = list.Sum(x => x.plan_qty);
|
||||
if (schedQtySum < planQtySum)
|
||||
{
|
||||
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<ToolMolds>().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;
|
||||
throw new AppFriendlyException("任务数量必须大于等于生产计划数量,才可完成", 500);
|
||||
}
|
||||
taskLogEntities.Add(taskLog);
|
||||
}
|
||||
else
|
||||
}
|
||||
|
||||
var taskReportLogs = new List<PrdMoTask>();
|
||||
var prdTaskList = await db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.id)).ToListAsync();
|
||||
if (prdTaskList?.Count > 0)
|
||||
{
|
||||
prdTaskList.ForEach(x => x.mo_task_status = status);
|
||||
row = await db.Updateable(prdTaskList).ExecuteCommandAsync();
|
||||
if (row > 0)
|
||||
{
|
||||
var records = await db.Queryable<PrdTaskLog>().Where(it => it.mo_task_id == taskLog.mo_task_id).ToListAsync();
|
||||
if (records != null && !records.Select(x => x.status).Contains(status))
|
||||
taskReportLogs.AddRange(prdTaskList);
|
||||
}
|
||||
}
|
||||
if (row > 0)
|
||||
{
|
||||
//更新子任务
|
||||
var subMoTaskList = await db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.parent_id)).ToListAsync();
|
||||
if (subMoTaskList?.Count > 0)
|
||||
{
|
||||
var subTaskIds = subMoTaskList.Select(it => it.id).ToList();
|
||||
row = await db.Updateable<PrdMoTask>()
|
||||
.SetColumns(it => new PrdMoTask { mo_task_status = status })
|
||||
.Where(it => subTaskIds.Contains(it.id))
|
||||
.ExecuteCommandAsync();
|
||||
if (row > 0)
|
||||
{
|
||||
taskReportLogs.AddRange(subMoTaskList);
|
||||
}
|
||||
}
|
||||
}
|
||||
//插入操作记录日志
|
||||
var prdMOTasks = await _db.Queryable<PrdMoTask>().Where(it => input.TaskIds.Contains(it.id) && string.IsNullOrEmpty(it.parent_id)).ToListAsync();
|
||||
if (prdMOTasks?.Count > 0)
|
||||
{
|
||||
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();
|
||||
taskLog.status = status;
|
||||
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<ToolMolds>().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
|
||||
{
|
||||
var records = await db.Queryable<PrdTaskLog>().Where(it => it.mo_task_id == taskLog.mo_task_id).ToListAsync();
|
||||
if (records != null && !records.Select(x => x.status).Contains(status))
|
||||
{
|
||||
taskLog.id = SnowflakeIdHelper.NextId();
|
||||
taskLog.status = status;
|
||||
taskLogEntities.Add(taskLog);
|
||||
}
|
||||
}
|
||||
}
|
||||
row = await db.Insertable(taskLogEntities).ExecuteCommandAsync();
|
||||
|
||||
List<PrdReportRecord> prdReportLogs = new();
|
||||
List<PrdMoTaskDefectRecord> prdTaskDefectLogs = new();
|
||||
if (taskReportLogs?.Count > 0)
|
||||
{
|
||||
foreach (var taskInfo in taskReportLogs)
|
||||
{
|
||||
//组装生产提报对象
|
||||
var material = (await db.Queryable<BasMaterial>().FirstAsync(it => it.id == taskInfo.material_id));
|
||||
var mo = await db.Queryable<PrdMo>().FirstAsync(it => it.id == taskInfo.mo_id);
|
||||
var record = taskInfo.Adapt<PrdReportRecord>();
|
||||
record.masterial_code = material?.code;
|
||||
record.masterial_name = material?.name;
|
||||
record.plan_start_date = taskInfo.estimated_start_date;
|
||||
record.plan_end_date = taskInfo.estimated_end_date;
|
||||
record.plan_qty = taskInfo.plan_qty;
|
||||
record.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == taskInfo.eqp_id))?.code;
|
||||
record.mo_task_type = mo?.mo_type;
|
||||
record.status = taskInfo.mo_task_status;
|
||||
record.mo_task_id = taskInfo.id;
|
||||
//record.completed_qty = (await db.Queryable<PrdReport>().Where(it => it.mo_task_code == taskInfo.mo_task_code).SumAsync(it => it.reported_work_qty)).Value;
|
||||
prdReportLogs.Add(record);
|
||||
|
||||
//组装自检报废对象
|
||||
var sacipRecord = new PrdMoTaskDefectRecord();
|
||||
sacipRecord.material_code = material?.code!;
|
||||
sacipRecord.material_name = material?.name!;
|
||||
sacipRecord.eqp_code = (await db.Queryable<EqpEquipment>().FirstAsync(it => it.id == taskInfo.eqp_id))?.code!;
|
||||
sacipRecord.mold_name = (await db.Queryable<ToolMolds>().FirstAsync(it => it.id == taskInfo.mold_id))?.mold_name!;
|
||||
sacipRecord.estimated_start_date = taskInfo.estimated_start_date;
|
||||
sacipRecord.estimated_end_date = taskInfo.estimated_end_date;
|
||||
sacipRecord.plan_qty = taskInfo.plan_qty;
|
||||
sacipRecord.scrap_qty = taskInfo.scrap_qty.HasValue ? taskInfo.scrap_qty.Value : 0;
|
||||
sacipRecord.status = taskInfo.mo_task_status;
|
||||
sacipRecord.create_id = _userManager.UserId;
|
||||
sacipRecord.create_time = DateTime.Now;
|
||||
sacipRecord.mo_task_id = taskInfo.id;
|
||||
sacipRecord.mo_task_code = taskInfo.mo_task_code;
|
||||
sacipRecord.mo_task_type = mo?.mo_type;
|
||||
sacipRecord.status = taskInfo.mo_task_status;
|
||||
prdTaskDefectLogs.Add(sacipRecord);
|
||||
}
|
||||
}
|
||||
row = await db.Insertable(prdReportLogs).ExecuteCommandAsync();
|
||||
row = await db.Insertable(prdTaskDefectLogs).ExecuteCommandAsync();
|
||||
}
|
||||
row = await db.Insertable(taskLogEntities).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
throw new AppFriendlyException("只有待下发状态的任务才可下发", 500);
|
||||
return (row > 0);
|
||||
}
|
||||
|
||||
@@ -968,38 +1030,31 @@ 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);
|
||||
var report = await db.Queryable<PrdReport>().FirstAsync(it => it.mo_task_id == input.mo_task_id);
|
||||
|
||||
if (report is not null)
|
||||
{
|
||||
report.mo_task_code = input.mo_task_code;
|
||||
report.mo_task_id = input.mo_task_id;
|
||||
report.reported_work_qty += input.reported_qty;
|
||||
report.prd_qty += input.reported_qty;
|
||||
|
||||
}
|
||||
else
|
||||
//if (report is not null)
|
||||
//{
|
||||
// report.mo_task_code = input.mo_task_code;
|
||||
// report.mo_task_id = input.mo_task_id;
|
||||
// report.reported_work_qty += input.reported_qty;
|
||||
// report.prd_qty += input.reported_qty;
|
||||
//}
|
||||
//else
|
||||
{
|
||||
report = input.Adapt<PrdReport>();
|
||||
report.id = SnowflakeIdHelper.NextId();
|
||||
report.reported_work_qty = input.reported_qty;
|
||||
report.prd_qty = input.reported_qty;
|
||||
report.reported_qty = input.reported_qty;
|
||||
report.create_id = _userManager.UserId;
|
||||
report.create_time = DateTime.Now;
|
||||
|
||||
}
|
||||
row = await db.Storageable(report).ExecuteCommandAsync();
|
||||
var prdTask = await db.Queryable<PrdMoTask>().FirstAsync(it => it.mo_task_code == input.mo_task_code);
|
||||
var record = prdTask.Adapt<PrdReportRecord>();
|
||||
if (prdTask != null)
|
||||
row = await db.Insertable(report).ExecuteCommandAsync();
|
||||
var master = await db.Queryable<PrdReportRecord>().FirstAsync(it => it.mo_task_id == input.mo_task_id);
|
||||
if (master != null)
|
||||
{
|
||||
var material = (await db.Queryable<BasMaterial>().FirstAsync(it => it.id == prdTask.material_id));
|
||||
record.id = SnowflakeIdHelper.NextId();
|
||||
record.masterial_code = material?.code;
|
||||
record.masterial_name = material?.name;
|
||||
record.plan_start_date = prdTask.estimated_start_date;
|
||||
record.plan_end_date = prdTask.estimated_end_date;
|
||||
record.plan_qty = prdTask.plan_qty;
|
||||
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();
|
||||
master.reported_work_qty += input.reported_qty;
|
||||
master.completed_qty += input.reported_qty;
|
||||
await db.Updateable(master).ExecuteCommandAsync();
|
||||
}
|
||||
return row > 0;
|
||||
}
|
||||
@@ -1060,6 +1115,18 @@ namespace Tnb.ProductionMgr
|
||||
{
|
||||
await db.Updateable<PrdMoTask>().SetColumns(it => new PrdMoTask { scrap_qty = scrapQty.Value }).Where(it => it.id == input.mo_task_id).ExecuteCommandAsync();
|
||||
}
|
||||
var defectRecord = await db.Queryable<PrdMoTaskDefectRecord>().FirstAsync(it => it.mo_task_id == input.mo_task_id);
|
||||
if (defectRecord != null)
|
||||
{
|
||||
defectRecord.scrap_qty += input.scrap_qty;
|
||||
await db.Updateable(defectRecord).ExecuteCommandAsync();
|
||||
}
|
||||
var reportMaster = await db.Queryable<PrdReportRecord>().FirstAsync(it => it.mo_task_id == input.mo_task_id);
|
||||
if (reportMaster != null)
|
||||
{
|
||||
reportMaster.completed_qty += input.scrap_qty;
|
||||
await db.Updateable(reportMaster).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
});
|
||||
return result.IsSuccess;
|
||||
@@ -1110,7 +1177,6 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
if (outMaterials?.Count > 0)
|
||||
{
|
||||
//var mids = await _db.Queryable<PrdMo>().Where(it => it.id == input.mo_id).Select(it => it.material_id).ToListAsync();
|
||||
var ids = outMaterials.Select(x => x.material_id).ToList();
|
||||
await _db.Deleteable<PrdMo>().Where(it => it.parent_id == input.mo_id).ExecuteCommandAsync();
|
||||
if (ids?.Count > 0)
|
||||
@@ -1149,19 +1215,6 @@ namespace Tnb.ProductionMgr
|
||||
|
||||
#endregion
|
||||
|
||||
private static dynamic DictionaryToObject(IDictionary<String, Object> dictionary)
|
||||
{
|
||||
var expandoObj = new ExpandoObject();
|
||||
var expandoObjCollection = (ICollection<KeyValuePair<String, Object>>)expandoObj;
|
||||
|
||||
foreach (var keyValuePair in dictionary)
|
||||
{
|
||||
expandoObjCollection.Add(keyValuePair);
|
||||
}
|
||||
dynamic eoDynamic = expandoObj;
|
||||
return eoDynamic;
|
||||
}
|
||||
|
||||
private static Dictionary<string, string[]> dicProperties = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase);
|
||||
private static T DictionaryToObject<T>(IDictionary<String, Object> dictionary) where T : class, new()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user