From 2d3d006620bb15a2350c516f050058e5f84c7bf8 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 21 五月 2024 17:03:44 +0800
Subject: [PATCH] 添加人工一键下料功能,人工一键切换托盘功能,优化任务等级

---
 代码管理/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 151 insertions(+), 6 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs"
index a9c5dbf..6230dc3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs"
@@ -25,6 +25,9 @@
 using static System.Collections.Specialized.BitVector32;
 using WIDESEA_Core.EFDbContext;
 using WIDESEA_WMS.Repositories;
+using WIDESEA_Comm;
+using WIDESEA_Comm.TaskNo;
+using WIDESEA_Common;
 
 namespace WIDESEA_WMS.Services
 {
@@ -97,17 +100,159 @@
             }
             return webResponse;
         }
-
-        public WebResponseContent SendAGVTask(object json)
+        /// <summary>
+        /// 鍒囨崲鎵樼洏
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public WebResponseContent Trayswitching(SaveModel saveModel)
         {
             WebResponseContent webResponse = new WebResponseContent();
-            try
+            VOLContext context = new VOLContext();
+            Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context);
+            IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
+            string completor = UserContext.Current.UserName;
+            foreach (var Key in saveModel.DelKeys)
             {
+                try
+                {
+                    var station = repository.Find(x => x.id.ToString() == Key.ToString()).FirstOrDefault();
+                    if (!station.stationCode.Contains("X")) throw new Exception($"鏃爗station.stationCode}浣跨敤鏉冮檺锛�");
+                    if (!station.enable) throw new Exception($"{station.stationCode}鏈惎鐢紒");
+                    if (station.location_state == LocationStateEnum.Abnormal.ToString()) throw new Exception($"{station.stationCode}鐘舵�佸紓甯革紒");
+                    if (station.location_state == LocationStateEnum.Empty.ToString()) throw new Exception($"{station.stationCode}鐘舵�佷负绌猴紒");
+                    if (station.remark == "妗佹灦涓嬫枡") throw new Exception($"{station.stationCode}妗佹灦姝e湪涓嬫枡锛�");
+                    if (agvtaskRepository.Find(x => x.agv_toaddress == station.stationCode).Any()) throw new Exception($"{station.stationCode}瀛樺湪浠诲姟锛�");
+                    
+                    if (!agvtaskRepository.Find(x => x.agv_fromaddress == station.stationCode).Any())
+                    {
+                        #region 涓虹┖鎵樺苟涓旀暟閲忎负0,鍒涘缓鍙栫┖鎵樹换鍔�
+                        if (station.tray_status == TrayStateEnum.EmptyTray.ToString() && station.quantity == 0)
+                        {
+                            dt_agvtask agvtask = new dt_agvtask()
+                            {
+                                agv_fromaddress = station.stationCode,
+                                agv_id = Guid.NewGuid(),
+                                agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                                agv_grade = 1,
+                                agv_createtime = DateTime.Now,
+                                agv_taskstate = AGVTaskStateEnum.Queue.ToString(),
+                                agv_qty = 1,
+                                StarQuantity = 0,
+                                EndQuantity = 0,//EmptyStation.quantity,
+                                agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(),
+                                agv_toaddress = "",
+                                agv_userid = UserContext.Current.UserName,
+                                agv_TrayStatus = station.tray_status,
+                                agv_Traytype = station.tray_type
+                            };
+                            agvtaskRepository.Add(agvtask, true);
 
+                            station.location_state = LocationStateEnum.Busy.ToString();
+                        }
+                        #endregion
+
+                        #region 鍒涘缓鍏ュ簱浠诲姟
+                        else if (station.location_state == LocationStateEnum.Stroge.ToString() && station.quantity > 0)
+                        {
+                            var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault();
+                            if (Work == null) throw new Exception($"鏈壘鍒拌揣浣峽station.stationCode}鐨勬満鍔犲伐宸ュ崟淇℃伅锛�");
+                            dt_agvtask agvtask = new dt_agvtask()
+                            {
+                                agv_fromaddress = station.stationCode,
+                                agv_id = Guid.NewGuid(),
+                                agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                                agv_grade = 1,
+                                agv_createtime = DateTime.Now,
+                                agv_taskstate = AGVTaskStateEnum.Queue.ToString(),
+                                agv_materielid = station.stationType,
+                                agv_qty = station.quantity,
+                                agv_tasktype = station.stationCode.Contains("3") ? AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString() : AGVTaskTypeEnum.TaskType_Inbound.ToString(),
+                                agv_toaddress = "",
+                                agv_userid = UserContext.Current.UserName,
+                                bindSN = station.bindSN,
+                                agv_worktype = Convert.ToInt32(Work.processCode),
+                                agv_materbarcode = Work.materialCode,
+                                agv_Traytype = station.tray_type,
+                                jobID = station.Number,
+                                agv_TrayStatus = station.tray_status
+                            };
+                            agvtaskRepository.Add(agvtask, true);
+
+                            station.location_state = LocationStateEnum.InBusy.ToString();
+                        }
+                        #endregion
+                    }
+
+                    station.tray_type = station.tray_type == TrayTypeEnum.SmallTray.ToString() ? TrayTypeEnum.LargeTray.ToString() : TrayTypeEnum.SmallTray.ToString();
+                    repository.Update(station, x => new { x.location_state, x.tray_type }, true);
+
+                    webResponse.OK(webResponse.Message += $"{station.stationCode}鍒囨崲鎴愬姛!");
+                }
+                catch (Exception ex)
+                {
+                    webResponse.Error(webResponse.Message += ex.Message);
+                }
             }
