From d44e3abf0d51cfea1ed7df510974d69458cf516d Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期三, 04 六月 2025 17:11:59 +0800
Subject: [PATCH] 印尼佳通半制品变更需求开发

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs |  735 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 564 insertions(+), 171 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
index 98b534f..7aa1587 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
@@ -1,4 +1,5 @@
-锘縰sing HH.WCS.Mobox3.YNJT_PT.device;
+锘縰sing HH.WCS.Mobox3.YNJT_PT.core;
+using HH.WCS.Mobox3.YNJT_PT.device;
 using HH.WCS.Mobox3.YNJT_PT.models;
 using HH.WCS.Mobox3.YNJT_PT.process;
 using HH.WCS.Mobox3.YNJT_PT.util;
@@ -11,10 +12,13 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Reflection;
+using System.Text.RegularExpressions;
 using System.Threading;
 using static HH.WCS.Mobox3.YNJT_PT.api.ApiModel;
 using static HH.WCS.Mobox3.YNJT_PT.api.OtherModel;
 using static HH.WCS.Mobox3.YNJT_PT.api.WmsController;
+using static HH.WCS.Mobox3.YNJT_PT.util.Settings;
+using static HH.WCS.Mobox3.YNJT_PT.wms.WMSHelper;
 using static System.Net.Mime.MediaTypeNames;
 
 namespace HH.WCS.Mobox3.YNJT_PT.api {
@@ -34,38 +38,29 @@
         {
             ResponseResult response = new ResponseResult();
             var container = ContainerHelper.GetCntr(model.rfid);
-            var location = LocationHelper.GetLoc(model.loc);
-            if (location != null)
+            if (container == null)
             {
-                if (container == null)
-                {
-                    ContainerHelper.AddCntr(model.rfid);
-                }
-
-                try
-                {
-                    OffLineRecord record = new OffLineRecord()
-                    {
-                        S_RFID = model.rfid,
-                        S_LOC = model.loc,
-                        N_IS_URGENT = model.isUrgent,
-                        T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                        N_IS_FULL = model.isFull,
-                        
-                    };
-                    WMSHelper.addOffLineRecord(record);
-                }
-                catch (Exception ex) 
-                {
-                    LogHelper.Info($"娣诲姞鎴愬瀷鏈轰笅绾胯褰曢敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WMS");
-                    response.code = 500;
-                    response.msg = "WMS绯荤粺鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳鎺掓煡闂";
-                }
+                ContainerHelper.AddCntr(model.rfid);
             }
-            else 
+
+            try
             {
-                response.code = 1;
-                response.msg = $"璐т綅锛歿model.loc}涓嶅瓨鍦�;
+                OffLineRecord record = new OffLineRecord()
+                {
+                    S_RFID = model.rfid,
+                    S_DEVICE_NO = model.S_DEVICE_NO,
+                    N_IS_URGENT = model.isUrgent,
+                    T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    N_IS_FULL = model.isFull,
+
+                };
+                WMSHelper.addOffLineRecord(record);
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"娣诲姞鎴愬瀷鏈轰笅绾胯褰曢敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WMS");
+                response.code = 500;
+                response.msg = "WMS绯荤粺鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳鎺掓煡闂";
             }
             return response;
         }
