新增生产管理,组装包装根据BomId拆解生产任务接口
This commit is contained in:
@@ -26,6 +26,10 @@ public static class DictConst
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string AlreadyId = "26033187948309";
|
public const string AlreadyId = "26033187948309";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 工单状态-已下发Id
|
||||||
|
/// </summary>
|
||||||
|
public const string ScheduledId = "25019232867093";
|
||||||
|
/// <summary>
|
||||||
/// 工单状态-待排产
|
/// 工单状态-待排产
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string WaitProductId = "25019244276501";
|
public const string WaitProductId = "25019244276501";
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 组装、包装排产列表输出类
|
||||||
|
/// </summary>
|
||||||
|
public class PackingSchedulingListOutput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 产线Id
|
||||||
|
/// </summary>
|
||||||
|
public string workline_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 产线名称
|
||||||
|
/// </summary>
|
||||||
|
public string workline_name { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生产任务单号
|
||||||
|
/// </summary>
|
||||||
|
public string mo_task_code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 物料编码
|
||||||
|
/// </summary>
|
||||||
|
public string material_code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 物料名称
|
||||||
|
/// </summary>
|
||||||
|
public string material_name { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 产出数量
|
||||||
|
/// </summary>
|
||||||
|
public string qty { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,7 +78,7 @@ namespace Tnb.ProductionMgr.Entities.Dto
|
|||||||
/// Default:NULL::character varying
|
/// Default:NULL::character varying
|
||||||
/// Nullable:True
|
/// Nullable:True
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string line_id { get; set; }
|
public string workline_id { get; set; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -106,6 +106,11 @@ namespace Tnb.ProductionMgr.Entities.Dto
|
|||||||
/// 已排产数量
|
/// 已排产数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int scheduled_qty { get; set; }
|
public int scheduled_qty { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产bom id
|
||||||
|
/// </summary>
|
||||||
|
public string bom_id { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ using JNPF.VisualDev.Entitys;
|
|||||||
using Aop.Api.Domain;
|
using Aop.Api.Domain;
|
||||||
using Senparc.Weixin.MP.AdvancedAPIs.Card;
|
using Senparc.Weixin.MP.AdvancedAPIs.Card;
|
||||||
using Aspose.Cells.Drawing.Texts;
|
using Aspose.Cells.Drawing.Texts;
|
||||||
|
using JNPF.Systems.Entitys.Permission;
|
||||||
|
|
||||||
namespace Tnb.ProductionMgr
|
namespace Tnb.ProductionMgr
|
||||||
{
|
{
|
||||||
@@ -48,6 +49,7 @@ namespace Tnb.ProductionMgr
|
|||||||
private readonly IRunService _runService;
|
private readonly IRunService _runService;
|
||||||
private readonly IVisualDevService _visualDevService;
|
private readonly IVisualDevService _visualDevService;
|
||||||
private static Dictionary<string, object> _dicDefect = new Dictionary<string, object>();
|
private static Dictionary<string, object> _dicDefect = new Dictionary<string, object>();
|
||||||
|
private static Dictionary<string, object> _dicWorkLine = new Dictionary<string, object>();
|
||||||
private readonly ISqlSugarClient _db;
|
private readonly ISqlSugarClient _db;
|
||||||
|
|
||||||
|
|
||||||
@@ -374,6 +376,7 @@ namespace Tnb.ProductionMgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -403,7 +406,9 @@ namespace Tnb.ProductionMgr
|
|||||||
{
|
{
|
||||||
var db = _repository.AsSugarClient();
|
var db = _repository.AsSugarClient();
|
||||||
var row = -1;
|
var row = -1;
|
||||||
if (input.schedule_type.HasValue && input.schedule_type.Value == 1)
|
if (input.schedule_type.HasValue)
|
||||||
|
{
|
||||||
|
if (input.schedule_type.Value == 1) //注塑、基础排产
|
||||||
{
|
{
|
||||||
var moTask = input.Adapt<PrdMoTask>();
|
var moTask = input.Adapt<PrdMoTask>();
|
||||||
moTask.id = SnowflakeIdHelper.NextId();
|
moTask.id = SnowflakeIdHelper.NextId();
|
||||||
@@ -494,8 +499,56 @@ namespace Tnb.ProductionMgr
|
|||||||
await db.Ado.RollbackTranAsync();
|
await db.Ado.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (input.schedule_type.Value == 2) //组装、包装排产
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
return row > 0;
|
return row > 0;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取组装包装排产任务列表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<dynamic> GetPackSchedulingTaskList(ProductionSchedulingCrInput input)
|
||||||
|
{
|
||||||
|
if (_dicWorkLine.Count < 1)
|
||||||
|
{
|
||||||
|
_dicWorkLine = await _db.Queryable<OrganizeEntity>().Where(it => it.Category == "workline").ToDictionaryAsync(x => x.Id, x => x.FullName);
|
||||||
|
}
|
||||||
|
var outputList = new List<PackingSchedulingListOutput>();
|
||||||
|
var bom = await _db.Queryable<BasMbom>().FirstAsync(it => it.id == input.bom_id);
|
||||||
|
if (bom != null && bom.route_id.IsNotEmptyOrNull())
|
||||||
|
{
|
||||||
|
var routes = await _db.Queryable<BasRouteD>().Where(it => it.route_id == bom.route_id).ToListAsync();
|
||||||
|
if (routes?.Count > 0)
|
||||||
|
{
|
||||||
|
var processIds = routes.Select(x => x.process_id).ToList();
|
||||||
|
if (processIds?.Count > 0)
|
||||||
|
{
|
||||||
|
var bomOutputs = await _db.Queryable<BasMbomOutput>().Where(it => processIds.Contains(it.process_id)).ToListAsync();
|
||||||
|
if (bomOutputs?.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var item in bomOutputs)
|
||||||
|
{
|
||||||
|
var material = await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == item.material_id);
|
||||||
|
var output = new PackingSchedulingListOutput();
|
||||||
|
output.workline_id = input.workline_id;
|
||||||
|
output.workline_name = _dicWorkLine.ContainsKey(input.workline_id) ? _dicWorkLine[input.workline_id].ToString() : "";
|
||||||
|
output.material_code = material?.code;
|
||||||
|
output.material_name = material?.name;
|
||||||
|
output.qty = item.num;
|
||||||
|
outputList.Add(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return outputList;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 生产任务下发,开始 、结束、完成
|
/// 生产任务下发,开始 、结束、完成
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -588,8 +641,10 @@ namespace Tnb.ProductionMgr
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (taskLog.status != status)
|
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.id = SnowflakeIdHelper.NextId();
|
||||||
taskLog.status = status;
|
taskLog.status = status;
|
||||||
taskLogEntities.Add(taskLog);
|
taskLogEntities.Add(taskLog);
|
||||||
@@ -667,7 +722,6 @@ namespace Tnb.ProductionMgr
|
|||||||
var db = _repository.AsSugarClient();
|
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_code == input.mo_task_code);
|
||||||
|
|
||||||
|
|
||||||
if (report is not null)
|
if (report is not null)
|
||||||
{
|
{
|
||||||
report.mo_task_code = input.mo_task_code;
|
report.mo_task_code = input.mo_task_code;
|
||||||
@@ -818,15 +872,15 @@ namespace Tnb.ProductionMgr
|
|||||||
var result = await db.Ado.UseTranAsync(async () =>
|
var result = await db.Ado.UseTranAsync(async () =>
|
||||||
{
|
{
|
||||||
var row = -1;
|
var row = -1;
|
||||||
var prdTask = await db.Queryable<PrdTask>().FirstAsync(it => it.id == id);
|
var prdTask = await db.Queryable<PrdMoTask>().FirstAsync(it => it.id == id);
|
||||||
row = await db.Deleteable<PrdTask>().Where(it => it.id == id).ExecuteCommandAsync();
|
row = await db.Deleteable<PrdTask>().Where(it => it.id == id).ExecuteCommandAsync();
|
||||||
if (row > 0)
|
if (row > 0)
|
||||||
{
|
{
|
||||||
var prdMo = await db.Queryable<PrdMo>().FirstAsync(it => it.id == prdTask.mo_id);
|
var prdMo = await db.Queryable<PrdMo>().FirstAsync(it => it.id == prdTask.mo_id);
|
||||||
if (prdMo is not null)
|
if (prdMo is not null)
|
||||||
{
|
{
|
||||||
prdMo.input_qty += prdTask.scheduled_qty;
|
prdMo.scheduled_qty += prdTask.scheduled_qty;
|
||||||
//prdMo.icmo_status = DictConst.ToBeScheduledEncode;
|
prdMo.mo_status = DictConst.ScheduledId;
|
||||||
row = await db.Updateable(prdMo).ExecuteCommandAsync();
|
row = await db.Updateable(prdMo).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1010,7 +1010,7 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
|
|||||||
|
|
||||||
// 将逗号替换成一个单引号、逗号、单引号
|
// 将逗号替换成一个单引号、逗号、单引号
|
||||||
item.defaultValue = item.defaultValue?.Replace(",", "','");
|
item.defaultValue = item.defaultValue?.Replace(",", "','");
|
||||||
entity.Query = entity.Query?.Replace("{" + item.field + "}", "'" + item.defaultValue + "'");
|
entity.Query = entity.Query?.Replace("{" + item.field + "}", item.defaultValue); //自动加引号去掉 modify by ly on 20230515
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
entity.Query = entity.Query?.Replace("{" + item.field + "}", item.defaultValue);
|
entity.Query = entity.Query?.Replace("{" + item.field + "}", item.defaultValue);
|
||||||
|
|||||||
Reference in New Issue
Block a user