From 38a8b2931abd72ee04285794aacbea7ed7c49228 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期二, 13 五月 2025 17:06:43 +0800 Subject: [PATCH] 抽检合格回库/不合格移库开发完成 --- Models/TN_Outbound_Order.cs | 11 Dtos/Response/MoboxResponse.cs | 15 + Program.cs | 4 Dispatch/NDCHelper.cs | 0 Devices/ProductionLineDevice.cs | 12 Controllers/DebugController.cs | 10 config/config.json | 8 Devices/OpcUaHelper.cs | 0 ServiceCore/OfflineCore.cs | 9 ServiceCore/OutboundCore.cs | 16 - HH.WCS.Mobox3.DSZSH.csproj | 33 +- Devices/S7Helper.cs | 0 ServiceCore/TaskCore.cs | 13 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f2527103-d3d3-44d1-9a80-1e26bb5cf98f.vsidx | 0 Devices/ModbusHelper.cs | 0 Dispatch/NDC.cs | 0 Helpers/SysHelper.cs | 13 + Devices/TcpClient.cs | 0 Devices/PlcHelper.cs | 0 Consts/TaskName.cs | 4 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e9728df6-3b77-4640-883e-78a872e2fb53.vsidx | 0 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e39d6e75-9277-46f5-bff4-9390c52a26f9.vsidx | 0 Controllers/MoboxController.cs | 39 +++ Dispatch/NDCApi.cs | 3 Helpers/ResultHelper.cs | 11 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7725d916-1bef-44d2-8384-bfd94e8b6457.vsidx | 0 Models/TN_Outbound_Detail.cs | 8 /dev/null | 20 - Helpers/LocationHelper.cs | 2 Dispatch/GZRobot.cs | 24 +- Dispatch/HostToAGV.cs | 0 Dtos/Request/AgvRequest.cs | 7 Services/DebugService.cs | 63 +++- Models/TN_CNTR_ITEM.cs | 18 + Devices/TcpServer.cs | 0 Services/AgvService.cs | 24 - ServiceCore/CheckCore.cs | 11 Helpers/TaskHelper.cs | 2 Services/MoboxService.cs | 263 +++++++++++++++++++-- Models/TN_CG_Detail.cs | 14 Dispatch/HanAo.cs | 0 Dtos/Request/MoboxRequest.cs | 32 + Helpers/ContainerHelper.cs | 12 Dtos/Response/AgvResponse.cs | 2 44 files changed, 483 insertions(+), 220 deletions(-) diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx deleted file mode 100644 index 1b57b66..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx +++ /dev/null Binary files differ 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 new file mode 100644 index 0000000..5569d0b --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/7725d916-1bef-44d2-8384-bfd94e8b6457.vsidx Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx deleted file mode 100644 index 02db22c..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.vsidx deleted file mode 100644 index 5963178..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.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 new file mode 100644 index 0000000..6b872b4 --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e39d6e75-9277-46f5-bff4-9390c52a26f9.vsidx 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 new file mode 100644 index 0000000..e14ea3e --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e9728df6-3b77-4640-883e-78a872e2fb53.vsidx Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.vsidx deleted file mode 100644 index 0808b3b..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.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 new file mode 100644 index 0000000..2faa040 --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f2527103-d3d3-44d1-9a80-1e26bb5cf98f.vsidx Binary files differ diff --git a/Consts/TaskName.cs b/Consts/TaskName.cs index 90cda13..1b8f206 100644 --- a/Consts/TaskName.cs +++ b/Consts/TaskName.cs @@ -6,7 +6,6 @@ namespace HH.WCS.Mobox3.DSZSH.Consts { public class TaskName { - public const string 鎶芥 = "鎶芥"; public const string 濂借繍绠盻婊$涓嬬嚎鍏ュ簱 = "濂借繍绠�婊$涓嬬嚎鍏ュ簱"; public const string 濂借繍绠盻绌虹涓婄嚎 = "濂借繍绠�绌虹涓婄嚎"; public const string 濂借繍绠盻绌虹鍏ュ簱 = "濂借繍绠�绌虹鍏ュ簱"; @@ -16,5 +15,8 @@ public const string 鎵樼洏_绌烘墭涓婄嚎 = "鎵樼洏-绌烘墭涓婄嚎"; 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 04585b2..90a1f58 100644 --- a/Controllers/DebugController.cs +++ b/Controllers/DebugController.cs @@ -29,7 +29,7 @@ { return DebugService.AgvSeriesReports(model); } - + /// <summary> /// 鍒濆鍖栨暟鎹簱 /// </summary> @@ -105,13 +105,13 @@ } } - var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.CntId && a.S_CG_ID == model.CgId); + 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_CG_ID = model.CntId }); + 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.CgId}澶辫触"; + return $"鎻掑叆鎵樼洏鐗╂枡鍏崇郴{model.CntId}-{model.ItemCode}澶辫触"; } } @@ -127,7 +127,7 @@ } public class CgInfo { - public string CgId { get; set; } + public string ItemCode { get; set; } public string CntId { get; set; } public string LocId { get; set; } } diff --git a/Controllers/MoboxController.cs b/Controllers/MoboxController.cs index e563422..6b9b8fd 100644 --- a/Controllers/MoboxController.cs +++ b/Controllers/MoboxController.cs @@ -97,7 +97,7 @@ 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_CG_ID == model.CgId) + .Where((lc, cd) => cd.S_ITEM_CODE == model.ItemCode) .First(); if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { @@ -125,9 +125,42 @@ /// <param name="model"></param> /// <returns></returns> public SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) { - return MoboxService.CreateCheckOrder(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> + ///// 鍚堟牸鍥炲簱 + ///// </summary> + ///// <returns></returns> + //public SimpleResult QualifiedBack(QualifiedBackInfo model) { + // return new SimpleResult(); + //} + + ///// <summary> + ///// 涓嶅悎鏍肩Щ搴�+ ///// </summary> + ///// <returns></returns> + //public SimpleResult UnqualifiedShift() { + // return new SimpleResult(); + //} #endregion @@ -139,7 +172,7 @@ /// <returns></returns> public SimpleResult FinishedOutbound(FinishedOutboundInfo model) { LogHelper.InfoApi("鎴愬搧鑳跺嚭搴�WMS)", model); - if (model.Forced) { + if (model.ForcedOut) { return MoboxService.FinishedOutboundForce(model); } return MoboxService.FinishedOutbound(model); diff --git a/Devices/BaseModbusDevice.cs b/Devices/BaseModbusDevice.cs deleted file mode 100644 index 831a19a..0000000 --- a/Devices/BaseModbusDevice.cs +++ /dev/null @@ -1,20 +0,0 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace HH.WCS.Mobox3.DSZSH.Devices { - /// <summary> - /// 妯℃澘鎶借薄绫伙細Modbus 鍗忚璁惧 - /// </summary> - public abstract class BaseModbusDevice { - public BaseModbusDevice(string ip, int port) { - Ip = ip; - Port = port; - } - - public string Ip { get; set; } - public int Port { get; set; } - } -} diff --git a/Helpers/Device/ModbusHelper.cs b/Devices/ModbusHelper.cs similarity index 100% rename from Helpers/Device/ModbusHelper.cs rename to Devices/ModbusHelper.cs diff --git a/Helpers/Device/OpcUaHelper.cs b/Devices/OpcUaHelper.cs similarity index 100% rename from Helpers/Device/OpcUaHelper.cs rename to Devices/OpcUaHelper.cs diff --git a/Helpers/Device/PlcHelper.cs b/Devices/PlcHelper.cs similarity index 100% rename from Helpers/Device/PlcHelper.cs rename to Devices/PlcHelper.cs diff --git a/Devices/ProductionLineDevice.cs b/Devices/ProductionLineDevice.cs index 19e3d74..29ffb03 100644 --- a/Devices/ProductionLineDevice.cs +++ b/Devices/ProductionLineDevice.cs @@ -8,13 +8,19 @@ /// <summary> /// 杈撻�绾縋LC璁惧 /// </summary> - public class ProductionLineDevice : BaseModbusDevice { + public class ProductionLineDevice { + public string Ip { get; set; } + public int Port { get; set; } - public ProductionLineDevice(string ip, int port) : base(ip, port) { + public ProductionLineDevice(string ip, int port) { + Ip = ip; + Port = port; } - public ProductionLineDevice(string id, string ip, int port) : base(ip, port) { + public ProductionLineDevice(string id, string ip, int port) { + Ip = ip; + Port = port; Id = id; } diff --git a/Helpers/Device/S7Helper.cs b/Devices/S7Helper.cs similarity index 100% rename from Helpers/Device/S7Helper.cs rename to Devices/S7Helper.cs diff --git a/Helpers/Device/TcpClient.cs b/Devices/TcpClient.cs similarity index 100% rename from Helpers/Device/TcpClient.cs rename to Devices/TcpClient.cs diff --git a/Helpers/Device/TcpServer.cs b/Devices/TcpServer.cs similarity index 100% rename from Helpers/Device/TcpServer.cs rename to Devices/TcpServer.cs diff --git a/Helpers/Dispatch/GZRobot.cs b/Dispatch/GZRobot.cs similarity index 96% rename from Helpers/Dispatch/GZRobot.cs rename to Dispatch/GZRobot.cs index 570065f..44a5ef6 100644 --- a/Helpers/Dispatch/GZRobot.cs +++ b/Dispatch/GZRobot.cs @@ -122,38 +122,38 @@ switch (model.orderStatus) { case "active": - agv.State = 1; + agv.state = 1; break; case "waiting": - agv.State = 1; + agv.state = 1; break; case "source_finish": //鍙栬揣瀹屾垚 - agv.State = 4; + agv.state = 4; break; case "dest_finish": //鍗歌揣瀹屾垚 - agv.State = 6; + agv.state = 6; break; case "finish": - agv.State = 2; + agv.state = 2; break; case "manually_finish": - agv.State = 2; + agv.state = 2; break; case "cancel_finish": - agv.State = 7; + agv.state = 7; break; case "error": - agv.State = 7; + agv.state = 7; break; default: - agv.State = 0; + agv.state = 0; break; } - if (agv.State != 0) { - agv.TaskNo = model.orderName; - agv.ForkliftNo = model.agvIDList; + if (agv.state != 0) { + agv.task_no = model.orderName; + agv.forklift_no = model.agvIDList; AgvService.OperateAgvTaskStatus(agv); } diff --git a/Helpers/Dispatch/HanAo.cs b/Dispatch/HanAo.cs similarity index 100% rename from Helpers/Dispatch/HanAo.cs rename to Dispatch/HanAo.cs diff --git a/Helpers/Dispatch/HostToAGV.cs b/Dispatch/HostToAGV.cs similarity index 100% rename from Helpers/Dispatch/HostToAGV.cs rename to Dispatch/HostToAGV.cs diff --git a/Helpers/Dispatch/NDC.cs b/Dispatch/NDC.cs similarity index 100% rename from Helpers/Dispatch/NDC.cs rename to Dispatch/NDC.cs diff --git a/Helpers/Dispatch/NDCApi.cs b/Dispatch/NDCApi.cs similarity index 98% rename from Helpers/Dispatch/NDCApi.cs rename to Dispatch/NDCApi.cs index 9ff9326..15c4395 100644 --- a/Helpers/Dispatch/NDCApi.cs +++ b/Dispatch/NDCApi.cs @@ -8,6 +8,9 @@ namespace HH.WCS.Mobox3.DSZSH.Dispatch { + /// <summary> + /// NDC鐨凙PI鎺ュ彛锛岀敤浜庢浛浠e師NDC銆丯DCHelper鍜孒ostToAGV妯″潡 + /// </summary> public class NDCApi { public static string NDCApiUrl { set; get; } diff --git a/Helpers/Dispatch/NDCHelper.cs b/Dispatch/NDCHelper.cs similarity index 100% rename from Helpers/Dispatch/NDCHelper.cs rename to Dispatch/NDCHelper.cs diff --git a/Dtos/Request/AgvRequest.cs b/Dtos/Request/AgvRequest.cs index f914a22..09db430 100644 --- a/Dtos/Request/AgvRequest.cs +++ b/Dtos/Request/AgvRequest.cs @@ -10,9 +10,9 @@ /// HostToAGV 涓婃姤浠诲姟鐘舵� /// </summary> public class AgvTaskState { - public int State { get; set; } - public string TaskNo { get; set; } - public string ForkliftNo { get; set; } + public int state { get; set; } + public string task_no { get; set; } + public string forklift_no { get; set; } /// <summary> /// 瀹夊叏闂ㄧ紪鍙�@@ -22,6 +22,7 @@ } public class SafetyInteractionInfo { + public int station_id { get; set; } /// <summary> diff --git a/Dtos/Request/MoboxRequest.cs b/Dtos/Request/MoboxRequest.cs index b1b570c..e20bcd6 100644 --- a/Dtos/Request/MoboxRequest.cs +++ b/Dtos/Request/MoboxRequest.cs @@ -76,7 +76,8 @@ public class EmptyInboundDetailInfo : StartCntInfo { } public class EmptyOnlineInfo { - public string CgId { get; set; } + public string ItemCode { get; set; } + public string ItemName { get; set; } public string PatchNo { get; set; } public string EndLoc { get; set; } } @@ -96,9 +97,23 @@ /// <summary> /// 鎶芥鏁伴噺 /// </summary> - public int Count { get; set; } + public int N_QTY { get; set; } public string EndArea { get; set; } } + + public class QualifiedBackInfo { + public string ItemCode { get; set; } + public string CntrCode { get; set; } + } + + public class UnqualifiedShiftInfo : QualifiedBackInfo { + public string EndArea { get; set; } + } + + public class CheckShiftInfo : UnqualifiedShiftInfo { + public bool Qualified { get; set; } + } + #endregion #region WMS 鏁版嵁 @@ -106,23 +121,20 @@ /// 鎴愬搧鑳舵墭鐩樺嚭搴撲俊鎭� /// </summary> public class FinishedOutboundInfo { - /// <summary> - /// 鍑哄簱鍗�- /// </summary> - public string No { get; set; } + //public string No { get; set; } - public string CgId { get; set; } - public string CgName { get; set; } + public string ItemCode { get; set; } + public string ItemName { get; set; } public string BatchNo { get; set; } public string CntrType { get; set; } - public int Count { get; set; } + public float Qty { get; set; } public string EndArea { get; set; } /// <summary> /// 鏄惁寮哄埗鍑哄簱 /// </summary> - public bool Forced { get; set; } + public bool ForcedOut { get; set; } } diff --git a/Dtos/Response/AgvResponse.cs b/Dtos/Response/AgvResponse.cs index 5401c4f..8da52dc 100644 --- a/Dtos/Response/AgvResponse.cs +++ b/Dtos/Response/AgvResponse.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; namespace HH.WCS.Mobox3.DSZSH.Dtos.Response { - public class AgvResponse : BaseResponse { + public class AgvResponse { /// <summary> /// 杩斿洖缁�HostToAgv /// </summary> diff --git a/Dtos/Response/BaseResponse.cs b/Dtos/Response/BaseResponse.cs deleted file mode 100644 index 314a681..0000000 --- a/Dtos/Response/BaseResponse.cs +++ /dev/null @@ -1,20 +0,0 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace HH.WCS.Mobox3.DSZSH.Dtos.Response { - /// <summary> - /// 妯℃澘鎶借薄绫伙細杩斿洖淇℃伅 DTO 鍩虹被 - /// </summary> - public abstract class BaseResponse { - /// <summary> - /// 榛樿鐨�杩斿洖缁撴灉 鏁版嵁绫�{ int Code; string Message; } - /// </summary> - public class Result { - public int Code { get; set; } - public string Message { get; set; } - } - } -} diff --git a/Dtos/Response/MoboxResponse.cs b/Dtos/Response/MoboxResponse.cs index 8ebf56f..94fc6e7 100644 --- a/Dtos/Response/MoboxResponse.cs +++ b/Dtos/Response/MoboxResponse.cs @@ -4,12 +4,21 @@ using System.Text; using System.Threading.Tasks; +using Newtonsoft.Json; + namespace HH.WCS.Mobox3.DSZSH.Dtos.Response { - public class MoboxResponse : BaseResponse { + public class MoboxResponse { /// <summary> /// Mobox 鎺ュ彛杩斿洖 /// </summary> - public class SimpleResult : Result { + public class SimpleResult { + [JsonProperty("resultCode")] + public int Code { get; set; } + + [JsonProperty("resultMsg")] + public string Message { get; set; } + + [JsonProperty("result")] public List<object> Results { get; set; } = new List<object>(); } @@ -17,6 +26,7 @@ /// mobox 鍙栨秷浠诲姟銆佹爣璁板畬鎴愪换鍔� /// </summary> public class MoboxTaskBase { + [JsonProperty("task_no")] public string TaskNo { get; set; } } @@ -197,6 +207,7 @@ /// 杩斿洖缁橤Z /// </summary> public class GzResult { + public int resultCode { get; set; } public string msg { get; set; } public int orderID { get; set; } diff --git a/HH.WCS.Mobox3.DSZSH.csproj b/HH.WCS.Mobox3.DSZSH.csproj index ec63747..0667fa1 100644 --- a/HH.WCS.Mobox3.DSZSH.csproj +++ b/HH.WCS.Mobox3.DSZSH.csproj @@ -231,13 +231,13 @@ <Compile Include="AppStart\SwaggerControllerDescProvider.cs" /> <Compile Include="Models\DebugModel.cs" /> <Compile Include="Dtos\Request\DebugRequest.cs" /> - <Compile Include="Dtos\Response\BaseResponse.cs" /> <Compile Include="Dtos\Response\DebugResponse.cs" /> <Compile Include="Helpers\AgvHelper.cs" /> <Compile Include="Helpers\ExprHelper.cs" /> <Compile Include="Helpers\PathHelper.cs" /> <Compile Include="Helpers\ResultHelper.cs" /> <Compile Include="Helpers\DbHelper.cs" /> + <Compile Include="Models\TN_CNTR_ITEM.cs" /> <Compile Include="Models\TN_Check_Detail.cs" /> <Compile Include="Models\TN_Check_Order.cs" /> <Compile Include="Models\TN_Inbound_Order.cs" /> @@ -247,19 +247,18 @@ <Compile Include="ServiceCore\CheckCore.cs" /> <Compile Include="ServiceCore\OutboundCore.cs" /> <Compile Include="Services\DebugService.cs" /> - <Compile Include="Devices\BaseModbusDevice.cs" /> <Compile Include="Devices\ProductionLineDevice.cs" /> - <Compile Include="Helpers\Device\ModbusHelper.cs" /> - <Compile Include="Helpers\Device\OpcUaHelper.cs" /> - <Compile Include="Helpers\Device\PlcHelper.cs" /> - <Compile Include="Helpers\Device\S7Helper.cs" /> - <Compile Include="Helpers\Device\TcpClient.cs" /> - <Compile Include="Helpers\Device\TcpServer.cs" /> - <Compile Include="Helpers\Dispatch\GZRobot.cs" /> - <Compile Include="Helpers\Dispatch\HanAo.cs" /> - <Compile Include="Helpers\Dispatch\NDC.cs" /> + <Compile Include="Devices\ModbusHelper.cs" /> + <Compile Include="Devices\OpcUaHelper.cs" /> + <Compile Include="Devices\PlcHelper.cs" /> + <Compile Include="Devices\S7Helper.cs" /> + <Compile Include="Devices\TcpClient.cs" /> + <Compile Include="Devices\TcpServer.cs" /> + <Compile Include="Dispatch\GZRobot.cs" /> + <Compile Include="Dispatch\HanAo.cs" /> + <Compile Include="Dispatch\NDC.cs" /> <Compile Include="ServiceCore\OfflineCore.cs" /> - <Compile Include="Helpers\Dispatch\NDCApi.cs" /> + <Compile Include="Dispatch\NDCApi.cs" /> <Compile Include="Dtos\Request\AgvRequest.cs" /> <Compile Include="Dtos\Request\MoboxRequest.cs" /> <Compile Include="Dtos\Response\AgvResponse.cs" /> @@ -276,19 +275,19 @@ <Compile Include="Helpers\DeviceProcess.cs" /> <Compile Include="ServiceCore\TaskCore.cs" /> <Compile Include="Controllers\WmsController.cs" /> - <Compile Include="Helpers\Dispatch\HostToAGV.cs" /> - <Compile Include="Helpers\Model\TaskHelper.cs" /> + <Compile Include="Dispatch\HostToAGV.cs" /> + <Compile Include="Helpers\TaskHelper.cs" /> <Compile Include="Services\AgvService.cs" /> <Compile Include="Services\MoboxService.cs" /> <Compile Include="Helpers\LogHelper.cs" /> - <Compile Include="Helpers\Model\ContainerHelper.cs" /> - <Compile Include="Helpers\Model\LocationHelper.cs" /> + <Compile Include="Helpers\ContainerHelper.cs" /> + <Compile Include="Helpers\LocationHelper.cs" /> <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="Helpers\Dispatch\NDCHelper.cs" /> + <Compile Include="Dispatch\NDCHelper.cs" /> <Compile Include="Helpers\HttpHelper.cs" /> </ItemGroup> <ItemGroup> diff --git a/Helpers/Model/ContainerHelper.cs b/Helpers/ContainerHelper.cs similarity index 93% rename from Helpers/Model/ContainerHelper.cs rename to Helpers/ContainerHelper.cs index d069b0a..013be47 100644 --- a/Helpers/Model/ContainerHelper.cs +++ b/Helpers/ContainerHelper.cs @@ -7,7 +7,7 @@ using Newtonsoft.Json; -namespace HH.WCS.Mobox3.DSZSH.Helpers.Model { +namespace HH.WCS.Mobox3.DSZSH.Helpers { /// <summary> /// 瀹瑰櫒甯姪绫伙紙鍖呭惈瀹瑰櫒-璐у搧鍏崇郴鐨勫鐞嗭級 /// </summary> @@ -25,7 +25,7 @@ var logs = $"瀹瑰櫒锛歿cnt}锛岃揣鍝侊細{JsonConvert.SerializeObject(cGs)}"; try { - var cntCgList = db.Queryable<TN_CG_Detail>().Where(a => cGs.Contains(a.S_CG_ID) && a.S_CNTR_CODE == cnt).ToList(); + var cntCgList = db.Queryable<TN_CG_Detail>().Where(a => cGs.Contains(a.S_ITEM_CODE) && a.S_CNTR_CODE == cnt).ToList(); if (cntCgList.Count > 0) { @@ -35,7 +35,7 @@ var bindCntCgList = new List<TN_CG_Detail>(); foreach (var item in cGs) { - bindCntCgList.Add(new TN_CG_Detail() { S_CNTR_CODE = cnt, S_CG_ID = item }); + bindCntCgList.Add(new TN_CG_Detail() { S_CNTR_CODE = cnt, S_ITEM_CODE = item }); } var log = JsonConvert.SerializeObject(bindCntCgList); @@ -90,16 +90,16 @@ var logs = $"瀹瑰櫒锛歿cnt}锛岃揣鍝侊細{JsonConvert.SerializeObject(cGs)}"; try { - var cntCgList = db.Queryable<TN_CG_Detail>().Where(a => cGs.Contains(a.S_CG_ID) && a.S_CNTR_CODE == cnt).ToList(); + var cntCgList = db.Queryable<TN_CG_Detail>().Where(a => cGs.Contains(a.S_ITEM_CODE) && a.S_CNTR_CODE == cnt).ToList(); if (cntCgList.Count == 0) { LogHelper.Info($"瀹瑰櫒鏃犻渶瑙g粦璐у搧锛屽湪鏁版嵁搴撲腑鏈壘鍒皗JsonConvert.SerializeObject(cGs)}鐩稿叧鐨勫鍣ㄨ揣鍝佸叧绯昏〃淇℃伅"); return "瀹瑰櫒鏃犻渶瑙g粦璐у搧锛岃В缁戞垚鍔� + logs; } - cGs = cntCgList.Select(a => a.S_CG_ID).ToList(); + cGs = cntCgList.Select(a => a.S_ITEM_CODE).ToList(); var log = JsonConvert.SerializeObject(cGs); - if (db.Deleteable<TN_CG_Detail>().Where(it => cGs.Contains(it.S_CG_ID) && it.S_CNTR_CODE == cnt).ExecuteCommand() > 0) + if (db.Deleteable<TN_CG_Detail>().Where(it => cGs.Contains(it.S_ITEM_CODE) && it.S_CNTR_CODE == cnt).ExecuteCommand() > 0) { LogHelper.Info($"鍒犻櫎瀹瑰櫒璐у搧鍏崇郴琛ㄦ垚鍔燂紝{log}"); } diff --git a/Helpers/Model/LocationHelper.cs b/Helpers/LocationHelper.cs similarity index 99% rename from Helpers/Model/LocationHelper.cs rename to Helpers/LocationHelper.cs index 88bcc10..d2d14df 100644 --- a/Helpers/Model/LocationHelper.cs +++ b/Helpers/LocationHelper.cs @@ -10,7 +10,7 @@ using static HH.WCS.Mobox3.DSZSH.Dtos.Response.MoboxResponse; -namespace HH.WCS.Mobox3.DSZSH.Helpers.Model { +namespace HH.WCS.Mobox3.DSZSH.Helpers { /// <summary> /// 璐т綅甯姪绫伙紙鍖呭惈璐т綅-瀹瑰櫒鍏崇郴鐨勫鐞嗭級 /// </summary> diff --git a/Helpers/ResultHelper.cs b/Helpers/ResultHelper.cs index 524df8f..3eaab40 100644 --- a/Helpers/ResultHelper.cs +++ b/Helpers/ResultHelper.cs @@ -1,20 +1,9 @@ 锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static HH.WCS.Mobox3.DSZSH.Dtos.Response.BaseResponse; using static HH.WCS.Mobox3.DSZSH.Dtos.Response.MoboxResponse; namespace HH.WCS.Mobox3.DSZSH.Helpers { public class ResultHelper { - public static Result BuildResult(int code, string message, bool pringLog = true) { - if (pringLog) { - LogHelper.Info(message); - } - return new Result { Code = code, Message = message }; - } /// <summary> /// 鏋勫缓 <see cref="SimpleResult"/> 杩斿洖鍊硷紝閫夋嫨鎵撳嵃鏃ュ織淇℃伅锛堥粯璁ゆ墦鍗帮級 diff --git a/Helpers/SysHelper.cs b/Helpers/SysHelper.cs index 9d37ae7..b163c71 100644 --- a/Helpers/SysHelper.cs +++ b/Helpers/SysHelper.cs @@ -3,8 +3,12 @@ using SqlSugar; namespace HH.WCS.Mobox3.DSZSH.Helper { + /// <summary> + /// 鐢ㄤ簬鐢熸垚搴忓垪鍙凤紝骞剁鐞嗗簭鍒楀彿鍓嶇紑鐨勫伐鍏风被 + /// </summary> internal class SysHelper { + //浣跨敤闈欐� locker 瀵硅薄瀹炵幇绾跨▼鍚屾 private static object locker = new object(); internal static int GetSerialNumber(string snType, string prefix) { int result = 0; @@ -13,9 +17,16 @@ var sId = db.Queryable<OI_SYS_MAXID>().Where(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix).First(); if (sId != null) { sId.CN_N_MAX++; - if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX} where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) { + //if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX} where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) { + // result = sId.CN_N_MAX; + //} + + // 鍙傛暟鍖栨煡璇紝閬垮厤SQL娉ㄥ叆 + if (db.Updateable<OI_SYS_MAXID>().SetColumns(it => it.CN_N_MAX == sId.CN_N_MAX).Where(it => it.CN_S_TYPE == snType + && it.CN_S_PRE == prefix).ExecuteCommand() > 0) { result = sId.CN_N_MAX; } + } else { //鎻掑叆琛�diff --git a/Helpers/Model/TaskHelper.cs b/Helpers/TaskHelper.cs similarity index 99% rename from Helpers/Model/TaskHelper.cs rename to Helpers/TaskHelper.cs index f9cdfad..3b78306 100644 --- a/Helpers/Model/TaskHelper.cs +++ b/Helpers/TaskHelper.cs @@ -14,7 +14,7 @@ using static HH.WCS.Mobox3.DSZSH.Dtos.Response.MoboxResponse; using static HH.WCS.Mobox3.DSZSH.Helpers.ResultHelper; -namespace HH.WCS.Mobox3.DSZSH.Helpers.Model { +namespace HH.WCS.Mobox3.DSZSH.Helpers { /// <summary> /// 浠诲姟甯姪绫� /// </summary> diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs index 5d4b332..31acaf0 100644 --- a/Models/TN_CG_Detail.cs +++ b/Models/TN_CG_Detail.cs @@ -9,12 +9,12 @@ /// <summary> /// 鏂欑鍟嗗搧鏍囪瘑 /// </summary> - public string S_CG_ID { get; set; } + public string S_CG_ID { get; set; } = ""; /// <summary> /// 鐗╂枡缂栫爜 /// </summary> - public string S_ITEM_CODE { get; set; } = ""; + public string S_ITEM_CODE { get; set; } /// <summary> /// 瀹瑰櫒缂栫爜 @@ -35,10 +35,10 @@ /// 鎵规鍙� /// </summary> public string S_BATCH_NO { get; set; } - - ///// <summary> - ///// 璐у搧鏁伴噺 - ///// </summary> - //public float F_QTY { get; set; } + + /// <summary> + /// 璐у搧鏁伴噺 + /// </summary> + public float F_QTY { get; set; } } } diff --git a/Models/TN_CNTR_ITEM.cs b/Models/TN_CNTR_ITEM.cs new file mode 100644 index 0000000..f1f2c66 --- /dev/null +++ b/Models/TN_CNTR_ITEM.cs @@ -0,0 +1,18 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using SqlSugar; + +namespace HH.WCS.Mobox3.DSZSH.Models { + /// <summary> + /// 瀹瑰櫒-鐗╂枡绫诲瀷 鍏崇郴琛�+ /// </summary> + [SugarTable("TN_CNTR_ITEM")] + public class TN_CNTR_ITEM : BaseModel { + public string S_CNTR_CODE { get; set; } + public string S_ITEM_CODE { get; set; } + } +} diff --git a/Models/TN_Outbound_Detail.cs b/Models/TN_Outbound_Detail.cs index a1a2a2d..f219dca 100644 --- a/Models/TN_Outbound_Detail.cs +++ b/Models/TN_Outbound_Detail.cs @@ -19,7 +19,9 @@ /// <summary> /// 鐗╂枡鍙� /// </summary> - public string S_CG_ID { get; set; } + public string S_ITEM_CODE { get; set; } + + public string S_CNTR_CODE { get; set; } /// <summary> /// 鎵规鍙�@@ -36,9 +38,5 @@ /// </summary> public string S_END_AREA { get; set; } - /// <summary> - /// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗 - /// </summary> - public int N_FORCE { get; set; } } } diff --git a/Models/TN_Outbound_Order.cs b/Models/TN_Outbound_Order.cs index 8a956a4..99fb355 100644 --- a/Models/TN_Outbound_Order.cs +++ b/Models/TN_Outbound_Order.cs @@ -21,17 +21,16 @@ /// <summary> /// 鐗╂枡鍙� /// </summary> - public string S_CG_ID { get; set; } + public string S_ITEM_CODE { get; set; } /// <summary> /// 鎵规鍙� /// </summary> public string S_BATCH_NO { get; set; } - /// <summary> - /// 鍑哄簱璐у搧鏁伴噺锛堟暣鏁帮紝鐢ㄤ簬鐢熸垚浠诲姟鏁帮級 - /// </summary> - public int N_COUNT { get; set; } + public float F_QTY { get; set; } + + public float F_OUT_QTY { get; set; } /// <summary> /// 缁堢偣搴撳尯锛堢敱WMS涓嬪彂浠诲姟鏃舵寚瀹氾級 @@ -41,7 +40,7 @@ /// <summary> /// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗 /// </summary> - public int N_FORCE { get; set; } + public bool B_FORCE_OUT { get; set; } [Navigate(NavigateType.OneToMany, nameof(TN_Outbound_Detail.S_NO))] diff --git a/Program.cs b/Program.cs index 2aa5ce7..5f198b3 100644 --- a/Program.cs +++ b/Program.cs @@ -127,9 +127,9 @@ { List<Task> tasks = new List<Task>(); - tasks.Add(GetTask(CheckCore.CheckOrderState)); + //tasks.Add(GetTask(CheckCore.CheckOrderState)); - tasks.Add(GetTask(OutboundCore.CheckOrderState)); + //tasks.Add(GetTask(OutboundCore.CheckOrderState)); // 娣诲姞浠诲姟鎺ㄩ�绾跨▼ diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs index 4fdf160..fec6b9e 100644 --- a/ServiceCore/CheckCore.cs +++ b/ServiceCore/CheckCore.cs @@ -1,15 +1,8 @@ 锘縰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.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; - -using Org.BouncyCastle.Asn1.X509; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { public class CheckCore { @@ -37,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_CG_ID == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO) + .Where((l, c, d) => d.S_ITEM_CODE == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO) .Select((l, c) => c) // 閫夋嫨 LocCntrRel .First(); // 闅忔満鎶芥锛屼笉鎺掑簭 @@ -64,7 +57,7 @@ } if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, - endLoc.S_CODE, TaskName.鎶芥)) { + endLoc.S_CODE, TaskName.鎶芥_鍑哄簱)) { tran.CommitTran(); } else { diff --git a/ServiceCore/OfflineCore.cs b/ServiceCore/OfflineCore.cs index 1d053e6..9fda54e 100644 --- a/ServiceCore/OfflineCore.cs +++ b/ServiceCore/OfflineCore.cs @@ -1,12 +1,7 @@ 锘縰sing System; -using HH.WCS.Mobox3.DSZSH.AppStart; -using HH.WCS.Mobox3.DSZSH.Consts; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Helpers; using HH.WCS.Mobox3.DSZSH.Models; -using HH.WCS.Mobox3.DSZSH.Helper; -using System.Collections.Generic; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { /// <summary> @@ -40,12 +35,12 @@ var cntrId = ModbusHelper.ReadHoldingRegistersToString(40, 20, prodLineInfo.PlcIp, prodLineInfo.PlcPort); var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(cd => cd.S_CG_ID == cgId && cd.S_CNTR_CODE == cntrId).First(); + .Where(cd => cd.S_ITEM_CODE == cgId && cd.S_CNTR_CODE == cntrId).First(); // 缁戝畾 鐗╂枡淇℃伅 鍜�瀹瑰櫒淇℃伅 cgDetail = new TN_CG_Detail { - S_CG_ID = cgId, + S_ITEM_CODE = cgId, S_CNTR_CODE = cntrId, }; diff --git a/ServiceCore/OutboundCore.cs b/ServiceCore/OutboundCore.cs index 29e3cda..5f684c3 100644 --- a/ServiceCore/OutboundCore.cs +++ b/ServiceCore/OutboundCore.cs @@ -2,7 +2,6 @@ using HH.WCS.Mobox3.DSZSH.Consts; using HH.WCS.Mobox3.DSZSH.Helpers; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { @@ -36,18 +35,9 @@ return; } - 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_CG_ID == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO) - // 濡傛灉涓嶆槸寮哄埗鍑哄簱锛岀墿鏂欑姸鎬佸繀椤诲繀椤诲悎鏍�- // 鍚﹀垯锛屽彧瑕佷笉鏄�姝e湪妫�獙 鐨勭墿鏂欏嵆鍙�- .Where((l, c, d) => (detail.N_FORCE == 0 && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") - || (detail.N_FORCE != 0 && d.N_ITEM_STATE != 3 && d.S_ITEM_STATE != "姝e湪妫�獙")) - // 鎺掑簭锛氭暟瀛楄秺灏忚秺浼樺厛锛屽悎鏍硷紴寰呮锛炰笉鍚堟牸 - .OrderBy((l, c, d) => d.N_ITEM_STATE) - .OrderBy(l => l.N_LAYER) - .Select((l, c) => c).First(); + var startLocCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_CNTR_CODE == detail.S_CNTR_CODE) + .First(); if (startLocCntrRel == null) { LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); diff --git a/ServiceCore/TaskCore.cs b/ServiceCore/TaskCore.cs index ecfd717..d3d0f92 100644 --- a/ServiceCore/TaskCore.cs +++ b/ServiceCore/TaskCore.cs @@ -1,15 +1,10 @@ -锘縰sing System; +锘縰sing System.Collections.Generic; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; -using HH.WCS.Mobox3.DSZSH.Helper; +using HH.WCS.Mobox3.DSZSH.Dispatch; +using HH.WCS.Mobox3.DSZSH.Helpers; +using HH.WCS.Mobox3.DSZSH.Models; using Newtonsoft.Json; - -using static HH.WCS.Mobox3.DSZSH.Dtos.Request.AgvRequest; -using static HH.WCS.Mobox3.DSZSH.Dtos.Response.AgvResponse; -using HH.WCS.Mobox3.DSZSH.Dispatch; -using HH.WCS.Mobox3.DSZSH.Models; -using System.Collections.Generic; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { internal class TaskCore { diff --git a/Services/AgvService.cs b/Services/AgvService.cs index 544a88d..8a98eaf 100644 --- a/Services/AgvService.cs +++ b/Services/AgvService.cs @@ -1,25 +1,23 @@ 锘縰sing System; +using System.Threading.Tasks; using HH.WCS.Mobox3.DSZSH.Consts; using HH.WCS.Mobox3.DSZSH.Devices; using HH.WCS.Mobox3.DSZSH.Helpers; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; -using HH.WCS.Mobox3.DSZSH.Helper; +using HH.WCS.Mobox3.DSZSH.ServiceCore; using Newtonsoft.Json; using static HH.WCS.Mobox3.DSZSH.Dtos.Request.AgvRequest; using static HH.WCS.Mobox3.DSZSH.Dtos.Response.AgvResponse; -using System.Threading.Tasks; -using HH.WCS.Mobox3.DSZSH.ServiceCore; namespace HH.WCS.Mobox3.DSZSH.Services { public class AgvService { public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) { var result = new ReturnResult(); try { - switch (model.State) { + switch (model.state) { case 1023: case 1025: @@ -35,7 +33,7 @@ if (!AgvTaskProcessOk(model)) { // 鎵ц涓峅K锛岃鏄庢病鏈夋壘鍒颁换鍔� result.ResultCode = 1; - result.ResultMsg = $"鏍规嵁Model.No鏈壘鍒板搴旂殑浠诲姟锛寋model.TaskNo}"; + result.ResultMsg = $"鏍规嵁Model.No鏈壘鍒板搴旂殑浠诲姟锛寋model.task_no}"; LogHelper.Info(result.ResultMsg, "API"); return result; } @@ -62,19 +60,19 @@ /// <param name="model"></param> /// <returns></returns> private static bool AgvTaskProcessOk(AgvTaskState model) { - var TN_Task = TaskHelper.GetTask(model.TaskNo); // 鏍规嵁褰撳墠model缂栧彿鏌ヨ浠诲姟 + var TN_Task = TaskHelper.GetTask(model.task_no); // 鏍规嵁褰撳墠model缂栧彿鏌ヨ浠诲姟 if (TN_Task == null) { return false; } - if (model.State > 7) { + if (model.state > 7) { //瀹夊叏璇锋眰绛�- TaskHelper.OperateReq(model.TaskNo, model.State, model.ForkliftNo, model.ext_data); + TaskHelper.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data); return true; } // AGV 浠诲姟 134562(7) 鐘舵�澶勭悊 - switch (model.State) { + switch (model.state) { case AgvStateCode.鎵ц: - TaskHelper.Begin(TN_Task, model.ForkliftNo); // 宸叉帹閫佺殑浠诲姟鐨勭姸鎬佹敼鎴愭墽琛�+ TaskHelper.Begin(TN_Task, model.forklift_no); // 宸叉帹閫佺殑浠诲姟鐨勭姸鎬佹敼鎴愭墽琛� break; case AgvStateCode.寮�鍙栬揣: TaskHelper.UpdateStatus(TN_Task, "寮�鍙栬揣"); // 浠诲姟鐘舵�鏀规垚寮�鍙栬揣 @@ -100,7 +98,7 @@ case AgvStateCode.瀹屾垚: TaskHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫 - if (TN_Task.S_TYPE == TaskName.鎶芥) { + if (TN_Task.S_TYPE == TaskName.鎶芥_鍑哄簱) { var checkCompleteTask = Task.Run(() => { CheckCore.UpdateTaskState(SpotStateCode.浠诲姟鎵ц瀹屾垚); }); @@ -114,7 +112,7 @@ } // 灏咥GV鎵ц鐘舵�锛屽姞鍏N_Task_Action琛ㄤ腑 - TaskHelper.AddActionRecord(model.TaskNo, model.State, model.ForkliftNo, model.ext_data); + TaskHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data); //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus锛屾坊鍔犱换鍔″姩浣滃叧绯昏〃 return true; diff --git a/Services/DebugService.cs b/Services/DebugService.cs index 71d3d88..bc72257 100644 --- a/Services/DebugService.cs +++ b/Services/DebugService.cs @@ -7,6 +7,7 @@ using CsvHelper; using CsvHelper.Configuration; +using HH.WCS.Mobox3.DSZSH.Helper; using HH.WCS.Mobox3.DSZSH.Helpers; using HH.WCS.Mobox3.DSZSH.Models; @@ -53,22 +54,22 @@ } var agvTaskState = new AgvTaskState() { - TaskNo = model.TaskID, - ForkliftNo = model.ForkliftNo, + task_no = model.TaskID, + forklift_no = model.ForkliftNo, }; var result = new ReturnResult(); // 褰撳墠鐘舵�娌℃湁杈惧埌鏈�粓鐘舵�鏃讹紝寰幆鍔犲叆杩斿洖鍒楄〃 while (agvCurrentState != model.NextState) { - agvTaskState.State = agvCurrentState; + agvTaskState.state = agvCurrentState; result = AgvService.OperateAgvTaskStatus(agvTaskState); returnResults.ResultList.Add(result); agvCurrentState = AgvHelper.GetNextState(agvCurrentState); } // 灏嗗惊鐜病鏈夊埌杈剧殑鏈�粓鐘舵�锛屼篃鍔犲叆杩斿洖鍒楄〃 - agvTaskState.State = model.NextState; + agvTaskState.state = model.NextState; result = AgvService.OperateAgvTaskStatus(agvTaskState); returnResults.ResultList.Add(result); @@ -80,23 +81,47 @@ /// 鍒濆鏁版嵁搴撳缓绔� /// </summary> /// <returns></returns> - public static string CreateDatabase() { + public static string CreateDatabase(bool cover = true) { try { var db = DbHelper.GetDbClient(); - //db.CodeFirst.InitTables<TN_CG_Detail>(); - //db.CodeFirst.InitTables<TN_WorkOrder>(); - //db.CodeFirst.InitTables<TN_CAR_IN>(); - ////db.CodeFirst.InitTables<SYSHelper.OI_SYS_MAXID>(); - //db.CodeFirst.InitTables<TN_Task_Action>(); - //db.CodeFirst.InitTables<TN_Task>(); - //db.CodeFirst.InitTables<TN_Location>(); - //db.CodeFirst.InitTables<TN_Loc_Container>(); + var entityTypes = new Type[] { + typeof(TN_CAR_IN), + typeof(TN_CG_Detail), + typeof(TN_Container), + typeof(TN_Loc_Container), + typeof(TN_Location), + typeof(TN_Task), + typeof(TN_Task_Action), + typeof(SysHelper.OI_SYS_MAXID), - //db.CodeFirst.InitTables<TN_Outbound_Order>(); - //db.CodeFirst.InitTables<TN_Outbound_Detail>(); - //db.CodeFirst.InitTables<TN_Check_Order>(); - db.CodeFirst.InitTables<TN_Check_Detail>(); + typeof(TN_Inbound_Order), + typeof(TN_Check_Detail), + typeof(TN_Check_Order), + typeof(TN_CNTR_ITEM), + typeof(TN_Outbound_Detail), + typeof(TN_Outbound_Order), + }; + + using (var tran = db.Ado.UseTran()) { + if (cover) { + // 鍒犻櫎鎵�湁琛紙鎸変緷璧栧叧绯诲�搴忥級 + var tables = db.DbMaintenance.GetTableInfoList(); + foreach (var table in tables.OrderByDescending(t => t.Name)) { + db.DbMaintenance.DropTable(table.Name); + } + + // 鍒涘缓鏂拌〃 + db.CodeFirst.InitTables(entityTypes); + + //db.CodeFirst.BackupTable().InitTables(entityTypes); + } + else { + db.CodeFirst.InitTables(entityTypes); + } + + tran.CommitTran(); + } } catch (Exception ex) { @@ -191,10 +216,10 @@ } var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrCg.CntrCode - && a.S_CG_ID == locCntrCg.CgId); + && a.S_ITEM_CODE == locCntrCg.CgId); if (cgDetail == null) { var locList = new List<TN_CG_Detail>(); - locList.Add(new TN_CG_Detail { S_CNTR_CODE = locCntrCg.CntrCode, S_CG_ID = locCntrCg.CgId, S_BATCH_NO = locCntrCg.BatchNo ?? "" }); + locList.Add(new TN_CG_Detail { S_CNTR_CODE = locCntrCg.CntrCode, S_ITEM_CODE = locCntrCg.CgId, S_BATCH_NO = locCntrCg.BatchNo ?? "" }); if (db.Insertable<TN_CG_Detail>(locList).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"鎻掑叆鎵樼洏鐗╂枡鍏崇郴{locCntrCg.CntrCode}-{locCntrCg}澶辫触"); diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index cdc9920..8ad85b5 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -1,11 +1,15 @@ 锘縰sing System; +using System.Collections.Generic; +using System.Linq; using HH.WCS.Mobox3.DSZSH.Consts; +using HH.WCS.Mobox3.DSZSH.Helper; using HH.WCS.Mobox3.DSZSH.Helpers; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; using Newtonsoft.Json; + +using SqlSugar; using static HH.WCS.Mobox3.DSZSH.Dtos.Request.MoboxRequest; using static HH.WCS.Mobox3.DSZSH.Dtos.Response.MoboxResponse; @@ -399,7 +403,7 @@ S_CG_ID = model.CgId, S_ITEM_NAME = model.ItemName, S_BATCH_NO = model.BatchNo, - N_COUNT = model.Count, + N_COUNT = model.N_QTY, S_END_AREA = model.EndArea, }; @@ -408,7 +412,7 @@ return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); } - for (int i = 0; i < model.Count; i++) { + for (int i = 0; i < model.N_QTY; i++) { var detail = new TN_Check_Detail { S_NO = model.No, S_CG_ID = model.CgId, @@ -430,6 +434,121 @@ return BuildSimpleEx(ex); } } + + public static SimpleResult QualifiedBack(QualifiedBackInfo model) { + var db = DbHelper.GetDbClient(); + try { + + var cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode) + .First(); + + if (cgDetail == null) { + return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡"); + } + + cgDetail.N_ITEM_STATE = 0; + cgDetail.S_ITEM_STATE = "鍚堟牸"; + + // TODO 涓嶉渶瑕佽仈绔嬩笁涓〃 + var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container> + ((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where(ExprHelper.LocIsFree) + .Select((l, c) => c) + .First(); + + if (startLocCntrRel == null) { + return BuildSimpleResult(0, "娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + } + + var endLoc = db.Queryable<TN_Location>() + .Where(ExprHelper.LocBelongsToArea(startLocCntrRel.S_CNTR_TYPE == "鎵樼洏" ? AreaName.婊℃墭瀛樻斁鍖�: + startLocCntrRel.S_CNTR_TYPE == "濂借繍绠� ? AreaName.婊$瀛樻斁鍖�: "")) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + return BuildSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + } + + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => + new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "淇敼鐗╂枡鐘舵�涓哄悎鏍�澶辫触"); + } + + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎶芥_鍚堟牸鍥炲簱)) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鍒涘缓浠诲姟澶辫触", false); + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, "鐗╂枡鍚堟牸鍥炲簱浠诲姟鍒涘缓鎴愬姛"); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) { + var db = DbHelper.GetDbClient(); + try { + + var cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode) + .First(); + + if (cgDetail == null) { + return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡"); + } + + cgDetail.N_ITEM_STATE = 2; + cgDetail.S_ITEM_STATE = "涓嶅悎鏍�; + + // TODO 涓嶉渶瑕佽仈绔嬩笁涓〃 + var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container> + ((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where(ExprHelper.LocIsFree) + .Select((l, c) => c) + .First(); + + if (startLocCntrRel == null) { + return BuildSimpleResult(0, "娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + } + + var endLoc = db.Queryable<TN_Location>() + .Where(l => l.S_AREA_CODE == model.EndArea) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + return BuildSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + } + + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => + new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "淇敼鐗╂枡鐘舵�涓哄悎鏍�澶辫触"); + } + + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎶芥_涓嶅悎鏍肩Щ搴�) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鍒涘缓浠诲姟澶辫触", false); + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, "鐗╂枡涓嶅悎鏍肩Щ搴撲换鍔″垱寤烘垚鍔�); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + #endregion #region Mobox 鍔熻兘 @@ -443,32 +562,28 @@ /// <returns></returns> public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) { var db = DbHelper.GetDbClient(); + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "ON"); try { - if (string.IsNullOrEmpty(model.No)) { + if (string.IsNullOrEmpty(orderNo)) { return BuildSimpleResult(2, "鍑哄簱鍗曞彿涓嶈兘涓虹┖"); } using (var tran = db.Ado.UseTran()) { - var order = new TN_Outbound_Order { - S_NO = model.No, - S_CG_ID = model.CgId, - S_BATCH_NO = model.BatchNo, - S_END_AREA = model.EndArea, - N_FORCE = model.Forced ? 1 : 0 - }; - if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(3, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); + var cgDetailList = SelectCgByTotalQty(model); + + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - for (int i = 0; i < model.Count; i++) { + // NOTE 濡傛灉鍒涘缓order鐨勬椂鍊欏氨鎸囧畾鍏蜂綋鍑哄簱鐗╂枡鐨刢ntr锛岄偅涔堝鏋滃湪鍒涘缓浠诲姟鍓嶏紝杩欎釜鐗╂枡琚敊璇娊妫�簡鎬庝箞鍔�+ foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { - S_NO = model.No, - S_CG_ID = model.CgId, - S_BATCH_NO = model.BatchNo, - N_FORCE = model.Forced ? 1 : 0, + S_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_END_AREA = model.EndArea }; @@ -476,6 +591,20 @@ tran.RollbackTran(); return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); } + } + + var order = new TN_Outbound_Order { + S_NO = orderNo, + S_ITEM_CODE = model.ItemCode, + S_BATCH_NO = model.BatchNo, + F_QTY = model.Qty, + F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY), + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); } tran.CommitTran(); @@ -494,29 +623,28 @@ /// <returns></returns> public static SimpleResult FinishedOutboundForce(FinishedOutboundInfo model) { var db = DbHelper.GetDbClient(); + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "ON"); try { - if (string.IsNullOrEmpty(model.No)) { + if (string.IsNullOrEmpty(orderNo)) { return BuildSimpleResult(2, "鍑哄簱鍗曞彿涓嶈兘涓虹┖"); } using (var tran = db.Ado.UseTran()) { - var order = new TN_Outbound_Order { - S_NO = model.No, - N_FORCE = model.Forced ? 1 : 0 - }; - if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(3, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); + var cgDetailList = SelectCgByTotalQty(model); + + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - for (int i = 0; i < model.Count; i++) { + // NOTE 濡傛灉鍒涘缓order鐨勬椂鍊欏氨鎸囧畾鍏蜂綋鍑哄簱鐗╂枡鐨刢ntr锛岄偅涔堝鏋滃湪鍒涘缓浠诲姟鍓嶏紝杩欎釜鐗╂枡琚敊璇娊妫�簡鎬庝箞鍔�+ foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { - S_NO = model.No, - S_CG_ID = model.CgId, - S_BATCH_NO = model.BatchNo, - N_FORCE = model.Forced ? 1 : 0, + S_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_END_AREA = model.EndArea }; @@ -524,6 +652,20 @@ tran.RollbackTran(); return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); } + } + + var order = new TN_Outbound_Order { + S_NO = orderNo, + S_ITEM_CODE = model.ItemCode, + S_BATCH_NO = model.BatchNo, + F_QTY = model.Qty, + F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY), + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); } tran.CommitTran(); @@ -536,6 +678,63 @@ } } + public static List<TN_CG_Detail> SelectCgByTotalQty(FinishedOutboundInfo model) { + var db = DbHelper.GetDbClient(); + var result = new List<TN_CG_Detail>(); + var targetNum = model.Qty; + + 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(); + if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠�+ { + result.Add(targetCg); + return result; + } + + // 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, 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_ITEM_STATE, OrderByType.Asc).ToList(); + + if (sortedMaterials.Count == 0)//娌℃湁婊¤冻鏉′欢鐨�+ { + return result; + } + + float countNum = 0; + foreach (var mat in sortedMaterials) { + countNum += mat.F_QTY; + result.Add(mat); + if (countNum >= targetNum) { + break; + } + } + if (result.Sum(a => a.F_QTY) >= targetNum) { + return result; + } + else { + result.Clear(); + return result; + } + } + catch (Exception ex) { + throw ex; + } + } + + private static string GenerateOrderNo(string snType, string prefix) { + var id = SysHelper.GetSerialNumber(snType, prefix); + var date = DateTime.Now.ToString("yyMMdd"); + return $"ON{date}{id.ToString().PadLeft(4, '0')}"; + } + #endregion } diff --git a/config/config.json b/config/config.json index 04cdfe5..4436b8f 100644 --- a/config/config.json +++ b/config/config.json @@ -98,7 +98,13 @@ "EndAreas": [ "HJQ1" ] }, { - "Name": "鎶芥" + "Name": "鎶芥-鍑哄簱" + }, + { + "Name": "鎶芥-鍚堟牸鍥炲簱" + }, + { + "Name": "鎶芥-涓嶅悎鏍肩Щ搴� }, { "Name": "鎴愬搧鑳跺嚭搴� -- Gitblit v1.9.1