@@ -89,129 +84,78 @@
                     {
                         response.code = 1;
                         response.msg = "rfid涓嶈兘涓虹┖";
+                        return response;
                     }
                     else 
                     {
-                        Dictionary<BarcodeModel, bool> rfidDic = new Dictionary<BarcodeModel, bool>();
-                        foreach (var ext in extData)
+                        if (extData.Count > 0)
                         {
-                            string rfid = ext.rfid;
-                            if (rfid.Contains("ET"))
+                            List<BarcodeModel> barcodeList = new List<BarcodeModel>();
+                            foreach (var ext in extData)
                             {
-                                rfidDic.Add(ext, false);
-                            }
-                            else
-                            {
-                                // 1.鏌ヨ鎴愬瀷鏈轰腑闂磋〃锛宺fid 鏄惁瀛樺湪
-                                var offLineRecord = WMSHelper.getOffLineRecord(rfid);
-                                if (offLineRecord != null)
+                                string rfid = ext.rfid;
+                                if (rfid == "88888888")
                                 {
-                                    // 2.鏌ヨ鐗╂枡鏉$爜淇℃伅琛紝鏉$爜淇℃伅鏄惁瀛樺湪
-                                    var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
-                                    if (itemBarcodeInfo == null)
-                                    {
-                                        rfidDic.Add(ext, false);
-                                    }
-                                    else 
-                                    {
-                                        rfidDic.Add(ext, true);
-                                    }
+                                    // 璁板綍鎵樼洏寮傚父
+
                                 }
-                                else
+                                else 
                                 {
-                                    rfidDic.Add(ext, false);
-                                }
-                            }
-                        }
-
-                        // 鍒ゆ柇鏄惁鏈夊紓甯告墭鐩�-                        bool isNormal = rfidDic.Where(a => a.Value == false).Count() == 0;
-                        if (isNormal && extData.Count == 2)
-                        {
-                            // 鍙屾墭姝e父鏂欏叆搴�-                            Location endLoc = null;
-                            var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(extData[0].barcode);
-                            string groupNo = WMSHelper.GenerateTaskGroupNo();
-                            var endLocList  = WMSHelper.getInStockEndLoc(itemBarcodeInfo.ITEMCODE, 2);
-                            if (endLocList.Count == 2)
-                            {
-                                var rfidList = rfidDic.Keys.ToList();
-                                for (int i = 0; i < rfidList.Count; i++)
-                                {
-                                    endLoc = endLocList[i];
-                                    var wmsTask = new WMSTask()
+                                    // 鏌ヨ鎴愬瀷鏈轰腑闂磋〃锛宺fid 鏄惁瀛樺湪
+                                    var offLineRecord = WMSHelper.getOffLineRecord(rfid);
+                                    if (offLineRecord != null)
                                     {
-                                        S_CNTR_CODE = rfidList[i].rfid,
-                                        S_CODE = WMSHelper.GenerateTaskNo(),
-                                        S_START_LOC = startLoc.S_CODE,
-                                        S_START_AREA = startLoc.S_AREA_CODE,
-                                        S_END_LOC = endLoc.S_CODE,
-                                        S_END_AREA = endLoc.S_AREA_CODE,
-                                        S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟",
-                                        S_OP_DEF_CODE = model.reqId,
-                                        S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
-                                        N_PRIORITY = 1,
-                                        T_START_TIME = DateTime.Now,
-                                        S_GROUP_NO = groupNo,
-                                    };
-                                    if (WMSHelper.CreateWmsTask(wmsTask))
-                                    {
-                                        // 鍒涘缓涓�鍏ュ簱浠诲姟
-                                        WCSTask wcsTask = new WCSTask()
+                                        if (offLineRecord.N_IS_FULL == 1) 
                                         {
-                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                            S_OP_CODE = wmsTask.S_CODE,
-                                            S_CODE = WCSHelper.GenerateTaskNo(),
-                                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                            S_TYPE = wmsTask.S_TYPE,
-                                            S_START_LOC = startLoc.S_CODE,
-                                            S_START_AREA = startLoc.S_AREA_CODE,
-                                            S_END_LOC = endLoc.S_CODE,
-                                            S_END_AREA = endLoc.S_AREA_CODE,
-                                            S_SCHEDULE_TYPE = "WCS",
-                                            N_PRIORITY = 1,
-                                            T_START_TIME = DateTime.Now,
-                                        };
+                                            if (ext.barcode.Contains("99999999"))
+                                            {
+                                                // 璁板綍鏉$爜鎵弿寮傚父
 
-                                        if (WCSHelper.CreateTask(wcsTask))
-                                        {
-                                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                            }
+                                            else
+                                            {
+                                                // 2.鏌ヨ鐗╂枡鏉$爜淇℃伅琛紝鏉$爜淇℃伅鏄惁瀛樺湪
+                                                var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
+                                                if (itemBarcodeInfo != null)
+                                                {
+                                                    barcodeList.Add(ext);
+                                                }
+                                                else
+                                                {
+                                                   // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父
 
-                                            // 鏇存柊浣滀笟浠诲姟鐘舵�
-                                            wmsTask.N_B_STATE = 1;
-                                            WMSHelper.UpdateTaskState(wmsTask);
-
-                                            // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
-                                            WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE,itemBarcodeInfo);
+                                                }
+                                            }
                                         }
                                     }
                                 }
                             }
-                            else 
+
+                            EndLocGroup endLocGroup = null;
+                            if (barcodeList.Count > 0) 
                             {
-                                response.code = 1;
-                                response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
+                               endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count);
                             }
