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