diff --git a/BasicData/Tnb.BasicData.Entitys/Consts/DictConst.cs b/BasicData/Tnb.BasicData.Entitys/Consts/DictConst.cs index 5d4f3bb9..66363946 100644 --- a/BasicData/Tnb.BasicData.Entitys/Consts/DictConst.cs +++ b/BasicData/Tnb.BasicData.Entitys/Consts/DictConst.cs @@ -15,6 +15,18 @@ public static class DictConst /// 生产任务状态TypeId /// public const string PrdTaskStatusTypeId = "25572555259157"; + + + /// + /// 工单状态-已排产 + /// + public const string AlreadyId = "25019252113685"; + /// + /// 工单状态-待排产 + /// + public const string WaitProductId = "25019244276501"; + + /// /// 工单状态 已下发字典Id /// diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Entity/BasItem.cs b/BasicData/Tnb.BasicData.Entitys/Entity/BasItem.cs similarity index 98% rename from ProductionMgr/Tnb.ProductionMgr.Entitys/Entity/BasItem.cs rename to BasicData/Tnb.BasicData.Entitys/Entity/BasItem.cs index 89152d3c..5a4d5621 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Entity/BasItem.cs +++ b/BasicData/Tnb.BasicData.Entitys/Entity/BasItem.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; using SqlSugar; -namespace Tnb.ProductionMgr.Entitys.Entity +namespace Tnb.BasicData.Entitys.Entity { /// ///产品信息 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Entity/EqpEquipment.cs b/BasicData/Tnb.BasicData.Entitys/Entity/EqpEquipment.cs similarity index 99% rename from ProductionMgr/Tnb.ProductionMgr.Entitys/Entity/EqpEquipment.cs rename to BasicData/Tnb.BasicData.Entitys/Entity/EqpEquipment.cs index d98420a2..4c2de0dd 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Entity/EqpEquipment.cs +++ b/BasicData/Tnb.BasicData.Entitys/Entity/EqpEquipment.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; using SqlSugar; -namespace Tnb.ProductionMgr.Entitys.Entity +namespace Tnb.BasicData.Entitys.Entity { /// ///设备登记 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Consts/DictionaryConstants.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Consts/DictionaryConstants.cs index a82c09e2..91518851 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Consts/DictionaryConstants.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Consts/DictionaryConstants.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Tnb.ProductionMgr.Entitys.新文件夹 +namespace Tnb.ProductionMgr.Entitys.Consts { /// /// 工单状态 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/EquipmentListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/EquipmentListOutput.cs index de4f87f6..ddda31cc 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/EquipmentListOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/EquipmentListOutput.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tnb.ProductionMgr.Entitys.Entity; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 设备列表输出参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoCrInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoCrInput.cs index f6577dcc..e74235cf 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoCrInput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoCrInput.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Tnb.ProductionPlanMgr.Entitys.Dto.WorkOrder +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 生产工单下发输入参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoldListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoldListOutput.cs index ee6ab026..9ce0390f 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoldListOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/MoldListOutput.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tnb.ProductionMgr.Entitys.Entity; -namespace Tnb.ProductionMgr.Entitys.Dto.WorkOrder +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 模具列表输出参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperInput.cs index 96e358aa..5113c8a4 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperInput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperInput.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 生产操作记录查询参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperOutput.cs index 63669644..45c532cf 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskOperOutput.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tnb.ProductionMgr.Entitys.Entity; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 生产操作记录输出类 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskReleaseUpInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskReleaseUpInput.cs index 339cb189..1fcca2bd 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskReleaseUpInput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskReleaseUpInput.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 生产任务单下发输入参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskSortOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskSortOutput.cs index 64a64a40..afd15b1c 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskSortOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/PrdTaskSortOutput.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tnb.ProductionMgr.Entitys.Entity; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 生产任务重新排序输出参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/ProductionSchedulingCrInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/ProductionSchedulingCrInput.cs index 18a3b1cf..5b8e4ffb 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/ProductionSchedulingCrInput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/ProductionSchedulingCrInput.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Tnb.ProductionMgr.Entitys.Dto.WorkOrder +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 生产工单排产输入参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TaskOperRecordOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TaskOperRecordOutput.cs index 7cd561cf..924cd320 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TaskOperRecordOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TaskOperRecordOutput.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Tnb.ProductionMgr.Entitys.Entity; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { public class TaskOperRecordOutput { diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TransferPlatformUpInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TransferPlatformUpInput.cs index 4ae9808a..fad272ca 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TransferPlatformUpInput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Dto/PrdManage/TransferPlatformUpInput.cs @@ -5,7 +5,7 @@ using System.Security.Principal; using System.Text; using System.Threading.Tasks; -namespace Tnb.ProductionMgr.Entitys.Dto.PrdManage +namespace Tnb.ProductionMgr.Entitys.Dto { /// /// 转移机台输入参数 diff --git a/ProductionMgr/Tnb.ProductionMgr.Entitys/Mapper/Mapper.cs b/ProductionMgr/Tnb.ProductionMgr.Entitys/Mapper/Mapper.cs index 74927245..fe07258d 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entitys/Mapper/Mapper.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entitys/Mapper/Mapper.cs @@ -1,5 +1,5 @@ using Mapster; -using Tnb.ProductionMgr.Entitys.Dto.WorkOrder; +using Tnb.ProductionMgr.Entitys.Dto; using Tnb.ProductionMgr.Entitys.Entity; namespace Tnb.ProductionMgr.Entitys.Mapper diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoService.cs index fc9da814..9328f9cc 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoService.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMoService.cs @@ -1,6 +1,6 @@ -using Tnb.ProductionPlanMgr.Entitys.Dto.WorkOrder; +using Tnb.ProductionMgr.Entitys.Dto; -namespace Tnb.ProductionPlanMgr.Interfaces +namespace Tnb.ProductionMgr.Interfaces { /// /// 工单生成 diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs index 2293f64f..6fbfd651 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs @@ -1,29 +1,18 @@ -using System.Dynamic; -using Aop.Api.Domain; -using JNPF.Common.Core.Manager; -using JNPF.Common.Extension; -using JNPF.Common.Filter; +using JNPF.Common.Core.Manager; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.Logging; -using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using Mapster; -using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using NPOI.OpenXmlFormats.Shared; -using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen; using SqlSugar; using Tnb.BasicData.Entitys; -using Tnb.ProductionMgr.Entitys; -using Tnb.ProductionMgr.Entitys.Dto.PrdManage; -using Tnb.ProductionMgr.Entitys.Dto.WorkOrder; +using Tnb.BasicData.Entitys.Entity; +using Tnb.ProductionMgr.Entitys.Dto; using Tnb.ProductionMgr.Entitys.Entity; -using Tnb.ProductionMgr.Entitys.新文件夹; -using Tnb.ProductionPlanMgr.Entitys.Dto.WorkOrder; -using Tnb.ProductionPlanMgr.Interfaces; +using Tnb.ProductionMgr.Interfaces; namespace Tnb.ProductionMgr { @@ -73,7 +62,7 @@ namespace Tnb.ProductionMgr ///
} ///
] /// - [HttpGet("moldlist/{itemId}")] + [HttpGet("{itemId}")] public async Task GetMoldListByItemId(string itemId) { var db = _repository.AsSugarClient(); @@ -97,7 +86,7 @@ namespace Tnb.ProductionMgr ///
/// /// - [HttpGet("equipments/{moldId}")] + [HttpGet("{moldId}")] public async Task GetEquipmentListByMoldId(string moldId) { var items = await _repository.AsSugarClient().Queryable() @@ -134,7 +123,7 @@ namespace Tnb.ProductionMgr ///
} ///
] /// - [HttpGet("sort/{eqpId}")] + [HttpGet("{eqpId}")] public async Task PrdTaskSort(string eqpId) { var taskStatusDic = await _dictionaryDataService.GetDicByTypeId(DictConst.PrdTaskStatusTypeId); @@ -160,7 +149,7 @@ namespace Tnb.ProductionMgr ///
/// 任务ID /// - [HttpGet("record/{taskId}")] + [HttpGet("{taskId}")] public async Task GetMoOperRecord(string taskId) { var list = await _repository.AsSugarClient().Queryable().Where(it => it.id == taskId).ToListAsync(); @@ -179,7 +168,7 @@ namespace Tnb.ProductionMgr ///
/// 生产工单下发输入参数 /// - [HttpPut("workorder-issue")] + [HttpPut] public async Task WorkOrderIssue(MoCrInput input) { if (input is null) @@ -207,7 +196,7 @@ namespace Tnb.ProductionMgr ///
/// 关联同组工单输入参数 /// - [HttpPost("relevancy")] + [HttpPost] public async Task RelevancySameGroupMo(MoCrInput input) { (bool executeRes, string errMsg) multi = (true, ""); @@ -257,7 +246,7 @@ namespace Tnb.ProductionMgr ///
/// 取消关联输入参数 /// - [HttpPost("CanelRelevancy")] + [HttpPost] public async Task CanelRelevancy(MoCrInput input) { return await _repository.AsSugarClient().Updateable() @@ -286,7 +275,7 @@ namespace Tnb.ProductionMgr /// /// - [HttpPost("scheduling")] + [HttpPost] public async Task ProductionScheduling(ProductionSchedulingCrInput input) { var row = -1; @@ -294,51 +283,131 @@ namespace Tnb.ProductionMgr { input.id ??= SnowflakeIdHelper.NextId(); var entity = input.Adapt(); - entity.status = "ToBeScheduled"; //任务单状态默认,待排产 + entity.status = DictConst.ToBeStartedEnCode; //任务单状态默认,待排产 entity.create_id = _userManager.UserId; entity.create_time = DateTime.Now; entity.prd_task_id = input.id; var db = _repository.AsSugarClient(); try { - await db.Ado.BeginTranAsync(); - - row = await db.Storageable(entity).ExecuteCommandAsync(); - var taskLogEntity = input.Adapt(); - taskLogEntity.id ??= SnowflakeIdHelper.NextId(); - taskLogEntity.task_id = input.id; - taskLogEntity.status ??= "ToBeStarted"; - taskLogEntity.create_id = _userManager.UserId; - taskLogEntity.create_time = DateTime.Now; - taskLogEntity.operator_name = _userManager.RealName; - - //任务状态变更时插入操作记录 - if (!db.Queryable().Where(it => it.task_id == input.id && it.status == taskLogEntity.status).Any()) + List entities = new(); + //根据工单Id查询同组工单号,进行同组工单排产处理 + var combineMoCodes = await db.Queryable().Where(it => it.id == input.mo_id).Select(it => it.combine_mo_code).Distinct().ToListAsync(); + if (combineMoCodes?.Count > 0) { - row = await db.Insertable(taskLogEntity).ExecuteCommandAsync(); + entities = await db.Queryable().Where(it => combineMoCodes.Contains(it.combine_mo_code)).ToListAsync(); } + await db.Ado.BeginTranAsync(); + //同组工单排产 + if (entities.Count > 0) + { + var icmoEntities = entities.Adapt>(); + icmoEntities.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.status = DictConst.ToBeStartedEnCode; //任务单状态默认,待排产 + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + x.prd_task_id = input.id; + }); + row = await db.Storageable(entities).ExecuteCommandAsync(); + var icmoRecords = icmoEntities.Adapt>(); + icmoRecords.ForEach(x => + { + x.id ??= SnowflakeIdHelper.NextId(); + x.task_id = input.id; + x.status ??= "ToBeStarted"; + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + x.operator_name = _userManager.RealName; + }); + var icmoIds = icmoRecords.Select(it => it.id).ToList(); + var statusMany = icmoRecords.Select(it => it.status).ToList(); + //任务状态变更时插入操作记录 + var logEntities = await db.Queryable().Where(it => !icmoIds.Contains(it.id) && !statusMany.Contains(it.status)).ToListAsync(); + row = await db.Insertable(logEntities).ExecuteCommandAsync(); + } + else + { + row = await db.Storageable(entity).ExecuteCommandAsync(); + var taskLogEntity = input.Adapt(); + taskLogEntity.id ??= SnowflakeIdHelper.NextId(); + taskLogEntity.task_id = input.id; + taskLogEntity.status ??= "ToBeStarted"; + taskLogEntity.create_id = _userManager.UserId; + taskLogEntity.create_time = DateTime.Now; + taskLogEntity.operator_name = _userManager.RealName; + + //任务状态变更时插入操作记录 + if (!db.Queryable().Where(it => it.task_id == input.id && it.status == taskLogEntity.status).Any()) + { + row = await db.Insertable(taskLogEntity).ExecuteCommandAsync(); + } + } + + if (row > 0) { - var obj = (await db.Queryable().FirstAsync(it => it.id == input.mo_id)); - obj.input_qty += entity.scheduled_qty; - var moStatus = ""; - //判断,已排产数量>=计划数量时将状态改为 已排产 - if (obj.input_qty >= obj.plan_qty) + if (combineMoCodes?.Count > 0) { - moStatus = MoStatus.AlreadyId; + var moList = await db.Queryable().Where(it => combineMoCodes.Contains(it.combine_mo_code)).ToListAsync(); + var icmoList = moList.Adapt>(); + var combinePlanQty = icmoList.Sum(x => x.plan_qty); //合并工单后的计划数量 + var combineScheduledQty = icmoList.Sum(x => x.scheduled_qty); //合并后的已排产数量 + if (combineScheduledQty < combinePlanQty) + { + icmoList.ForEach(x => + { + var item = moList.Find(xx => xx.id == x.mo_id); + if (item != null) + { + item.input_qty += x.scheduled_qty; + item.mo_status = DictConst.WaitProductId; + } + }); + } + else + { + //如果已排产数量大于计划数量,修改工单状态为,待开工 + if (combineScheduledQty >= combinePlanQty) + { + icmoList.ForEach(x => + { + var item = moList.Find(xx => xx.id == x.mo_id); + if (item != null) + { + item.input_qty += x.scheduled_qty; + item.mo_status = DictConst.AlreadyId; + } + }); + } + } + row = await db.Updateable(moList).ExecuteCommandAsync(); + } else { - //修改工单状态为待排产,同事修改已排产数量 - moStatus = MoStatus.WaitProductId; + var obj = (await db.Queryable().FirstAsync(it => it.id == input.mo_id)); + obj.input_qty += entity.scheduled_qty; + var moStatus = ""; + //判断,已排产数量>=计划数量时将状态改为 已排产 + if (obj.input_qty >= obj.plan_qty) + { + moStatus = DictConst.AlreadyId; + } + else + { + //修改工单状态为待排产,同事修改已排产数量 + moStatus = DictConst.WaitProductId; + } + row = await db.Updateable().SetColumns(it => new PrdMo + { + mo_status = moStatus, + input_qty = obj.input_qty + }) + .Where(it => it.id == entity.mo_id).ExecuteCommandAsync(); } - row = await db.Updateable().SetColumns(it => new PrdMo - { - mo_status = moStatus, - input_qty = obj.input_qty - }) - .Where(it => it.id == entity.mo_id).ExecuteCommandAsync(); } await db.Ado.CommitTranAsync(); @@ -355,7 +424,7 @@ namespace Tnb.ProductionMgr /// 生产任务下发 ///
/// - [HttpPost("task-release")] + [HttpPost] public async Task PrdTaskRelease(PrdTaskReleaseUpInput input) { if (input is null) @@ -381,7 +450,7 @@ namespace Tnb.ProductionMgr .SetColumns(it => new PrdTask { eqp_id = input.eqp_id }) .Where(it => it.id == input.icmo_id) .ExecuteCommandHasChangeAsync(); - } + } #endregion } diff --git a/ProductionMgr/Tnb.ProductionMgr/WorkOrderSchedulingService.cs b/ProductionMgr/Tnb.ProductionMgr/WorkOrderSchedulingService.cs index 1e4905c8..5f22f719 100644 --- a/ProductionMgr/Tnb.ProductionMgr/WorkOrderSchedulingService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/WorkOrderSchedulingService.cs @@ -12,11 +12,10 @@ using JNPF.DynamicApiController; using JNPF.Systems.Entitys.System; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using NPOI.SS.UserModel; using SqlSugar; using Tnb.ProductionMgr.Entitys.Entity; -namespace Tnb.ProductionPlanMgr +namespace Tnb.ProductionMgr { /// /// 生产排产