-                        }
-                        else 
-                        {
-                            // 寮傚父鏂欏嚭搴撴淇�鎴�鍗曟嫋鐗╂枡鍏ュ簱
-                            foreach (var dic in rfidDic) 
+
+                            foreach (var ext in extData)
                             {
-                                Location middleLoc = null;
                                 Location endLoc = null;
-                                if (dic.Value)
+                                string groupNo = null;
+                                if (barcodeList.Contains(ext))
                                 {
-                                    var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(dic.Key.barcode);
-                                    var endLocList = WMSHelper.getInStockEndLoc(itemBarcodeInfo.ITEMCODE, 1);
-                                    if (endLocList.Count == 1) 
+                                    // 婊℃枡鍏ュ簱
+                                    if (endLocGroup != null)
                                     {
-                                        endLoc = endLocList[0];
+                                        groupNo = endLocGroup.groupNo;
+                                        endLoc = endLocGroup.endLocList[0];
+                                        endLocGroup.endLocList.Remove(endLoc);
+                                    }
+
+                                    if (endLoc != null) 
+                                    {
                                         var wmsTask = new WMSTask()
                                         {
-                                            S_CNTR_CODE = dic.Key.rfid,
+                                            S_CNTR_CODE = ext.rfid,
                                             S_CODE = WMSHelper.GenerateTaskNo(),
                                             S_START_LOC = startLoc.S_CODE,
                                             S_START_AREA = startLoc.S_AREA_CODE,
@@ -222,6 +166,7 @@
                                             S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
                                             N_PRIORITY = 1,
                                             T_START_TIME = DateTime.Now,
+                                            S_GROUP_NO = groupNo,
                                         };
                                         if (WMSHelper.CreateWmsTask(wmsTask))
                                         {
@@ -253,63 +198,67 @@
                                                 WMSHelper.UpdateTaskState(wmsTask);
 
                                                 // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
+                                                var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
                                                 WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);
                                             }
                                         }
                                     }
-                                    else
-                                    {
-                                        response.code = 1;
-                                        response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
-                                    }
                                 }
-                                else 
+                                else
                                 {
-                                    middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�+                                    // 寮傚父鎵樼洏鎺掗櫎
+                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�                                     endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
-                                    var wmsTask = new WMSTask()
+                                    if (endLoc != null && middleLoc != null)
                                     {
-                                        S_CNTR_CODE = dic.Key.rfid,
-                                        S_CODE = WMSHelper.GenerateTaskNo(),
-                                        S_START_LOC = startLoc.S_CODE,
-                                        S_START_AREA = startLoc.S_AREA_CODE,
-                                        S_END_LOC = endLoc.S_CODE,
-                                        S_END_AREA = endLoc.S_AREA_CODE,
-                                        S_TYPE = "寮傚父鎵樼洏鍑哄簱浠诲姟",
-                                        S_OP_DEF_CODE = model.reqId,
-                                        S_OP_DEF_NAME = "寮傚父鎵樼洏鍑哄簱妫�慨",
-                                        N_PRIORITY = 1,
-                                        T_START_TIME = DateTime.Now,
-                                    };
-                                    if (WMSHelper.CreateWmsTask(wmsTask))
-                                    {
-                                        // 鍒涘缓涓�鍏ュ簱浠诲姟
-                                        WCSTask wcsTask = new WCSTask()
+                                        var wmsTask = new WMSTask()
                                         {
-                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                            S_OP_CODE = wmsTask.S_CODE,
-                                            S_CODE = WCSHelper.GenerateTaskNo(),
-                                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                            S_TYPE = wmsTask.S_TYPE,
+                                            S_CNTR_CODE = ext.rfid,
+                                            S_CODE = WMSHelper.GenerateTaskNo(),
                                             S_START_LOC = startLoc.S_CODE,
                                             S_START_AREA = startLoc.S_AREA_CODE,
-                                            S_END_LOC = middleLoc.S_CODE,
-                                            S_END_AREA = middleLoc.S_AREA_CODE,
-                                            S_SCHEDULE_TYPE = "WCS",
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_TYPE = "寮傚父鎵樼洏鍑哄簱浠诲姟",
+                                            S_OP_DEF_CODE = model.reqId,
+                                            S_OP_DEF_NAME = "寮傚父鎵樼洏鍑哄簱妫�慨",
                                             N_PRIORITY = 1,
                                             T_START_TIME = DateTime.Now,
                                         };
-
-                                        if (WCSHelper.CreateTask(wcsTask))
+                                        if (WMSHelper.CreateWmsTask(wmsTask))
                                         {
-                                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                            // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                            WCSTask wcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                                S_TYPE = wmsTask.S_TYPE,
+                                                S_START_LOC = startLoc.S_CODE,
+                                                S_START_AREA = startLoc.S_AREA_CODE,
+                                                S_END_LOC = middleLoc.S_CODE,
+                                                S_END_AREA = middleLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "WCS",
+                                                N_PRIORITY = 1,
+                                                T_START_TIME = DateTime.Now,
+                                            };
 
-                                            // 鏇存柊浣滀笟浠诲姟鐘舵�
-                                            wmsTask.N_B_STATE = 1;
-                                            WMSHelper.UpdateTaskState(wmsTask);
+                                            if (WCSHelper.CreateTask(wcsTask))
+                                            {
+                                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                                wmsTask.N_B_STATE = 1;
+                                                WMSHelper.UpdateTaskState(wmsTask);
+                                            }
                                         }
+                                    }
+                                    else 
+                                    {
+                                        LogHelper.Info("寮傚父鎵樼洏鎺掑嚭锛屾湭鑾峰彇寮傚父鎺掗櫎鎺ラ┏浣�, "WMS");
                                     }
                                 }
                             }