-            catch (Exception ex)
+            return webResponse;
+        }
+        /// <summary>
+        /// 涓嬫枡浠诲姟
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public WebResponseContent SendAGVTask(SaveModel saveModel)
+        {
+            WebResponseContent webResponse = new WebResponseContent();
+            VOLContext context = new VOLContext();
+            Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context);
+            IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
+            string completor = UserContext.Current.UserName;
+            foreach (var Key in saveModel.DelKeys)
             {
-
+                try
+                {
+                    var station = repository.Find(x => x.id.ToString() == Key.ToString()).FirstOrDefault();
+                    if (!station.stationCode.Contains("X")) throw new Exception($"鏃爗station.stationCode}浣跨敤鏉冮檺锛�");
+                    if (!station.enable) throw new Exception($"{station.stationCode}鏈惎鐢紒");
+                    if (station.location_state == LocationStateEnum.Abnormal.ToString()) throw new Exception($"{station.stationCode}鐘舵�佸紓甯革紒");
+                    if (station.location_state == LocationStateEnum.Empty.ToString()) throw new Exception($"{station.stationCode}鐘舵�佷负绌猴紒");
+                    if (station.tray_status == TrayStateEnum.EmptyTray.ToString()) throw new Exception($"{station.stationCode}涓虹┖鎵樼洏锛�");
+                    if (station.quantity < 1) throw new Exception($"{station.stationCode}鏁伴噺灏戜簬1锛�");
+                    if (station.remark == "妗佹灦涓嬫枡") throw new Exception($"{station.stationCode}妗佹灦姝e湪涓嬫枡锛�");
+                    //if (station.location_state.Contains("Busy")) throw new Exception($"{station.stationCode}鍗犵敤锛�");
+                    if (agvtaskRepository.Find(x => x.agv_fromaddress == station.stationCode || x.agv_fromaddress == station.stationCode).Any()) throw new Exception($"{station.stationCode}瀛樺湪浠诲姟锛�");
+                    var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault();
+                    if (Work == null) throw new Exception($"鏈壘鍒拌揣浣峽station.stationCode}鐨勬満鍔犲伐宸ュ崟淇℃伅锛�");
+                    dt_agvtask agvtask = new dt_agvtask()
+                    {
+                        agv_fromaddress = station.stationCode,
+                        agv_id = Guid.NewGuid(),
+                        agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+                        agv_grade = 1,
+                        agv_createtime = DateTime.Now,
+                        agv_taskstate = AGVTaskStateEnum.Queue.ToString(),
+                        agv_materielid = station.stationType,
+                        agv_qty = station.quantity,
+                        agv_tasktype = station.stationCode.Contains("3") ? AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString() : AGVTaskTypeEnum.TaskType_Inbound.ToString(),
+                        agv_toaddress = "",
+                        agv_userid = UserContext.Current.UserName,
+                        bindSN = station.bindSN,
+                        agv_worktype = Convert.ToInt32(Work.processCode),
+                        agv_materbarcode = Work.materialCode,
+                        agv_Traytype = station.tray_type,
+                        jobID = station.Number,
+                        agv_TrayStatus = station.tray_status
+                    };
+                    agvtaskRepository.Add(agvtask, true);
+                    station.location_state = LocationStateEnum.InBusy.ToString();
+                    repository.Update(station, x => new { x.location_state }, true);
+                    webResponse.OK(webResponse.Message += $"{station.stationCode}浠诲姟娣诲姞鎴愬姛!");
+                }
+                catch (Exception ex)
+                {
+                    webResponse.Error(webResponse.Message += ex.Message);
+                }
             }
             return webResponse;
         }
@@ -180,7 +325,7 @@
             WebResponseContent content = new WebResponseContent();
             VOLContext volContext = new VOLContext();
             Idt_stationinfoRepository dsta = new dt_stationinfoRepository(volContext);
-            string[] stationCodes = { "A","S", "X", "W", "DD","B", "C", "D01"};
+            string[] stationCodes = { "A", "S", "X", "W", "DD", "B", "C", "D01" };
             List<Tuple<List<dt_stationinfo>, int>> responseData = new List<Tuple<List<dt_stationinfo>, int>>();
             foreach (string code in stationCodes)
             {

--
Gitblit v1.9.3