Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2023-05-08 17:42:16 +08:00
6 changed files with 128 additions and 10 deletions

View File

@@ -40,6 +40,18 @@ public static class DictConst
/// </summary>
public const string ToBeStartedEnCode = "ToBeStarted";
/// <summary>
/// 任务单状态-进行中
/// </summary>
public const string InProgressEnCode = "InProgress";
/// <summary>
/// 任务单状态-关闭编码
/// </summary>
public const string ClosedEnCode = "Closed";
/// <summary>
/// 任务单状态-完工编码
/// </summary>
public const string ComplatedEnCode = "Complated";
/// <summary>
/// 任务单状态-待排产
/// </summary>
public const string ToBeScheduledEncode = "ToBeScheduled";

View File

@@ -15,5 +15,14 @@ namespace Tnb.ProductionMgr.Entities.Dto
/// 生产任务ID列表
/// </summary>
public List<string> TaskIds { get; set; }
/// <summary>
/// 行为:
///<br/> Release(任务下发),
///<br/> Start(任务开始),
///<br/> Closed(任务关闭),
///<br/> Compled(任务完成)
/// </summary>
public string Behavior { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace Tnb.ProductionMgr.Entities.Enums
{
public enum Behavior
{
/// <summary>
/// 任务下发
/// </summary>
Release = 1,
/// <summary>
/// 任务开始
/// </summary>
Start = 2,
/// <summary>
/// 任务关闭
/// </summary>
Closed = 4,
/// <summary>
/// 任务完成
/// </summary>
Compled = 8,
}
}

View File

@@ -0,0 +1,23 @@
namespace Tnb.ProductionMgr.Entities.Enums
{
public enum Behavior
{
/// <summary>
/// 任务下发
/// </summary>
Release = 1,
/// <summary>
/// 任务开始
/// </summary>
Start = 2,
/// <summary>
/// 任务关闭
/// </summary>
Closed = 4,
/// <summary>
/// 任务完成
/// </summary>
Compled = 8,
}
}

View File

@@ -1,10 +1,12 @@
using System.Reflection.Emit;
using Aop.Api.Domain;
using JNPF.Common.Core.Manager;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Extensitions.EventBus;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Systems.Interfaces.System;
@@ -19,6 +21,7 @@ using Tnb.BasicData.Entitys.Entity;
using Tnb.EquipMgr.Entities;
using Tnb.ProductionMgr.Entities;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.ProductionMgr.Entities.Enums;
using Tnb.ProductionMgr.Interfaces;
namespace Tnb.ProductionMgr
@@ -164,7 +167,7 @@ namespace Tnb.ProductionMgr
return data;
}
/// <summary>
/// 查看工单操作记录
/// 查看生产任务操作记录
/// </summary>
/// <param name="taskId">任务ID</param>
/// <returns></returns>
@@ -383,7 +386,7 @@ namespace Tnb.ProductionMgr
if (row > 0)
{
if (icmoEntities?.Count > 0 && combineMoCodes?.FirstOrDefault() is not null)
if (icmoEntities?.Count > 0 && combineMoCodes?.FirstOrDefault() is not null)
{
var moList = await db.Queryable<PrdMo>().Where(it => combineMoCodes.Contains(it.combine_mo_code)).ToListAsync();
var combinePlanQty = icmoEntities?.Sum(x => x.plan_qty); //合并工单后的计划数量
@@ -458,23 +461,59 @@ namespace Tnb.ProductionMgr
return row > 0;
}
/// <summary>
/// 生产任务下发
/// 生产任务下发,开始 、结束、完成
/// </summary>
/// <param name="input">输入参数</param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<dynamic> PrdTaskRelease(PrdTaskReleaseUpInput input)
{
var row = -1;
if (input is null)
{
throw new ArgumentNullException(nameof(input));
}
if (input.TaskIds is null)
{
throw new ArgumentNullException(nameof(input.TaskIds));
}
if (input.Behavior.IsNullOrWhiteSpace())
{
throw new ArgumentException($"{nameof(input.Behavior)} not be null or empty");
}
string SetTaskStatus(Behavior behavior) => behavior switch
{
Behavior.Release => DictConst.ToBeStartedEnCode,
Behavior.Start => DictConst.InProgressEnCode,
Behavior.Closed => DictConst.ClosedEnCode,
Behavior.Compled => DictConst.ComplatedEnCode,
_ => throw new NotImplementedException(),
};
Behavior behavior = input.Behavior.ToEnum<Behavior>();
var status = SetTaskStatus(behavior);
var db = _repository.AsSugarClient();
var row = await db.Updateable<PrdTask>()
.SetColumns(it => new PrdTask { status = DictConst.ToBeStartedEnCode })
.Where(it => input.TaskIds.Contains(it.id))
.ExecuteCommandAsync();
if (behavior == Behavior.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);
var planQtySum = list.Sum(x => x.plan_qty);
if (schedQtySum < planQtySum)
{
throw new AppFriendlyException("任务数量必须大于等于生产计划数量,才可完成", 500);
}
}
}
row = await db.Updateable<PrdTask>()
.SetColumns(it => new PrdTask { status = status })
.Where(it => input.TaskIds.Contains(it.id))
.ExecuteCommandAsync();
return (row > 0);
}
/// <summary>
/// 生产任务单修改
/// </summary>
@@ -486,7 +525,7 @@ namespace Tnb.ProductionMgr
{
var row = -1;
var db = _repository.AsSugarClient();
if(input.icmo_id.IsNullOrWhiteSpace())
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);
switch (input.category)
@@ -533,7 +572,7 @@ namespace Tnb.ProductionMgr
if (row > 0)
{
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.icmo_status = DictConst.ToBeScheduledEncode;
@@ -546,4 +585,5 @@ namespace Tnb.ProductionMgr
}
}
}
}

View File

@@ -938,5 +938,16 @@ public static class StringExtensions
return kq * q / ((kq * q) + (kr * r) + (ks * s));
}
/// <summary>
/// 字符串转枚举
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="value">字符串值</param>
/// <returns>枚举值</returns>
public static T ToEnum<T>(this string value)
{
return (T)System.Enum.Parse(typeof(T), value, true);
}
#endregion
}