@@ -350,7 +299,9 @@
                     // 鍒ゆ柇rfid鏄惁寮傚父
                     if (model.cntrNo != wmsTask.S_CNTR_CODE)
                     {
-                        middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�+                        endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);
+                        var connectLoc = Settings.connectLocList.Where(a => a.roadway == endLoc.N_ROADWAY && a.type == 1).FirstOrDefault();
+                        middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
                         endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
                         wmsTask.S_END_LOC = endLoc.S_CODE;
                         wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
@@ -414,7 +365,449 @@
         {
             ResponseResult response = new ResponseResult();
 
+            //鍙傛暟鏍¢獙
+            if (model.locCodes.Count == 0) 
+            {
+                string msg = $"纭寲鏈猴細{model.mcn}鍛煎彨鑳氳儙鍑哄簱锛屽弬鏁版牎楠屽け璐ワ紝缂哄皯璐т綅淇℃伅";
+                LogHelper.Info(msg, "WMS");
+                response.code = 1;
+                response.msg = msg;
+                return response;
+            }
+
+            // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�+            WCSTask existTask = WCSHelper.GetTaskByEqNo(model.mcn);
+            if (existTask == null)
+            {
+                // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝
+                var currentTime = DateTime.Now;
+                var shift = getShift(currentTime.TimeOfDay);
+                var dateShift = DateTime.Now.ToString("dd/MM/yyyy");
+                TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00
+                if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start)
+                {
+                    dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy");
+                }
+
+                // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ鍛煎彨鐨勭墿鏂欑紪鐮併�棰勮鐢熶骇鏁伴噺
+                var productionShedule = WMSHelper.getProductionShedule(dateShift, model.mcn, shift);
+                if (productionShedule != null && productionShedule.QTY != 0)
+                {
+                    // 4.鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺
+                    int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, model.mcn, shift);
+
+                    if (productionShedule.QTY > finishNum)
+                    {
+                        // 5.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
+                        int locNum = model.locCodes.Count;
+                        var startLocData = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE,locNum);
+                        if (startLocData.startLocList != null && startLocData.startLocList.Count == locNum)
+                        {
+                            var startLocList = startLocData.startLocList;
+                            for (int i = 0; i < locNum; i++)
+                            {
+                                Location startLoc = startLocList[i];
+                                Location endLoc =  LocationHelper.GetLoc(model.locCodes[i]);
+                                if (endLoc != null) 
+                                {
+                                    var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                                    if (locCntrRels != null && locCntrRels.Count > 0) 
+                                    {
+                                        var wmsTask = new WMSTask()
+                                        {
+                                            S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                                            S_CODE = WMSHelper.GenerateTaskNo(),
+                                            S_START_LOC = startLoc.S_CODE,
+                                            S_START_AREA = startLoc.S_AREA_CODE,
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟",
+                                            S_OP_DEF_CODE = model.reqId,
+                                            S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
+                                            N_PRIORITY = 1,
+                                            T_START_TIME = DateTime.Now,
+                                            S_GROUP_NO = startLocData.groupNo,
+                                        };
+                                        if (WMSHelper.CreateWmsTask(wmsTask))
+                                        {
+                                            // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                            WCSTask wcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                                S_TYPE = wmsTask.S_TYPE,
+                                                S_START_LOC = startLoc.S_CODE,
+                                                S_START_AREA = startLoc.S_AREA_CODE,
+                                                S_END_LOC = endLoc.S_CODE,
+                                                S_END_AREA = endLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "WCS",
+                                                N_PRIORITY = 1,
+                                                T_START_TIME = DateTime.Now,
+                                            };
+
+                                            if (WCSHelper.CreateTask(wcsTask))
+                                            {
+                                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                                wmsTask.N_B_STATE = 1;
+                                                WMSHelper.UpdateTaskState(wmsTask);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        else 
+                        {
+                            string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�;
+                            LogHelper.Info(msg, "WMS");
+                            response.code = 1;
+                            response.msg = msg;
+                        }
+                    }
+                    else
+                    {
+                        string msg = $"纭寲鏈�{model.mcn}鐨勫綋鍓嶇彮娆′换鍔″凡瀹屾垚锛屽仠姝㈠彨鏂�;
+                        LogHelper.Info(msg, "WMS");
+                        response.code = 1;
+                        response.msg = msg;
+                    }
+                }
+            }
+            else 
+            {
+                string msg = $"纭寲鏈猴細{model.mcn}鐨勫瓨鍦ㄦ鍦ㄦ墽琛屼腑鐨勪换鍔★紝璇峰嬁閲嶅鍙枡";
+                LogHelper.Info(msg, "WMS");
+                response.code = 1;
+                response.msg = msg;
+            }
             return response;
+        }
+
+        /// <summary>
+        /// 绌烘墭鍏ュ簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult emptyTrayInStock(EmptyTrayInStockModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            Location startLoc = LocationHelper.GetLoc(model.startLoc);
+            var endLocGroup = WMSHelper.getInStockEndLoc(1);
+            if (endLocGroup.endLocList.Count == 1)
+            {
+                Location endLoc = endLocGroup.endLocList[0];
+                var wmsTask = new WMSTask()
+                {
+                    S_CNTR_CODE = model.trayCode,
+                    S_CODE = WMSHelper.GenerateTaskNo(),
+                    S_START_LOC = startLoc.S_CODE,
+                    S_START_AREA = startLoc.S_AREA_CODE,
+                    S_END_LOC = endLoc.S_CODE,
+                    S_END_AREA = endLoc.S_AREA_CODE,
+                    S_TYPE = "绌烘墭鍏ュ簱浠诲姟",
+                    S_OP_DEF_CODE = model.reqId,
+                    S_OP_DEF_NAME = "绌烘墭鐩樺洖搴撲换鍔�,
+                    N_PRIORITY = 1,
+                    T_START_TIME = DateTime.Now,
+                };
+                if (WMSHelper.CreateWmsTask(wmsTask))
+                {
+                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                        S_OP_CODE = wmsTask.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                        S_TYPE = wmsTask.S_TYPE,
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_SCHEDULE_TYPE = "WCS",
+                        N_PRIORITY = 1,
+                        T_START_TIME = DateTime.Now,
+                    };
+
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                        wmsTask.N_B_STATE = 1;
+                        WMSHelper.UpdateTaskState(wmsTask);
+                    }
+                }
+            }
+            else
+            {
+                response.code = 1;
+                response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
+            }
+            return response;
+        }
+
+        /// <summary>
+        /// 鍛煎彨绌烘墭鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public static ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            Location endLoc = LocationHelper.GetLoc(model.endLoc);
+            var startLocData = WMSHelper.getOutStockStartLoc(null, 1);
+            if (startLocData.startLocList != null && startLocData.startLocList.Count == 1)
+            {
+                Location startLoc = startLocData.startLocList[0];
+                if (endLoc != null)
+                {
+                    var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                    if (locCntrRels != null && locCntrRels.Count > 0)
+                    {
+                        var wmsTask = new WMSTask()
+                        {
+                            S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                            S_CODE = WMSHelper.GenerateTaskNo(),
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = endLoc.S_CODE,
+                            S_END_AREA = endLoc.S_AREA_CODE,
+                            S_TYPE = "鍛煎彨绌烘墭鍑哄簱",
+                            S_OP_DEF_CODE = model.reqId,
+                            S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱",
+                            N_PRIORITY = 1,
+                            T_START_TIME = DateTime.Now,
+                            S_GROUP_NO = startLocData.groupNo,
+                        };
+                        if (WMSHelper.CreateWmsTask(wmsTask))
+                        {
+                            // 鍒涘缓涓�鍏ュ簱浠诲姟
+                            WCSTask wcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                S_TYPE = wmsTask.S_TYPE,
+                                S_START_LOC = startLoc.S_CODE,
+                                S_START_AREA = startLoc.S_AREA_CODE,
+                                S_END_LOC = endLoc.S_CODE,
+                                S_END_AREA = endLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "WCS",
+                                N_PRIORITY = 1,
+                                T_START_TIME = DateTime.Now,
+                            };
+
+                            if (WCSHelper.CreateTask(wcsTask))
+                            {
+                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                wmsTask.N_B_STATE = 1;
+                                WMSHelper.UpdateTaskState(wmsTask);
+                            }
+                        }
+                    }
+                }
+            }
+            else
+            {
+                string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�;
+                LogHelper.Info(msg, "WMS");
+                responseResult.code = 1;
+                responseResult.msg = msg;
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鑳氳儙鎶芥鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public static ResponseResult embryoCheckOutStock(EmbryoCheckOutStockModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            var locCntrs = LocationHelper.GetLocCntrRelByCntr(model.trayCode);
+            if (locCntrs.Count == 1)
+            {
+                Location startLoc = LocationHelper.GetLoc(locCntrs[0].S_LOC_CODE);
+                var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY && a.type == 1).First();
+                Location middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
+                Location endLoc = LocationHelper.GetLoc("");
+                if (endLoc != null)
+                {
+                    var wmsTask = new WMSTask()
+                    {
+                        S_CNTR_CODE = model.trayCode,
+                        S_CODE = WMSHelper.GenerateTaskNo(),
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_TYPE = "鑳氳儙鎶芥鍑哄簱浠诲姟",
+                        S_OP_DEF_CODE = model.reqId,
+                        S_OP_DEF_NAME = "鑳氳儙鎶芥鍑哄簱鍑哄簱浠诲姟",
+                        N_PRIORITY = 1,
+                        T_START_TIME = DateTime.Now,
+                    };
+                    if (WMSHelper.CreateWmsTask(wmsTask))
+                    {
+                        // 鍒涘缓涓�鍏ュ簱浠诲姟
+                        WCSTask wcsTask = new WCSTask()
+                        {
+                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                            S_OP_CODE = wmsTask.S_CODE,
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                            S_TYPE = wmsTask.S_TYPE,
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = middleLoc.S_CODE,
+                            S_END_AREA = middleLoc.S_AREA_CODE,
+                            S_SCHEDULE_TYPE = "WCS",
+                            N_PRIORITY = 1,
+                            T_START_TIME = DateTime.Now,
+                        };
+
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                            wmsTask.N_B_STATE = 1;
+                            WMSHelper.UpdateTaskState(wmsTask);
+                        }
+                    }
+                }
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 寮傚父鎵樼洏鍥炲簱娴佺▼
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult anomalyTrayInStock(AnomalyTrayInStockModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            LocationHelper.UnBindingLoc(model.startLoc, new List<string>() { model.trayCode });
+            ContainerHelper.deleteCntrItemRelByCntr(model.trayCode);
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 浠诲姟鐘舵�鍥炴姤
+        /// 浠诲姟鐘舵� 1锛氬紑濮�鎵ц涓紱瀹屾垚锛�锛氬噯澶囧彇璐э紱4锛氬彇璐у畬鎴愶紱5锛氬噯澶囧嵏璐э紱6锛氬嵏璐у畬鎴愶紱7锛氬紓甯稿彇娑堬紱8锛氬己鍒跺畬鎴�+        /// 1.鏍规嵁浠诲姟鐘舵�鍥炴姤鏇存柊璐т綅鐘舵�銆佷换鍔$姸鎬�+        /// 2.鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+        /// 4.鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ReturnResult taskStatusFeedback(TaskStatusFeedbackModel model)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            WCSTask cst = WCSHelper.GetTask(model.taskNo);
+            if (cst != null)
+            {
+                bool isExist = WCSHelper.CheckActionRecordExist(cst.S_CODE, model.status);
+                if (!isExist)
+                {
+                    WMSTask mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
+                    if (mst != null)
+                    {
+                        switch (model.status)
+                        {
+                            case 1:
+                                WCSHelper.Begin(cst);
+                                break;
+                            case 2:
+                                WCSHelper.End(cst);
+                                break;
+                            case 3:
+                                WCSHelper.UpdateStatus(cst, "鍑嗗鍙栬揣");
+                                break;
+                            case 4:
+                                WCSHelper.UpdateStatus(cst, "鍙栬揣瀹屾垚");
+                                TaskProcess.OperateStatus(cst, 4);
+                                break;
+                            case 5:
+                                WCSHelper.UpdateStatus(cst, "鍑嗗鍗歌揣");
+                                break;
+                            case 6:
+                                WCSHelper.UpdateStatus(cst, "鍗歌揣瀹屾垚");
+                                TaskProcess.OperateStatus(cst, 6);
+                                break;
+                            case 7:
+                                WCSHelper.Cancel(cst);
+                                WCSHelper.UpdateStatus(cst, "鍙栨秷");
+                                TaskProcess.OperateStatus(cst, 7);
+                                break;
+                            case 8:
+                                WCSHelper.UpdateStatus(cst, "寮哄埗瀹屾垚");
+                                WCSHelper.End(cst);
+                                break;
+                        }
+                        // 娣诲姞WCS鍔ㄤ綔璁板綍
+                        WCSHelper.AddActionRecord(model.taskNo, model.status, model.deviceNo, model.loc);
+
+                        if (model.status == 2 || model.status == 8)
+                        {
+                            if (mst != null)
+                            {
+                                if (mst.N_B_STATE != 2)
+                                {
+                                    WCSCore.createLastTask(cst.S_END_LOC, mst);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鐝
+        /// </summary>
+        /// <param name="time"></param>
+        /// <returns></returns>
+        public static string getShift(TimeSpan time)
+        {
+            TimeSpan shiftI_Start = new TimeSpan(07, 00, 0);  // 07:00:00
+            TimeSpan shiftI_End = new TimeSpan(14, 59, 59);    // 14:59:59
+
+            TimeSpan shiftII_Start = new TimeSpan(15, 00, 0); // 15:00:00
+            TimeSpan shiftII_End = new TimeSpan(22, 59, 59);    // 22:59:59
+
+            TimeSpan shiftIII_Start = new TimeSpan(23, 00, 0); // 23:00:00
+            TimeSpan shiftIII_End = new TimeSpan(06, 59, 59);   // 06:59:59
+
+            // 鍒ゆ柇鏄惁鍦�Shift III锛堣法澶╅渶鐗规畩澶勭悊锛�+            bool isShiftIII = time >= shiftIII_Start || time <= shiftIII_End;
+
+            // 杩斿洖缁撴灉
+            if (time >= shiftI_Start && time <= shiftI_End)
+                return "I";
+            else if (time >= shiftII_Start && time <= shiftII_End)
+                return "II";
+            else if (isShiftIII)
+                return "III";
+            else
+                return "No shift"; // 鐞嗚涓婁笉浼氳Е鍙�         }
 
         public class readCodeFeedbackResponse
@@ -555,7 +948,7 @@
         public class OffLineModel
         {
             public string rfid { get; set; } // 鎵樼洏鍙�-            public string loc { get; set; } // 涓嬬嚎璐т綅
+            public string S_DEVICE_NO { get; set; } // 鏈哄彴鍙�             public int isUrgent { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級
             public int isFull { get; set; } // 鏄惁婊℃嫋 0.鍚�1.鏄�         }

--
Gitblit v1.9.1