From 1af49bdb3cdaa44a7e44ebdc843fb8180596365f Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 15 五月 2025 16:34:39 +0800 Subject: [PATCH] 尾箱回库、移库逻辑开发 --- App_Start/Config.cs | 0 Dtos/Response/MoboxResponse.cs | 3 swagger.js | 21 /dev/null | 82 --- App_Start/Settings.cs | 0 Controllers/DebugController.cs | 52 -- config/config.json | 2 Models/TN_Check_Order.cs | 2 App_Start/SwaggerConfig.cs | 47 + Dtos/Request/AgvRequest.cs | 2 HH.WCS.Mobox3.DSZSH.csproj | 20 Services/AgvService.cs | 10 packages.config | 1 ServiceCore/CheckCore.cs | 2 App_Start/SwaggerControllerDescProvider.cs | 237 +++++++++ Consts/TaskName.cs | 3 Models/TN_Shift_Order.cs | 23 Models/TN_Check_Detail.cs | 5 Controllers/MoboxController.cs | 241 ++++++--- Services/MoboxService.cs | 173 ++++-- Models/TN_CG_Detail.cs | 7 ServiceCore/ShiftCore.cs | 117 ++++ Models/TN_Shift_Detail.cs | 25 + Dtos/Request/MoboxRequest.cs | 311 ++++++++++-- App_Start/Startup.cs | 4 25 files changed, 1,014 insertions(+), 376 deletions(-) diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7725d916-1bef-44d2-8384-bfd94e8b6457.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7725d916-1bef-44d2-8384-bfd94e8b6457.vsidx deleted file mode 100644 index 5569d0b..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7725d916-1bef-44d2-8384-bfd94e8b6457.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e39d6e75-9277-46f5-bff4-9390c52a26f9.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e39d6e75-9277-46f5-bff4-9390c52a26f9.vsidx deleted file mode 100644 index 6b872b4..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e39d6e75-9277-46f5-bff4-9390c52a26f9.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e9728df6-3b77-4640-883e-78a872e2fb53.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e9728df6-3b77-4640-883e-78a872e2fb53.vsidx deleted file mode 100644 index e14ea3e..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e9728df6-3b77-4640-883e-78a872e2fb53.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f2527103-d3d3-44d1-9a80-1e26bb5cf98f.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f2527103-d3d3-44d1-9a80-1e26bb5cf98f.vsidx deleted file mode 100644 index 2faa040..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f2527103-d3d3-44d1-9a80-1e26bb5cf98f.vsidx +++ /dev/null Binary files differ diff --git a/AppStart/SwaggerControllerDescProvider.cs b/AppStart/SwaggerControllerDescProvider.cs deleted file mode 100644 index 3db338d..0000000 --- a/AppStart/SwaggerControllerDescProvider.cs +++ /dev/null @@ -1,82 +0,0 @@ -锘縰sing Swashbuckle.Swagger; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Xml; - -namespace HH.WCS.Mobox3.DSZSH { - /// <summary> - /// Swagger 鏄剧ず鎺у埗鍣ㄧ殑鎻忚堪 - /// </summary> - public class SwaggerCacheProvider : ISwaggerProvider - { - private readonly ISwaggerProvider _swaggerProvider; - private static ConcurrentDictionary<string, SwaggerDocument> _cache = new ConcurrentDictionary<string, SwaggerDocument>(); - private readonly string _xmlPath; - - /// <summary> - /// - /// </summary> - /// <param name="swaggerProvider"></param> - /// <param name="xmlpath">xml鏂囨。璺緞</param> - public SwaggerCacheProvider(ISwaggerProvider swaggerProvider, string xmlpath) - { - _swaggerProvider = swaggerProvider; - _xmlPath = xmlpath; - } - - public SwaggerDocument GetSwagger(string rootUrl, string apiVersion) - { - var cacheKey = string.Format("{0}_{1}", rootUrl, apiVersion); - // 鍙鍙栦竴娆�- if (!_cache.TryGetValue(cacheKey, out SwaggerDocument srcDoc)) - { - srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion); - - srcDoc.vendorExtensions = new Dictionary<string, object> - { - { "ControllerDesc", GetControllerDesc() } - }; - _cache.TryAdd(cacheKey, srcDoc); - } - return srcDoc; - } - - /// <summary> - /// 浠嶢PI鏂囨。涓鍙栨帶鍒跺櫒鎻忚堪 - /// </summary> - /// <returns>鎵�湁鎺у埗鍣ㄦ弿杩�/returns> - public ConcurrentDictionary<string, string> GetControllerDesc() - { - ConcurrentDictionary<string, string> controllerDescDict = new ConcurrentDictionary<string, string>(); - if (File.Exists(_xmlPath)) - { - XmlDocument xmldoc = new XmlDocument(); - xmldoc.Load(_xmlPath); - - string[] arrPath; - int cCount = "Controller".Length; - foreach (XmlNode node in xmldoc.SelectNodes("//member")) - { - string type = node.Attributes["name"].Value; - if (type.StartsWith("T:")) - { - arrPath = type.Split('.'); - string controllerName = arrPath[arrPath.Length - 1]; - if (controllerName.EndsWith("Controller")) // 鎺у埗鍣�- { - // 鑾峰彇鎺у埗鍣ㄦ敞閲�- XmlNode summaryNode = node.SelectSingleNode("summary"); - string key = controllerName.Remove(controllerName.Length - cCount, cCount); - if (summaryNode != null && !string.IsNullOrEmpty(summaryNode.InnerText) && !controllerDescDict.ContainsKey(key)) - { - controllerDescDict.TryAdd(key, summaryNode.InnerText.Trim()); - } - } - } - } - } - return controllerDescDict; - } - } -} diff --git a/AppStart/Config.cs b/App_Start/Config.cs similarity index 100% rename from AppStart/Config.cs rename to App_Start/Config.cs diff --git a/AppStart/Settings.cs b/App_Start/Settings.cs similarity index 100% rename from AppStart/Settings.cs rename to App_Start/Settings.cs diff --git a/AppStart/Startup.cs b/App_Start/Startup.cs similarity index 96% rename from AppStart/Startup.cs rename to App_Start/Startup.cs index 373c710..16d4445 100644 --- a/AppStart/Startup.cs +++ b/App_Start/Startup.cs @@ -4,6 +4,8 @@ using System.Threading.Tasks; using System.Web.Http; using Microsoft.Owin; +using Newtonsoft.Json; + using Owin; using Swashbuckle.Application; @@ -20,6 +22,8 @@ defaults: new { id = RouteParameter.Optional } ); + //SwaggerConfig.Register(config); + // Web API routes //config.MapHttpAttributeRoutes(); diff --git a/AppStart/SwaggerConfig.cs b/App_Start/SwaggerConfig.cs similarity index 90% rename from AppStart/SwaggerConfig.cs rename to App_Start/SwaggerConfig.cs index 557097d..7d069fe 100644 --- a/AppStart/SwaggerConfig.cs +++ b/App_Start/SwaggerConfig.cs @@ -1,14 +1,49 @@ using System.Web.Http; using WebActivatorEx; -using HH.WCS.Mobox3.Template; +using HH.WCS.Mobox3.DSZSH; using Swashbuckle.Application; +using System.IO; +using System.Reflection; +using System; +using Swashbuckle.Examples; [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")] -namespace HH.WCS.Mobox3.Template +namespace HH.WCS.Mobox3.DSZSH { public class SwaggerConfig { + public static void Register(HttpConfiguration config) { + var thisAssembly = typeof(SwaggerConfig).Assembly; + + config + .EnableSwagger(c => { + c.SingleApiVersion("v1", "HH.WCS.Mobox3.DSZSH"); + + // 璁剧疆 XML 娉ㄩ噴璺緞 + var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; + //var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".xml"; + var commentsFileName = "bin\\Debug\\HH.WCS.Mobox3.DSZSH.xml"; + var commentsFile = Path.Combine(baseDirectory, commentsFileName); + + if (File.Exists(commentsFile)) { + c.IncludeXmlComments(commentsFile); + } + + // 鍏朵粬閰嶇疆... + c.UseFullTypeNameInSchemaIds(); + + // 鍚敤绀轰緥鏁版嵁 + //c.DescribeAllEnumsAsStrings(); + //c.OperationFilter<ExamplesOperationFilter>(); + //c.ModelFilter<ExamplesModelFilter>(); + + }) + .EnableSwaggerUi(c => { + // UI 閰嶇疆 + }); + } + public static void Register() { var thisAssembly = typeof(SwaggerConfig).Assembly; @@ -32,7 +67,7 @@ // hold additional metadata for an API. Version and title are required but you can also provide // additional fields by chaining methods off SingleApiVersion. // - c.SingleApiVersion("v1", "HH.WCS.Mobox3.Template"); + c.SingleApiVersion("v1", "HH.WCS.Mobox3.DSZSH"); // If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option. // @@ -61,7 +96,7 @@ //c.BasicAuth("basic") // .Description("Basic HTTP Authentication"); // - // NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section + // NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section //c.ApiKey("apiKey") // .Description("API Key Authentication") // .Name("apiKey") @@ -103,6 +138,10 @@ // //c.IncludeXmlComments(GetXmlCommentsPath()); + // 鍚敤 XML 娉ㄩ噴 + var xmlFile = $"{System.AppDomain.CurrentDomain.BaseDirectory}\\HH.WCS.Mobox3.DSZSH.xml"; + c.IncludeXmlComments(xmlFile); + // Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types // exposed in your API. However, there may be occasions when more control of the output is needed. // This is supported through the "MapType" and "SchemaFilter" options: diff --git a/App_Start/SwaggerControllerDescProvider.cs b/App_Start/SwaggerControllerDescProvider.cs new file mode 100644 index 0000000..74fd3f2 --- /dev/null +++ b/App_Start/SwaggerControllerDescProvider.cs @@ -0,0 +1,237 @@ +锘縰sing Swashbuckle.Swagger; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; + +namespace HH.WCS.Mobox3.DSZSH { + /// <summary> + /// Swagger 鏄剧ず鎺у埗鍣ㄧ殑鎻忚堪 + /// </summary> + public class SwaggerCacheProvider : ISwaggerProvider + { + private readonly ISwaggerProvider _swaggerProvider; + private static ConcurrentDictionary<string, SwaggerDocument> _cache = new ConcurrentDictionary<string, SwaggerDocument>(); + private readonly string _xmlPath; + + /// <summary> + /// + /// </summary> + /// <param name="swaggerProvider"></param> + /// <param name="xmlpath">xml鏂囨。璺緞</param> + public SwaggerCacheProvider(ISwaggerProvider swaggerProvider, string xmlpath) + { + _swaggerProvider = swaggerProvider; + _xmlPath = xmlpath; + } + + public SwaggerDocument GetSwagger(string rootUrl, string apiVersion) + { + var cacheKey = string.Format("{0}_{1}", rootUrl, apiVersion); + // 鍙鍙栦竴娆�+ if (!_cache.TryGetValue(cacheKey, out SwaggerDocument srcDoc)) + { + srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion); + + srcDoc.vendorExtensions = new Dictionary<string, object> + { + { "ControllerDesc", GetControllerDesc() } + }; + _cache.TryAdd(cacheKey, srcDoc); + } + return srcDoc; + } + + /// <summary> + /// 浠嶢PI鏂囨。涓鍙栨帶鍒跺櫒鎻忚堪 + /// </summary> + /// <returns>鎵�湁鎺у埗鍣ㄦ弿杩�/returns> + public ConcurrentDictionary<string, string> GetControllerDesc() + { + ConcurrentDictionary<string, string> controllerDescDict = new ConcurrentDictionary<string, string>(); + if (File.Exists(_xmlPath)) + { + XmlDocument xmldoc = new XmlDocument(); + xmldoc.Load(_xmlPath); + + string[] arrPath; + int cCount = "Controller".Length; + foreach (XmlNode node in xmldoc.SelectNodes("//member")) + { + string type = node.Attributes["name"].Value; + if (type.StartsWith("T:")) + { + arrPath = type.Split('.'); + string controllerName = arrPath[arrPath.Length - 1]; + if (controllerName.EndsWith("Controller")) // 鎺у埗鍣�+ { + // 鑾峰彇鎺у埗鍣ㄦ敞閲�+ XmlNode summaryNode = node.SelectSingleNode("summary"); + string key = controllerName.Remove(controllerName.Length - cCount, cCount); + if (summaryNode != null && !string.IsNullOrEmpty(summaryNode.InnerText) && !controllerDescDict.ContainsKey(key)) + { + controllerDescDict.TryAdd(key, summaryNode.InnerText.Trim()); + } + } + } + } + } + return controllerDescDict; + } + } + + /// <summary> + /// 澧炲己鐗圫wagger鎻愪緵绋嬪簭锛屾敮鎸佹樉绀烘帶鍒跺櫒鍜屾ā鍨嬬殑瀹屾暣鏂囨。娉ㄩ噴 + /// </summary> + public class EnhancedSwaggerCacheProvider : ISwaggerProvider { + private readonly ISwaggerProvider _swaggerProvider; + private static readonly ConcurrentDictionary<string, SwaggerDocument> _cache = new ConcurrentDictionary<string, SwaggerDocument>(); + private readonly string _xmlPath; + + public EnhancedSwaggerCacheProvider(ISwaggerProvider swaggerProvider, string xmlpath) { + _swaggerProvider = swaggerProvider; + _xmlPath = xmlpath; + } + + public SwaggerDocument GetSwagger(string rootUrl, string apiVersion) { + var cacheKey = $"{rootUrl}_{apiVersion}"; + + return _cache.GetOrAdd(cacheKey, _ => + { + var srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion); + + // 娣诲姞鎺у埗鍣ㄦ弿杩�+ var (controllerDesc, modelDesc) = GetXmlComments(); + + srcDoc.vendorExtensions = new Dictionary<string, object> + { + { "ControllerDesc", controllerDesc }, + { "ModelDesc", modelDesc } + }; + + // 涓烘ā鍨嬫坊鍔犳弿杩�+ EnhanceModelDescriptions(srcDoc, modelDesc); + + return srcDoc; + }); + } + + /// <summary> + /// 浠嶺ML鏂囨。涓彁鍙栨帶鍒跺櫒鍜屾ā鍨嬫弿杩�+ /// </summary> + private (ConcurrentDictionary<string, string> controllerDesc, + ConcurrentDictionary<string, string> modelDesc) GetXmlComments() { + var controllerDesc = new ConcurrentDictionary<string, string>(); + var modelDesc = new ConcurrentDictionary<string, string>(); + + if (!File.Exists(_xmlPath)) return (controllerDesc, modelDesc); + + var xmldoc = new XmlDocument(); + xmldoc.Load(_xmlPath); + + foreach (XmlNode node in xmldoc.SelectNodes("//member")) { + var type = node.Attributes?["name"]?.Value; + if (string.IsNullOrEmpty(type)) continue; + + if (type.StartsWith("T:")) { + var arrPath = type.Split('.'); + var typeName = arrPath[arrPath.Length - 1]; // 鑾峰彇鏈�悗涓�儴鍒�+ + // 澶勭悊鎺у埗鍣�+ if (typeName.EndsWith("Controller")) { + var summaryNode = node.SelectSingleNode("summary"); + if (summaryNode != null && !string.IsNullOrWhiteSpace(summaryNode.InnerText)) { + //var key = typeName[..^"Controller".Length]; + + string key = typeName; + const string controllerSuffix = "Controller"; + if (typeName.EndsWith(controllerSuffix)) { + key = typeName.Substring(0, typeName.Length - controllerSuffix.Length); + } + + controllerDesc.TryAdd(key, summaryNode.InnerText.Trim()); + } + } + // 澶勭悊妯″瀷绫�+ else if (IsModelType(node)) { + var summaryNode = node.SelectSingleNode("summary"); + if (summaryNode != null && !string.IsNullOrWhiteSpace(summaryNode.InnerText)) { + modelDesc.TryAdd(typeName, summaryNode.InnerText.Trim()); + } + + // 澶勭悊妯″瀷灞炴� + EnhancePropertyDescriptions(node, modelDesc); + } + } + + } + + return (controllerDesc, modelDesc); + } + + /// <summary> + /// 鍒ゆ柇鏄惁涓烘ā鍨嬬被鍨�+ /// </summary> + private bool IsModelType(XmlNode node) { + // 杩欓噷鍙互鏍规嵁瀹為檯闇�眰璋冩暣鍒ゆ柇閫昏緫 + // 渚嬪锛氭帓闄ontroller銆佹帓闄ょ壒瀹氬懡鍚嶇┖闂寸瓑 + var type = node.Attributes?["name"]?.Value ?? ""; + return type.StartsWith("T:") && + !type.EndsWith("Controller") && + !type.Contains(".Controllers.") && + !type.Contains(".Infrastructure."); + } + + /// <summary> + /// 澧炲己妯″瀷灞炴�鐨勬弿杩�+ /// </summary> + private void EnhancePropertyDescriptions(XmlNode typeNode, ConcurrentDictionary<string, string> modelDesc) { + var typeName = typeNode.Attributes?["name"]?.Value?.Split('.')?.LastOrDefault()?.Substring(2); + if (string.IsNullOrEmpty(typeName)) return; + + foreach (XmlNode propNode in typeNode.SelectNodes("field|property")) { + var propName = propNode.Attributes?["name"]?.Value; + if (string.IsNullOrEmpty(propName)) continue; + + var summaryNode = propNode.SelectSingleNode("summary"); + var exampleNode = propNode.SelectSingleNode("example"); + + if (summaryNode != null && !string.IsNullOrWhiteSpace(summaryNode.InnerText)) { + var fullPropKey = $"{typeName}.{propName}"; + var description = summaryNode.InnerText.Trim(); + + if (exampleNode != null && !string.IsNullOrWhiteSpace(exampleNode.InnerText)) { + description += $"\n\n绀轰緥: {exampleNode.InnerText.Trim()}"; + } + + modelDesc.TryAdd(fullPropKey, description); + } + } + } + + /// <summary> + /// 澧炲己Swagger鏂囨。涓殑妯″瀷鎻忚堪 + /// </summary> + private void EnhanceModelDescriptions(SwaggerDocument swaggerDoc, ConcurrentDictionary<string, string> modelDesc) { + if (swaggerDoc.definitions == null) return; + + foreach (var definition in swaggerDoc.definitions) { + // 澶勭悊妯″瀷绫绘湰韬弿杩�+ if (modelDesc.TryGetValue(definition.Key, out var classDesc)) { + definition.Value.description = classDesc; + } + + // 澶勭悊妯″瀷灞炴�鎻忚堪 + if (definition.Value.properties != null) { + foreach (var property in definition.Value.properties) { + var fullPropKey = $"{definition.Key}.{property.Key}"; + if (modelDesc.TryGetValue(fullPropKey, out var propDesc)) { + property.Value.description = propDesc; + } + } + } + } + } + } +} diff --git a/Consts/TaskName.cs b/Consts/TaskName.cs index 1b8f206..a30d2f3 100644 --- a/Consts/TaskName.cs +++ b/Consts/TaskName.cs @@ -18,5 +18,8 @@ public const string 鎶芥_涓嶅悎鏍肩Щ搴�= "鎶芥-涓嶅悎鏍肩Щ搴�; public const string 鎶芥_鍑哄簱 = "鎶芥-鍑哄簱"; public const string 鎶芥_鍚堟牸鍥炲簱 = "鎶芥-鍚堟牸鍥炲簱"; + public const string 绉诲簱 = "绉诲簱"; + public const string 灏剧鍥炲簱 = "灏剧鍥炲簱"; + } } diff --git a/Controllers/DebugController.cs b/Controllers/DebugController.cs index 90a1f58..f40ffe1 100644 --- a/Controllers/DebugController.cs +++ b/Controllers/DebugController.cs @@ -72,58 +72,6 @@ return DebugService.InsertLocCntrCg(); } - public string AddCgCntrLocRel(CgInfo model) { - var db = DbHelper.GetDbClient(); - - try { - using (var tran = db.Ado.UseTran()) { - var loc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.LocId); - if (loc == null) { - var newLoc = new TN_Location { S_CODE = model.LocId, N_CURRENT_NUM = 1 }; - if (db.Insertable<TN_Location>(newLoc).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return $"鎻掑叆浣嶇疆{model.LocId}澶辫触"; - } - loc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.LocId); - } - if (loc.N_CURRENT_NUM == 0) { - loc.N_CURRENT_NUM = 1; - if (db.Updateable<TN_Location>(loc).UpdateColumns( - it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return $"淇敼浣嶇疆{model.LocId}澶辫触"; - } - } - - var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.LocId && a.S_CNTR_CODE == model.CntId); - if (locCntrRel == null) { - var locList = new List<TN_Loc_Container>(); - locList.Add(new TN_Loc_Container { S_LOC_CODE = model.LocId, S_CNTR_CODE = model.CntId }); - if (db.Insertable<TN_Loc_Container>(locList).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return $"鎻掑叆浣嶇疆鎵樼洏鍏崇郴{model.LocId}-{model.CntId}澶辫触"; - } - } - - var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.CntId && a.S_ITEM_CODE == model.ItemCode); - if (cgDetail == null) { - var locList = new List<TN_CG_Detail>(); - locList.Add(new TN_CG_Detail { S_CNTR_CODE = model.CntId, S_ITEM_CODE = model.ItemCode }); - if (db.Insertable<TN_CG_Detail>(locList).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return $"鎻掑叆鎵樼洏鐗╂枡鍏崇郴{model.CntId}-{model.ItemCode}澶辫触"; - } - } - - tran.CommitTran(); - } - } - catch (Exception ex) { - return $"鍑洪敊锛歿ex}"; - } - - return "success"; - } } public class CgInfo { diff --git a/Controllers/MoboxController.cs b/Controllers/MoboxController.cs index 6b9b8fd..4bb42eb 100644 --- a/Controllers/MoboxController.cs +++ b/Controllers/MoboxController.cs @@ -25,47 +25,49 @@ /// <param name="model"></param> /// <returns></returns> [HttpPost] - [Route("GoodpackOffline")] + [Route("goodpack-offline")] public SimpleResult GoodpackOffline(GoodpackOfflineInfo model) { LogHelper.InfoApi("濂借繍绠�婊℃墭涓嬬嚎鍏ュ簱(PDA)", model); return MoboxService.GoodpackOffline(model); } - /// <summary> - /// 绌烘墭/绌虹缁戝畾 - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public SimpleResult EmptyBind(EmptyBindInfo model) { - LogHelper.InfoApi("绌烘墭/绌虹缁戝畾", model); + ///// <summary> + ///// 绌烘墭/绌虹鍏ュ簱缁戝畾(PDA) + ///// </summary> + ///// <param name="model"></param> + ///// <returns></returns> + //public SimpleResult EmptyBind(EmptyBindInfo model) { + // LogHelper.InfoApi("绌烘墭/绌虹缁戝畾", model); - if (model.CntrType == "鎵樼洏") { - //LogHelper.Info($"瑙﹀彂API锛氱┖鎵樼粦瀹�" + JsonConvert.SerializeObject(model), "API"); - return MoboxService.EmptyBindPallet(model); - } - else if (model.CntrType == "濂借繍绠�) { - //LogHelper.Info($"瑙﹀彂API锛氱┖绠辩粦瀹�" + JsonConvert.SerializeObject(model), "API"); - return MoboxService.EmptyBindGoodpack(model); - } - else { - return BuildSimpleResult(-1, $"涓嶅悎娉曠殑瀹瑰櫒绫诲瀷锛�{model.CntrType}'"); - } - } + // if (model.CntrType == "鎵樼洏") { + // //LogHelper.Info($"瑙﹀彂API锛氱┖鎵樼粦瀹�" + JsonConvert.SerializeObject(model), "API"); + // return MoboxService.EmptyBindPallet(model); + // } + // else if (model.CntrType == "濂借繍绠�) { + // //LogHelper.Info($"瑙﹀彂API锛氱┖绠辩粦瀹�" + JsonConvert.SerializeObject(model), "API"); + // return MoboxService.EmptyBindGoodpack(model); + // } + // else { + // return BuildSimpleResult(-1, $"涓嶅悎娉曠殑瀹瑰櫒绫诲瀷锛�{model.CntrType}'"); + // } + //} /// <summary> /// 绌烘墭/绌虹鍏ュ簱(PDA) /// </summary> /// <param name="model"></param> /// <returns></returns> + [HttpPost] + [Route("empty-inbound")] public SimpleResult EmptyInbound(EmptyInboundInfo model) { LogHelper.InfoApi("绌烘墭/绌虹鍏ュ簱", model); var db = DbHelper.GetDbClient(); var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(lc => lc.S_LOC_CODE == model.LocCode).First(); + .Where(lc => lc.S_CNTR_CODE == model.CntrCode).First(); if (locCntrRel == null) { - return BuildSimpleResult(-1, $"涓嶅瓨鍦ㄥ凡缁戝畾瀹瑰櫒鐨勮揣浣嶅彿锛�{model.LocCode}'"); + return BuildSimpleResult(-1, $"涓嶅瓨鍦ㄥ凡缁戝畾瀹瑰櫒鐨勮揣浣嶅彿锛�{model.CnteType}'"); } if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { @@ -87,95 +89,146 @@ } } - /// <summary> - /// 绌烘墭/绌虹涓婄嚎(PDA) - /// </summary> - /// <returns> - /// 浜哄伐浣跨敤PDA鎵爜锛屾牴鎹墿鏂欑被鍨嬪垽鏂笂绾跨┖鎵�绌虹 - /// </returns> - public SimpleResult EmptyOnline(EmptyOnlineInfo model) { - var db = DbHelper.GetDbClient(); - var locCntrRel = db.Queryable<TN_Loc_Container>() - .LeftJoin<TN_CG_Detail>((lc, cd) => lc.S_CNTR_CODE == cd.S_CNTR_CODE) - .Where((lc, cd) => cd.S_ITEM_CODE == model.ItemCode) - .First(); + ///// <summary> + ///// 绌烘墭/绌虹涓婄嚎(PDA) + ///// </summary> + ///// <returns> + ///// 浜哄伐浣跨敤PDA鎵爜锛屾牴鎹墿鏂欑被鍨嬪垽鏂笂绾跨┖鎵�绌虹 + ///// </returns> + //public SimpleResult EmptyOnline(EmptyOnlineInfo model) { + // var db = DbHelper.GetDbClient(); + // var locCntrRel = db.Queryable<TN_Loc_Container>() + // .LeftJoin<TN_CG_Detail>((lc, cd) => lc.S_CNTR_CODE == cd.S_CNTR_CODE) + // .Where((lc, cd) => cd.S_ITEM_CODE == model.ItemCode) + // .First(); - if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { + // if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { - return MoboxService.EmptyOnlinePallet(new EmptyOnlinePalletInfo { - CntId = locCntrRel.S_CNTR_CODE, - EndLoc = model.EndLoc - }); - } - else if (locCntrRel.S_CNTR_TYPE == "濂借繍绠�) { + // return MoboxService.EmptyOnlinePallet(new EmptyOnlinePalletInfo { + // CntId = locCntrRel.S_CNTR_CODE, + // EndLoc = model.EndLoc + // }); + // } + // else if (locCntrRel.S_CNTR_TYPE == "濂借繍绠�) { - return MoboxService.EmptyOnlineGoodpack(new EmptyOnlineGoodpackInfo { - CntId = locCntrRel.S_CNTR_CODE, - EndLoc = model.EndLoc - }); - } - else { - return BuildSimpleResult(-1, $"涓嶅悎娉曠殑瀹瑰櫒绫诲瀷锛�{locCntrRel.S_CNTR_CODE}'"); - } - } + // return MoboxService.EmptyOnlineGoodpack(new EmptyOnlineGoodpackInfo { + // CntId = locCntrRel.S_CNTR_CODE, + // EndLoc = model.EndLoc + // }); + // } + // else { + // return BuildSimpleResult(-1, $"涓嶅悎娉曠殑瀹瑰櫒绫诲瀷锛�{locCntrRel.S_CNTR_CODE}'"); + // } + //} /// <summary> - /// 鍒涘缓鎶芥鍗�+ /// 鎵樼洏-绌烘墭涓婄嚎(PDA) /// </summary> /// <param name="model"></param> /// <returns></returns> + [HttpPost] + [Route("empty-online-pallet")] + public SimpleResult EmptyOnlinePallet(EmptyOnlinePalletInfo model) { + return MoboxService.EmptyOnlinePallet(model); + } + + /// <summary> + /// 濂借繍绠�绌虹涓婄嚎(PDA) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost] + [Route("empty-online-goodpack")] + public SimpleResult EmptyOnlineGoodpack(EmptyOnlineGoodpackInfo model) { + return MoboxService.EmptyOnlineGoodpack(model); + } + + ///// <summary> + ///// 鍚堟牸鍥炲簱/涓嶅悎鏍肩Щ搴�+ ///// </summary> + ///// <param name="model"></param> + ///// <returns></returns> + //[HttpPost] + //[Route("CheckShift")] + //public SimpleResult CheckShift(CheckShiftInfo model) { + // LogHelper.InfoApi("鍚堟牸鍥炲簱/涓嶅悎鏍肩Щ搴�, model); + + // if (model.Qualified) { + // return MoboxService.QualifiedBack(model); + // } + // else { + // return MoboxService.UnqualifiedShift(model); + // } + //} + + /// <summary> + /// 鍚堟牸鍥炲簱(PDA) + /// </summary> + /// <returns></returns> + [HttpPost] + [Route("qualified-back")] + public SimpleResult QualifiedBack(QualifiedBackInfo model) { + return MoboxService.QualifiedBack(model); + } + + /// <summary> + /// 涓嶅悎鏍肩Щ搴�PDA) + /// </summary> + /// <returns></returns> + [HttpPost] + [Route("unqualified-shift")] + public SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) { + return MoboxService.UnqualifiedShift(model); + } + + /// <summary> + /// 浣欐枡灏剧鍥炲簱(PDA) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost] + [Route("rest-back")] + public SimpleResult RestBack(RestBackInfo model) { + return MoboxService.RestBack(model); + } + #endregion + + #region Mobox 鎺ュ彛 + /// <summary> + /// 鎴愬搧鑳跺嚭搴�PDA) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost] + [Route("finished-outbound")] + public SimpleResult FinishedOutbound(FinishedOutboundInfo model) { + LogHelper.InfoApi("鎴愬搧鑳跺嚭搴�PDA)", model); + if (model.ForcedOut) { + return MoboxService.FinishedOutboundForce(model); + } + return MoboxService.FinishedOutbound(model); + } + + /// <summary> + /// 鎶芥-鍒涘缓鎶芥鍗�WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost] + [Route("create-check-order")] public SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) { return MoboxService.CreateCheckOrder(model); } /// <summary> - /// 鍚堟牸鍥炲簱/涓嶅悎鏍肩Щ搴�+ /// 绉诲簱-鍒涘缓绉诲簱浠诲姟(WMS) /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] - [Route("CheckShift")] - public SimpleResult CheckShift(CheckShiftInfo model) { - LogHelper.InfoApi("鍚堟牸鍥炲簱/涓嶅悎鏍肩Щ搴�, model); - - if (model.Qualified) { - return MoboxService.QualifiedBack(model); - } - else { - return MoboxService.UnqualifiedShift(model); - } - } - - ///// <summary> - ///// 鍚堟牸鍥炲簱 - ///// </summary> - ///// <returns></returns> - //public SimpleResult QualifiedBack(QualifiedBackInfo model) { - // return new SimpleResult(); - //} - - ///// <summary> - ///// 涓嶅悎鏍肩Щ搴�- ///// </summary> - ///// <returns></returns> - //public SimpleResult UnqualifiedShift() { - // return new SimpleResult(); - //} - - #endregion - - #region Mobox 鎺ュ彛 - /// <summary> - /// 鎴愬搧鑳跺嚭搴�WMS) - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public SimpleResult FinishedOutbound(FinishedOutboundInfo model) { - LogHelper.InfoApi("鎴愬搧鑳跺嚭搴�WMS)", model); - if (model.ForcedOut) { - return MoboxService.FinishedOutboundForce(model); - } - return MoboxService.FinishedOutbound(model); + [Route("shift-storage")] + public SimpleResult CreateShiftOrder(CreateShiftOrderInfo model) { + return MoboxService.CreateShiftOrder(model); } #endregion } diff --git a/Dtos/Request/AgvRequest.cs b/Dtos/Request/AgvRequest.cs index 09db430..a63eb24 100644 --- a/Dtos/Request/AgvRequest.cs +++ b/Dtos/Request/AgvRequest.cs @@ -34,7 +34,7 @@ /// 璇锋眰鐮� /// </summary> public string apply_code { get; set; } - public string TaskNo { set; get; } + public string task_no { set; get; } } } } diff --git a/Dtos/Request/MoboxRequest.cs b/Dtos/Request/MoboxRequest.cs index e20bcd6..8417ed7 100644 --- a/Dtos/Request/MoboxRequest.cs +++ b/Dtos/Request/MoboxRequest.cs @@ -1,42 +1,79 @@ -锘縰sing Newtonsoft.Json; +锘縰sing System.ComponentModel.DataAnnotations; + +using Newtonsoft.Json; namespace HH.WCS.Mobox3.DSZSH.Dtos.Request { public class MoboxRequest { #region PDA 鏁版嵁 /// <summary> - /// 鎴愬搧鑳跺ソ杩愮涓嬬嚎淇℃伅 + /// 濂借繍绠�婊℃墭涓嬬嚎鍏ュ簱(PDA)鏁版嵁绫� /// </summary> - public class GoodpackOfflineInfo : StartCntInfo { - public string CgId { get; set; } + public class GoodpackOfflineInfo { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + + [JsonProperty("s_item_code")] + public string ItemCode { get; set; } + ///// <summary> + ///// 鐗╂枡鍚嶇О + ///// </summary> + // + //[JsonProperty("item_name")] + //public string ItemName { get; set; } + /// <summary> + /// 鎵规鍙�+ /// </summary> + + [JsonProperty("s_batch_no")] + public string BatchNo { get; set; } + /// <summary> + /// 鐗╂枡瑙勬牸 + /// </summary> + [JsonProperty("s_spec")] + public string Spec { get; set; } + /// <summary> + /// 鏁伴噺 + /// </summary> + [JsonProperty("n_num")] + public int Qty { get; set; } + /// <summary> + /// 璐т綅淇℃伅 + /// </summary> + [JsonProperty("s_start_loc")] + public string StartLoc { get; set; } } - /// <summary> - /// API锛氱┖鎵�绌虹缁戝畾鏁版嵁绫�+ /// 绌烘墭/绌虹鍏ュ簱缁戝畾(PDA)鏁版嵁绫� /// </summary> public class EmptyBindInfo { /// <summary> /// 瀹瑰櫒缂栫爜 /// </summary> + + [JsonProperty("s_cntr_code")] public string CntrCode { get; set; } - /// <summary> /// 瀹瑰櫒绫诲瀷 /// </summary> + + [JsonProperty("s_cntr_type")] public string CntrType { get; set; } - - /// <summary> - /// 鎵樼洏鏁伴噺锛堜粎褰撳鍣ㄧ被鍨嬩负鎵樼洏鏃朵娇鐢級 - /// </summary> - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public int PalletCount { get; set; } - + ///// <summary> + ///// 鎵樼洏鏁伴噺锛堜粎褰撳鍣ㄧ被鍨嬩负鎵樼洏鏃朵娇鐢級 + ///// </summary> + //[JsonProperty("pallet_count", NullValueHandling = NullValueHandling.Ignore)] + //public int PalletCount { get; set; } /// <summary> /// 璐т綅缂栫爜 /// </summary> + [JsonProperty("s_loc_code")] public string LocCode { get; set; } } - + /// <summary> + /// 绌烘墭缁戝畾 + /// </summary> public class EmptyBindPalletInfo { /// <summary> /// 瀹瑰櫒缂栫爜 @@ -53,7 +90,9 @@ /// </summary> public string LocCode { get; set; } } - + /// <summary> + /// 绌虹缁戝畾 + /// </summary> public class EmptyBindGoodpackInfo { /// <summary> /// 瀹瑰櫒缂栫爜 @@ -65,48 +104,141 @@ /// </summary> public string LocCode { get; set; } } - + /// <summary> + /// 绌烘墭/绌虹鍏ュ簱(PDA)鏁版嵁绫�+ /// </summary> public class EmptyInboundInfo { /// <summary> - /// 璐т綅缂栫爜 + /// 瀹瑰櫒缂栫爜 /// </summary> - public string LocCode { get; set; } + [JsonProperty("cntr_code")] + public string CntrCode { get; set; } + /// <summary> + /// 瀹瑰櫒绫诲瀷 + /// </summary> + [JsonProperty("cntr_type")] + public string CnteType { get; set; } + /// <summary> + /// 缁堢偣搴撳尯缂栫爜 + /// </summary> + [JsonProperty("end_area")] + public string EndArea { get; set; } } public class EmptyInboundDetailInfo : StartCntInfo { } - public class EmptyOnlineInfo { - public string ItemCode { get; set; } - public string ItemName { get; set; } - public string PatchNo { get; set; } - public string EndLoc { get; set; } - } + //public class EmptyOnlineInfo { + // public string ItemCode { get; set; } + // public string ItemName { get; set; } + // public string PatchNo { get; set; } + // public string EndLoc { get; set; } + //} public class EmptyOnlinePalletInfo { - public string CntId { get; set; } - public string EndLoc { get; set; } - } - - public class EmptyOnlineGoodpackInfo : StartCntEndInfo { } - - public class CreateCheckOrderInfo { - public string No { get; set; } - public string CgId { get; set; } - public string ItemName { get; set; } + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + + [JsonProperty("item_code")] + public string ItemCode { get; set; } + ///// <summary> + ///// 鐗╂枡鍚嶇О + ///// </summary> + // + //[JsonProperty("item_name")] + //public string ItemName { get; set; } + /// <summary> + /// 鎵规鍙�+ /// </summary> + + [JsonProperty("batch_no")] public string BatchNo { get; set; } /// <summary> - /// 鎶芥鏁伴噺 + /// 鐗╂枡瑙勬牸 /// </summary> - public int N_QTY { get; set; } + [JsonProperty("spe")] + public string Spe { get; set; } + /// <summary> + /// 瀹瑰櫒缂栫爜 + /// </summary> + [JsonProperty("cnt_id")] + public string CntId { get; set; } + // 瀹瑰櫒绫诲瀷 = 鎵樼洏 + } + + public class EmptyOnlineGoodpackInfo { + // 瀹瑰櫒绫诲瀷 = 濂借繍绠�+ /// <summary> + /// 瀹瑰櫒缂栫爜 + /// </summary> + [JsonProperty("cnt_id")] + public string CntId { get; set; } + } + + /// <summary> + /// 鎶芥-鍒涘缓鎶芥鍗�WMS)鏁版嵁绫�+ /// </summary> + public class CreateCheckOrderInfo { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + + [JsonProperty("item_code")] + public string ItemCode { get; set; } + ///// <summary> + ///// 鐗╂枡鍚嶇О + ///// </summary> + // + //[JsonProperty("item_name")] + //public string ItemName { get; set; } + /// <summary> + /// 鐗╂枡瑙勬牸 + /// </summary> + [JsonProperty("spe")] + public string Spe { get; set; } + /// <summary> + /// 鎵规鍙�+ /// </summary> + + [JsonProperty("batch_no")] + public string BatchNo { get; set; } + /// <summary> + /// 闇�嚭搴撴暟閲�+ /// </summary> + [JsonProperty("qty")] + public int Qty { get; set; } + /// <summary> + /// 瀹瑰櫒绫诲瀷 + /// </summary> + + [JsonProperty("cntr_type")] + public string CntrType { get; set; } + /// <summary> + /// 鍑哄簱缁堢偣璐у尯 + /// </summary> + + [JsonProperty("end_area")] public string EndArea { get; set; } } public class QualifiedBackInfo { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + [JsonProperty("item_code")] public string ItemCode { get; set; } + /// <summary> + /// 瀹瑰櫒缂栫爜 + /// </summary> + [JsonProperty("cntr_code")] public string CntrCode { get; set; } } public class UnqualifiedShiftInfo : QualifiedBackInfo { + /// <summary> + /// 涓嶅悎鏍肩Щ搴撶粓鐐瑰簱鍖�+ /// </summary> + [JsonProperty("end_area")] public string EndArea { get; set; } } @@ -118,49 +250,102 @@ #region WMS 鏁版嵁 /// <summary> - /// 鎴愬搧鑳舵墭鐩樺嚭搴撲俊鎭�+ /// 鎴愬搧鑳跺嚭搴�PDA) /// </summary> public class FinishedOutboundInfo { - //public string No { get; set; } - + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + + [JsonProperty("item_code")] public string ItemCode { get; set; } - public string ItemName { get; set; } + ///// <summary> + ///// 鐗╂枡鍚嶇О + ///// </summary> + // + //[JsonProperty("item_name")] + //public string ItemName { get; set; } + /// <summary> + /// 鐗╂枡瑙勬牸 + /// </summary> + [JsonProperty("spe")] + public string Spe { get; set; } + /// <summary> + /// 鎵规鍙�+ /// </summary> + + [JsonProperty("batch_no")] public string BatchNo { get; set; } + /// <summary> + /// 闇�嚭搴撴暟閲�+ /// </summary> + [JsonProperty("qty")] + public int Qty { get; set; } + /// <summary> + /// 瀹瑰櫒绫诲瀷 + /// </summary> + + [JsonProperty("cntr_type")] public string CntrType { get; set; } - public float Qty { get; set; } - + + /// <summary> + /// 鍑哄簱缁堢偣璐у尯 + /// </summary> + + [JsonProperty("end_area")] public string EndArea { get; set; } - /// <summary> /// 鏄惁寮哄埗鍑哄簱 /// </summary> + + [JsonProperty("force_out")] public bool ForcedOut { get; set; } } + /// <summary> + /// 绉诲簱-鍒涘缓绉诲簱浠诲姟鏁版嵁绫�+ /// </summary> + public class CreateShiftOrderInfo { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + + [JsonProperty("item_code")] + public string ItemCode { get; set; } + ///// <summary> + ///// 鐗╂枡鍚嶇О + ///// </summary> + // + //[JsonProperty("item_name")] + //public string ItemName { get; set; } + /// <summary> + /// 鎵规鍙�+ /// </summary> + + [JsonProperty("batch_no")] + public string BatchNo { get; set; } + /// <summary> + /// 绉诲簱缁堢偣璐у尯 + /// </summary> + + [JsonProperty("end_area")] + public string EndArea { get; set; } + } - + /// <summary> + /// 浣欐枡灏剧鍥炲簱(PDA)鏁版嵁绫�+ /// </summary> + public class RestBackInfo { + /// <summary> + /// 璧风偣璐т綅 + /// </summary> + [JsonProperty("start_loc")] + public string StartLoc { get; set; } + } #endregion //------------------------------------------------------------------------------ #region 妯℃澘鏁版嵁 - /// <summary> - /// 妯℃澘鎶借薄鏁版嵁绫伙細璧风偣璐т綅銆佸鍣ㄥ彿銆佺粓鐐硅揣浣�- /// </summary> - public abstract class StartCntEndInfo { - /// <summary> - /// 璧风偣璐т綅 - /// </summary> - public string StartLoc { get; set; } - /// <summary> - /// 瀹瑰櫒鍙�- /// </summary> - public string CntId { get; set; } - /// <summary> - /// 缁堢偣璐т綅 - /// </summary> - public string EndLoc { get; set; } - } - /// <summary> /// 妯℃澘鎶借薄鏁版嵁绫伙細璧风偣璐т綅銆佸鍣ㄥ彿 /// </summary> diff --git a/Dtos/Response/MoboxResponse.cs b/Dtos/Response/MoboxResponse.cs index 94fc6e7..f404c20 100644 --- a/Dtos/Response/MoboxResponse.cs +++ b/Dtos/Response/MoboxResponse.cs @@ -9,9 +9,10 @@ namespace HH.WCS.Mobox3.DSZSH.Dtos.Response { public class MoboxResponse { /// <summary> - /// Mobox 鎺ュ彛杩斿洖 + /// Mobox 鎺ュ彛杩斿洖鏁版嵁绫� /// </summary> public class SimpleResult { + [JsonProperty("resultCode")] public int Code { get; set; } diff --git a/HH.WCS.Mobox3.DSZSH.csproj b/HH.WCS.Mobox3.DSZSH.csproj index 0667fa1..40f6db6 100644 --- a/HH.WCS.Mobox3.DSZSH.csproj +++ b/HH.WCS.Mobox3.DSZSH.csproj @@ -53,6 +53,10 @@ <PropertyGroup> <StartupObject>HH.WCS.Mobox3.DSZSH.Program</StartupObject> </PropertyGroup> + <PropertyGroup> + <GenerateDocumentationFile>true</GenerateDocumentationFile> + <NoWarn>$(NoWarn);1591</NoWarn> + </PropertyGroup> <ItemGroup> <Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL"> <HintPath>packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath> @@ -129,11 +133,15 @@ <Reference Include="Swashbuckle.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd1bb07a5ac7c7bc, processorArchitecture=MSIL"> <HintPath>..\packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll</HintPath> </Reference> + <Reference Include="Swashbuckle.Examples, Version=4.1.0.0, Culture=neutral, PublicKeyToken=aa1e9c5053bfbe95, processorArchitecture=MSIL"> + <HintPath>packages\Swashbuckle.Examples.4.1.0\lib\net40\Swashbuckle.Examples.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath> </Reference> <Reference Include="System.ComponentModel.Composition" /> + <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Configuration" /> <Reference Include="System.Configuration.Install" /> <Reference Include="System.Core" /> @@ -216,7 +224,8 @@ </Reference> </ItemGroup> <ItemGroup> - <Compile Include="AppStart\Config.cs" /> + <Compile Include="App_Start\Config.cs" /> + <Compile Include="App_Start\SwaggerConfig.cs" /> <Compile Include="Consts\AgvStateCode.cs" /> <Compile Include="Consts\AgvStateName.cs" /> <Compile Include="Consts\AreaName.cs" /> @@ -228,7 +237,7 @@ <Compile Include="Controllers\ErpController.cs" /> <Compile Include="Controllers\MoboxController.cs" /> <Compile Include="Controllers\AgvController.cs" /> - <Compile Include="AppStart\SwaggerControllerDescProvider.cs" /> + <Compile Include="App_Start\SwaggerControllerDescProvider.cs" /> <Compile Include="Models\DebugModel.cs" /> <Compile Include="Dtos\Request\DebugRequest.cs" /> <Compile Include="Dtos\Response\DebugResponse.cs" /> @@ -244,8 +253,11 @@ <Compile Include="Models\TN_Order_Task.cs" /> <Compile Include="Models\TN_Outbound_Order.cs" /> <Compile Include="Models\TN_Outbound_Detail.cs" /> + <Compile Include="Models\TN_Shift_Detail.cs" /> + <Compile Include="Models\TN_Shift_Order.cs" /> <Compile Include="ServiceCore\CheckCore.cs" /> <Compile Include="ServiceCore\OutboundCore.cs" /> + <Compile Include="ServiceCore\ShiftCore.cs" /> <Compile Include="Services\DebugService.cs" /> <Compile Include="Devices\ProductionLineDevice.cs" /> <Compile Include="Devices\ModbusHelper.cs" /> @@ -285,8 +297,8 @@ <Compile Include="Helpers\SysHelper.cs" /> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="AppStart\Settings.cs" /> - <Compile Include="AppStart\Startup.cs" /> + <Compile Include="App_Start\Settings.cs" /> + <Compile Include="App_Start\Startup.cs" /> <Compile Include="Dispatch\NDCHelper.cs" /> <Compile Include="Helpers\HttpHelper.cs" /> </ItemGroup> diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs index 31acaf0..23e6b65 100644 --- a/Models/TN_CG_Detail.cs +++ b/Models/TN_CG_Detail.cs @@ -17,6 +17,11 @@ public string S_ITEM_CODE { get; set; } /// <summary> + /// 鐗╂枡瑙勬牸 + /// </summary> + public string S_SPE { get; set; } + + /// <summary> /// 瀹瑰櫒缂栫爜 /// </summary> public string S_CNTR_CODE { get; set; } @@ -39,6 +44,6 @@ /// <summary> /// 璐у搧鏁伴噺 /// </summary> - public float F_QTY { get; set; } + public int N_QTY { get; set; } } } diff --git a/Models/TN_Check_Detail.cs b/Models/TN_Check_Detail.cs index 16e29d7..0d14c5f 100644 --- a/Models/TN_Check_Detail.cs +++ b/Models/TN_Check_Detail.cs @@ -14,8 +14,9 @@ public class TN_Check_Detail : BaseModel { public string S_NO { get; set; } - public string S_CG_ID { get; set; } - public string S_ITEM_NAME { get; set; } + public string S_ITEM_CODE { get; set; } + //public string S_ITEM_NAME { get; set; } + public string S_BATCH_NO { get; set; } public string S_END_AREA { get; set; } /// <summary> diff --git a/Models/TN_Check_Order.cs b/Models/TN_Check_Order.cs index 983aff1..52529c2 100644 --- a/Models/TN_Check_Order.cs +++ b/Models/TN_Check_Order.cs @@ -13,7 +13,7 @@ [SugarTable("TN_Check_Order")] public class TN_Check_Order : BaseModel { public string S_NO { get; set; } - public string S_CG_ID { get; set; } + public string S_ITEM_CODE { get; set; } public string S_ITEM_NAME { get; set; } public string S_BATCH_NO { get; set; } public int N_COUNT { get; set; } diff --git a/Models/TN_Shift_Detail.cs b/Models/TN_Shift_Detail.cs new file mode 100644 index 0000000..b343e3e --- /dev/null +++ b/Models/TN_Shift_Detail.cs @@ -0,0 +1,25 @@ +锘�+using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HH.WCS.Mobox3.DSZSH.Models { + internal class TN_Shift_Detail : BaseModel { + public string S_NO { get; set; } + public string S_ITEM_CODE { get; set; } + public string S_ITEM_NAME { get; set; } + + public string S_LOC_CODE { get; set; } + + public string S_CNTR_CODE { get; set; } + + public string S_BATCH_NO { get; set; } + public string S_END_AREA { get; set; } + /// <summary> + /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 + /// </summary> + public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�+ } +} diff --git a/Models/TN_Shift_Order.cs b/Models/TN_Shift_Order.cs new file mode 100644 index 0000000..0756b86 --- /dev/null +++ b/Models/TN_Shift_Order.cs @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HH.WCS.Mobox3.DSZSH.Models { + /// <summary> + /// 绉诲簱鍗�+ /// </summary> + public class TN_Shift_Order : BaseModel { + public string S_NO { get; set; } + public string S_ITEM_CODE { get; set; } + public string S_ITEM_NAME { get; set; } + public string S_BATCH_NO { get; set; } + public int N_COUNT { get; set; } + public string S_END_AREA { get; set; } + /// <summary> + /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 + /// </summary> + public int N_B_STATE { get; set; } = 0; // 鍒涘缓鍚庨渶瑕佺‘璁ゆ墽琛�+ } +} diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs index fec6b9e..d0a4747 100644 --- a/ServiceCore/CheckCore.cs +++ b/ServiceCore/CheckCore.cs @@ -30,7 +30,7 @@ foreach (var detail in detailList) { var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail> ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE) - .Where((l, c, d) => d.S_ITEM_CODE == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO) + .Where((l, c, d) => d.S_ITEM_CODE == detail.S_ITEM_CODE && d.S_BATCH_NO == detail.S_BATCH_NO) .Select((l, c) => c) // 閫夋嫨 LocCntrRel .First(); // 闅忔満鎶芥锛屼笉鎺掑簭 diff --git a/ServiceCore/ShiftCore.cs b/ServiceCore/ShiftCore.cs new file mode 100644 index 0000000..d74141e --- /dev/null +++ b/ServiceCore/ShiftCore.cs @@ -0,0 +1,117 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using HH.WCS.Mobox3.DSZSH.Consts; +using HH.WCS.Mobox3.DSZSH.Helpers; +using HH.WCS.Mobox3.DSZSH.Models; + +namespace HH.WCS.Mobox3.DSZSH.ServiceCore { + /// <summary> + /// 绉诲簱涓氬姟鏍稿績 + /// </summary> + internal class ShiftCore { + public static void CheckOrderState() { + var db = DbHelper.GetDbClient(); + + // 鐩墠鎸夊嚭搴撶殑閫昏緫锛氶�涓Щ搴�+ try { + var order = db.Queryable<TN_Shift_Order>() + .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) + .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First(); + + if (order == null) { + LogHelper.Info("杞锛氭殏鏃犲緟鎵ц鐨勭Щ搴撳崟"); + return; + } + + if (db.Queryable<TN_Shift_Detail>() + .First(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓� != null) { + LogHelper.Debug("杞锛氫笂涓�釜绉诲簱浠诲姟浠嶅湪杩涜涓�); + return; + } + + var detail = db.Queryable<TN_Shift_Detail>() + .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) + .OrderBy(d => d.T_CREATE, SqlSugar.OrderByType.Asc).First(); + + if (detail == null) { + //order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� + + LogHelper.Info("杞绉诲簱锛氭殏鏃犲緟鎵ц鐨勪换鍔�); + return; + } + + var startLocCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_CNTR_CODE == detail.S_CNTR_CODE) + .First(); + + if (startLocCntrRel == null) { + LogHelper.Info("杞锛氱Щ搴擄細娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + return; + } + + var endLoc = db.Queryable<TN_Location>() + .Where(l => l.S_AREA_CODE == detail.S_END_AREA) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�); + return; + } + + using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� + if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info($"杞锛氬嚭搴擄細鏇存柊澶辫触锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�); + } + + if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) { + tran.CommitTran(); + } + else { + tran.RollbackTran(); + } + } + } + catch (Exception ex) { + LogHelper.InfoEx(ex); + } + } + + public static void UpdateTaskState(int spotStateCode) { + var db = DbHelper.GetDbClient(); + + var detail = db.Queryable<TN_Shift_Detail>() + .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; + + if (detail == null) { + LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑绉诲簱鍗曟槑缁嗛」鐩�); + return; + } + + using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = spotStateCode; + db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand(); + + if (db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) == + db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO)) { + + if (db.Updateable<TN_Shift_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) + .Where(it => it.S_NO == detail.S_NO) + .ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info("淇敼Order鐘舵�閿欒"); + } + } + + tran.CommitTran(); + } + } + } +} diff --git a/Services/AgvService.cs b/Services/AgvService.cs index 8a98eaf..126abe7 100644 --- a/Services/AgvService.cs +++ b/Services/AgvService.cs @@ -19,8 +19,8 @@ try { switch (model.state) { case 1023: + break; case 1025: - break; case 1012: break; @@ -117,9 +117,7 @@ return true; } - - - + public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) { var gzResult = new ReturnResult(); var db = DbHelper.GetDbClient(); @@ -134,9 +132,9 @@ LogHelper.Info("鍔犺浇璁惧淇℃伅澶辫触"); } - var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.TaskNo); + var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no); if (tn_task == null) { - LogHelper.Info($"浠诲姟鍙�'{model.TaskNo}' 涓嶅瓨鍦�); + LogHelper.Info($"浠诲姟鍙�'{model.task_no}' 涓嶅瓨鍦�); } // 寰呬慨鏀癸細琛ュ厖涓嶅悓鍒嗘敮AGV鍒ゆ柇 diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 8ad85b5..4ff7773 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -18,45 +18,6 @@ namespace HH.WCS.Mobox3.DSZSH.Services { public class MoboxService { - #region 妯℃澘鍔熻兘 - public static SimpleResult BaseBound(StartCntEndInfo model) { - var taskName = ""; // 鐢ㄤ簬鐢熸垚浠诲姟绫诲瀷銆佹墦鍗版棩蹇椾俊鎭�- var db = DbHelper.GetDbClient(); - - try { - var startLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.StartLoc)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty.Negate()).First(); - - if (startLoc == null) { - return BuildSimpleResult(2, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�); - } - - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(ExprHelper.LocCntrIsBind(startLoc.S_CODE, model.CntId)).First(); - - if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{startLoc.S_CODE}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); - } - - var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty).First(); - - if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); - } - - return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); - } - catch (Exception ex) { - return BuildSimpleEx(ex); - } - } - #endregion - #region PDA 鍔熻兘 /// <summary> /// 濂借繍绠�婊℃墭涓嬬嚎鍏ュ簱(PDA) @@ -82,10 +43,9 @@ // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹� var locCntrRel = db.Queryable<TN_Loc_Container>().First( - a => a.S_LOC_CODE == model.StartLoc - && a.S_CNTR_CODE == model.CntId); + a => a.S_LOC_CODE == startLoc.S_CODE); if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}' 锛屾棤鍙嚭搴撶殑鐗╂枡"); + return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 鏃犲彲鍑哄簱鐨勭墿鏂�); } // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖�@@ -133,7 +93,7 @@ return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); } - loc.N_CURRENT_NUM = model.PalletCount; + //loc.N_CURRENT_NUM = model.PalletCount; locCntrRel = new TN_Loc_Container { S_LOC_CODE = model.LocCode, @@ -325,13 +285,13 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) + .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); } return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); @@ -371,13 +331,13 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) + .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); } return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); @@ -399,11 +359,11 @@ using (var tran = db.Ado.UseTran()) { var order = new TN_Check_Order { - S_NO = model.No, - S_CG_ID = model.CgId, - S_ITEM_NAME = model.ItemName, + S_NO = GenerateOrderNo("鎶芥鍗曞彿", "CN"), + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, S_BATCH_NO = model.BatchNo, - N_COUNT = model.N_QTY, + N_COUNT = model.Qty, S_END_AREA = model.EndArea, }; @@ -412,10 +372,10 @@ return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); } - for (int i = 0; i < model.N_QTY; i++) { + for (int i = 0; i < model.Qty; i++) { var detail = new TN_Check_Detail { - S_NO = model.No, - S_CG_ID = model.CgId, + S_NO = order.S_NO, + S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, S_END_AREA = model.EndArea }; @@ -428,7 +388,7 @@ tran.CommitTran(); } - return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛锛氬崟鍙�{model.No}"); + return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛"); } catch (Exception ex) { return BuildSimpleEx(ex); @@ -437,6 +397,7 @@ public static SimpleResult QualifiedBack(QualifiedBackInfo model) { var db = DbHelper.GetDbClient(); + try { var cgDetail = db.Queryable<TN_CG_Detail>() @@ -549,6 +510,34 @@ } } + public static SimpleResult RestBack(RestBackInfo model) { + var db = DbHelper.GetDbClient(); + + try { + var locCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_LOC_CODE == model.StartLoc) + .First(); + + if (locCntrRel == null) { + return BuildSimpleResult(2, $"璧风偣璐т綅 {model.StartLoc}"); + } + + var endLoc = db.Queryable<TN_Location, TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where((l, c) => c.S_CNTR_TYPE == locCntrRel.S_CNTR_TYPE) + .First(); + + if (endLoc == null) { + return BuildSimpleResult(3, $"涓嶅瓨鍦ㄥ悎閫傜殑缁堢偣璐т綅鍙互鍥炲簱"); + } + + return TaskHelper.SimpleCreateTask(locCntrRel.S_LOC_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, TaskName.灏剧鍥炲簱); + } + catch (Exception ex) { + + return BuildSimpleEx(ex); + } + } + #endregion #region Mobox 鍔熻兘 @@ -598,7 +587,7 @@ S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, F_QTY = model.Qty, - F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY), + F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -659,7 +648,7 @@ S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, F_QTY = model.Qty, - F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY), + F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -685,8 +674,8 @@ try { var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode - && a.F_QTY > targetNum). - OrderBy(a => a.F_QTY, OrderByType.Asc).First(); + && a.N_QTY > targetNum). + OrderBy(a => a.N_QTY, OrderByType.Asc).First(); if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠� { result.Add(targetCg); @@ -695,12 +684,12 @@ // NOTE 鏍规嵁鎬婚噺閫塪etail鏃讹紝鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵 var sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE) - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.F_QTY > 0) + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_QTY > 0) .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) .Where(d => (model.ForcedOut && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") || (!model.ForcedOut && (d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮"))) - .OrderBy(d => d.F_QTY, OrderByType.Desc) + .OrderBy(d => d.N_QTY, OrderByType.Desc) .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); if (sortedMaterials.Count == 0)//娌℃湁婊¤冻鏉′欢鐨�@@ -710,13 +699,13 @@ float countNum = 0; foreach (var mat in sortedMaterials) { - countNum += mat.F_QTY; + countNum += mat.N_QTY; result.Add(mat); if (countNum >= targetNum) { break; } } - if (result.Sum(a => a.F_QTY) >= targetNum) { + if (result.Sum(a => a.N_QTY) >= targetNum) { return result; } else { @@ -729,6 +718,64 @@ } } + /// <summary> + /// 绉诲簱-鍒涘缓绉诲簱浠诲姟(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static SimpleResult CreateShiftOrder(CreateShiftOrderInfo model) { + var db = DbHelper.GetDbClient(); + try { + var locCntrRelList = db.Queryable<TN_Loc_Container, TN_CG_Detail>((c, d) => c.S_CNTR_CODE == d.S_CNTR_CODE) + .Where((c, d) => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.ItemCode) + .ToList(); + + if (locCntrRelList.Count == 0) { + return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呯Щ搴撶殑鐗╂枡"); + } + + // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁�+ using (var tran = db.Ado.UseTran()) { + + var order = new TN_Shift_Order { + S_NO = GenerateOrderNo("绉诲簱鍗曞彿", "SN"), + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, + S_BATCH_NO = model.BatchNo, + N_COUNT = locCntrRelList.Count, + S_END_AREA = model.EndArea, + }; + + if (db.Insertable<TN_Shift_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(2, "鐢熸垚 绉诲簱鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); + } + + foreach (var locCntrRel in locCntrRelList) { + var detail = new TN_Shift_Detail { + S_NO = order.S_NO, + S_ITEM_CODE = model.ItemCode, + S_LOC_CODE = locCntrRel.S_LOC_CODE, + S_CNTR_CODE = locCntrRel.S_CNTR_CODE, + S_BATCH_NO = model.BatchNo, + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Shift_Detail>(detail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(3, "鐢熸垚 绉诲簱鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail)); + } + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, $"鍒涘缓 绉诲簱鍗�鎴愬姛"); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + private static string GenerateOrderNo(string snType, string prefix) { var id = SysHelper.GetSerialNumber(snType, prefix); var date = DateTime.Now.ToString("yyMMdd"); diff --git a/config/config.json b/config/config.json index 4436b8f..bca70e9 100644 --- a/config/config.json +++ b/config/config.json @@ -1,5 +1,5 @@ { - "WebApiUrl": "http://127.0.0.1:8901/", + "WebApiUrl": "http://192.168.1.141:8901/", "NdcApiUrl": "http://127.0.0.1:5201/api/order/", "SqlServer": "Data Source=(local);Initial Catalog=DSZSHTest;User ID=sa;Password=123456;", "TcpServerIp": "127.0.0.1", diff --git a/packages.config b/packages.config index a963eb7..466765f 100644 --- a/packages.config +++ b/packages.config @@ -33,6 +33,7 @@ <package id="SqlSugar" version="5.1.4.169" targetFramework="net462" /> <package id="Swashbuckle" version="5.6.0" targetFramework="net461" /> <package id="Swashbuckle.Core" version="5.6.0" targetFramework="net461" /> + <package id="Swashbuckle.Examples" version="4.1.0" targetFramework="net462" /> <package id="System.Buffers" version="4.5.1" targetFramework="net461" /> <package id="System.Diagnostics.DiagnosticSource" version="6.0.1" targetFramework="net462" /> <package id="System.Formats.Asn1" version="8.0.1" targetFramework="net462" /> diff --git a/swagger.js b/swagger.js index aed0f8c..aec2e15 100644 --- a/swagger.js +++ b/swagger.js @@ -40,6 +40,27 @@ } }); }, + + setModelDescriptions: function() { + $.ajax({ + type: "get", + url: $("#input_baseUrl").val(), + dataType: "json", + success: function(data) { + var modelDesc = data.ModelDesc; + // 在模型展示区域添加描述 + $(".model-box").each(function() { + var modelName = $(this).find(".model-title").text(); + if (modelDesc[modelName]) { + $(this).find(".model-description").remove(); + $(this).append( + `<div class="model-description">${modelDesc[modelName]}</div>` + ); + } + }); + } + }); + }, _tryTranslate: function (word) { return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; -- Gitblit v1.9.1