diff --git a/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs b/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs index a758ff30..59b761da 100644 --- a/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs +++ b/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs @@ -44,6 +44,11 @@ namespace Tnb.BasicData /// 生产入库单 /// public const string PRDINSTOCK_CODE = "PrdInStock"; + + /// + /// 生产工单 + /// + public const string PROMO_CODE = "ProMoCode"; } diff --git a/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs b/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs index c2e5a7df..ba022ebb 100644 --- a/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs +++ b/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs @@ -70,6 +70,10 @@ public static class DictConst /// public const string AlreadyId = "26033187948309"; /// + /// 工单状态-待下发Id + /// + public const string ToBeScheduledId = "25019228116501"; + /// /// 工单状态-已下发Id /// public const string ScheduledId = "25019232867093"; diff --git a/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs b/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs new file mode 100644 index 00000000..96236403 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs @@ -0,0 +1,80 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Extension; +using JNPF.Common.Security; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.FriendlyException; +using JNPF.Message.Service; +using JNPF.Systems.Interfaces.System; +using JNPF.TaskScheduler; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using Tnb.BasicData; +using Tnb.BasicData.Entities; +using Tnb.ProductionMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; + +namespace Tnb.ProductionMgr +{ + [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + public class MesForErpService: IDynamicApiController, ITransient + { + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRuleService; + + public MesForErpService(ISqlSugarRepository repository, + IBillRullService billRuleService, + IUserManager userManager) + { + _userManager = userManager; + _billRuleService = billRuleService; + _db = repository.AsSugarClient(); + } + + [HttpPost] + [AllowAnonymous] + public async Task SavePrdMo(PrdMo input) + { + if (input == null) + throw Oops.Bah("参数不能为空"); + if(string.IsNullOrEmpty(input.mo_code)) + throw Oops.Bah("工单代码不能为空"); + if(string.IsNullOrEmpty(input.mo_type)) + throw Oops.Bah("工单类型不能为空"); + if(input.plan_start_date==null) + throw Oops.Bah("计划开始日期不能为空"); + if(input.plan_end_date==null) + throw Oops.Bah("计划结束日期不能为空"); + if(string.IsNullOrEmpty(input.material_code)) + throw Oops.Bah("物料编号不能为空"); + if(string.IsNullOrEmpty(input.unit_id)) + throw Oops.Bah("单位不能为空"); + if(input.plan_qty==null || input.plan_qty<=0) + throw Oops.Bah("计划数量不能为空"); + + BasMaterial basMaterial = await _db.Queryable().SingleAsync(x => x.code == input.material_code); + if(basMaterial==null) + throw Oops.Bah($"未找到物料编号为{input.material_code}的物料"); + + List basMaterialUnits = await _db.Queryable().Where(x => x.material_id == basMaterial.id).ToListAsync(); + List units = basMaterialUnits.Select(x => x.auxiliary_unit_id).Distinct().ToList(); + if(units!=null && !string.IsNullOrEmpty(basMaterial.unit_id)) units.Add(basMaterial.unit_id); + + if(!units.Contains(input.unit_id)) + throw Oops.Bah($"{basMaterial.name}不存在{input.unit_id}该单位"); + + input.id = SnowflakeIdHelper.NextId(); + input.mo_source = "1"; + input.mo_code = input.mo_code; + input.create_id = WmsWareHouseConst.AdministratorUserId; + input.create_time = DateTime.Now; + input.mo_status = DictConst.ToBeScheduledId; + await _db.Insertable(input).ExecuteCommandAsync(); + return "true"; + + } + } +} \ No newline at end of file