From d0a265713fd18162f3a82bdcd22e267df7298c7b Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期一, 26 五月 2025 08:59:52 +0800
Subject: [PATCH] 印尼佳通-半制品代码逻辑优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs |  807 +++++++++++++++++++++++---------------------------------
 1 files changed, 334 insertions(+), 473 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs
index f4dc478..e2d0f97 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs
@@ -1,9 +1,11 @@
-锘縰sing HH.WCS.Mobox3.YNJT_PT.api;
+锘縰sing HH.WCS.Mobox3.YNJT_BZP_PT.models;
+using HH.WCS.Mobox3.YNJT_PT.api;
 using HH.WCS.Mobox3.YNJT_PT.models;
 using HH.WCS.Mobox3.YNJT_PT.models.other;
 using HH.WCS.Mobox3.YNJT_PT.util;
 using Newtonsoft.Json;
 using NLog.Fluent;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -23,10 +25,10 @@
             var date = DateTime.Now.ToString("yyMMdd");
             return $"OP{date}{id.ToString().PadLeft(4, '0')}";
         }
-        internal static string GenerateSortingNo() {
-            var id = SYSHelper.GetSerialNumber("鍒嗘嫞鍗�, "SO");
+        internal static string GenerateTaskGroupNo() {
+            var id = SYSHelper.GetSerialNumber("浠诲姟缁�, "GP");
             var date = DateTime.Now.ToString("yyMMdd");
-            return $"SO{date}{id.ToString().PadLeft(4, '0')}";
+            return $"GP{date}{id.ToString().PadLeft(4, '0')}";
         }
         internal static List<WMSTask> GetOperationListByState(string state) {
             var db = new SqlHelper<object>().GetInstance();
@@ -77,130 +79,9 @@
             return result;
         }
 
-        internal static bool CreateSortingOrder(List<string> list) {
-            var res = false;
-            //閬嶅巻鑾峰彇鍙戣揣鍗曪紝鐒跺悗鍒ゆ柇搴撳瓨锛屽鏋滃叏閮芥病搴撳瓨锛屽垯涓嶇敓鎴愬垎鎷e崟锛屽鏋滄湁鐢熸垚鍒嗘嫞鍗�-            //鏇存柊娉㈡鍗曪紝鍗充娇鍙湁涓�釜鍙戣揣鍗曚篃鏇存柊娉㈡鍗�-            var db = new SqlHelper<object>().GetInstance();
-            var sortingOrderNo = "";
-            SortingOrder sortingOrder = null;
-            try {
-                db.BeginTran();
-                list.ForEach(a => {
-                    var so = db.Queryable<ShippingOrder>().Includes(s => s.Details).Where(s => s.S_NO == a).First();
-                    //鍒ゆ柇搴撳瓨锛屽彧鏈夊凡缁忓叆搴撶殑鎵嶅彲浠ヨ绠楋紝鐮佺洏鐨勪笉绠楋紝鍏ュ簱鍚庡嚭搴撻�涓殑涔熻璁$畻锛岀爜鐩樺悗榛樿鍙緟鍏ュ簱锛屽叆搴撳悗鍙甯�-                    //鐢熸垚鍑哄簱浠诲姟锛屽彧鏈夋墭鐩樹綅缃湪绔嬪簱鎵嶉渶瑕佸垱寤哄嚭搴撲换鍔★紙鍏堝啓姝荤珛搴擄級
-                    //鍙湁鍏ㄩ儴鍒嗘嫞瀹屾垚鎵嶅厑璁稿洖搴擄紙涓�釜鎵樼洏鍙兘瀵瑰簲澶氫釜鍒嗘嫞鏄庣粏锛�+        
 
-                    //鏌ユ壘浠撳簱閲忚〃鍜屽簱鍖洪噺琛紝鍑哄簱鍗曢渶瑕佸畾浣嶄粨搴撳拰搴撳尯浜嗭紝鍑哄簱瀹氫綅鐗╃悊搴撳尯灏辫锛屽叆搴撳彲鑳界墿鏂欏簱鍖鸿繕瑕佸尯鍒嗛�杈戝簱鍖�-
-                    //鏆傛椂鍙煡浠撳簱閲忚〃锛堥噺琛ㄥ浣曢噸缃紝鏌ユ壘鎵�湁鏌ユ壘C_ENABLE=N鐨勶紝鍒ゆ柇濡傛灉鍦ㄤ粨搴撲腑锛屾敼鎴怸锛岀劧鍚庣粺璁★級
-
-                    //鐢熸垚鍒嗘嫞鍗曟椂鍊欏鍔犱粨搴撻噺琛ㄥ垎閰嶉噺锛岀敓鎴愬垎鎷e崟鏄庣粏鏃跺�锛屽鍔犲簱鍖洪噺琛ㄥ垎閰嶉噺
-                    if (so != null && so.Details.Count > 0) {
-                        var fail = true;
-                        for (int i = 0; i < so.Details.Count; i++) {
-                            var whi = db.Queryable<WHInventory>().Where(w => w.S_ITEM_CODE == so.Details[i].S_ITEM_CODE).First();
-                            if (whi != null && whi.F_QTY - whi.F_ALLOC_QTY > 0) {
-                                //鏈夎揣灏卞嚭
-                                float qty = whi.F_QTY - whi.F_ALLOC_QTY > so.Details[i].F_QTY ? so.Details[i].F_QTY : whi.F_QTY - whi.F_ALLOC_QTY;
-                                fail = false;
-                                //鏈夊彲鐢ㄥ簱瀛橈紝鐢熸垚鍒嗘嫞鍗�-                                if (sortingOrderNo == "") {
-                                    sortingOrderNo = GenerateSortingNo();
-                                    sortingOrder = new SortingOrder
-                                    {
-                                        S_NO = sortingOrderNo,
-                                        S_SHIPPING_NO = so.S_NO,
-                                        Composes = new List<SortingCompose>()
-                                    };
-                                    //鍒涘缓鍒嗘嫞鍗�-                                    db.Insertable(sortingOrder).ExecuteCommand();
-                                }
-                                else {
-                                    //鑾峰彇鏈�柊鍒嗘嫞鍗�-                                    sortingOrder = db.Queryable<SortingOrder>().Includes(s => s.Composes).Where(s => s.S_NO == sortingOrderNo).First();
-                                    //鏇存柊鍒嗘嫞鍗曚腑鐨勫彂璐у崟鍗曞彿
-                                    sortingOrder.S_SHIPPING_NO = sortingOrder.S_SHIPPING_NO + ";" + so.S_NO;
-                                    sortingOrder.T_MODIFY = DateTime.Now;
-                                    db.Updateable(sortingOrder).UpdateColumns(it => new { it.S_SHIPPING_NO, it.T_MODIFY }).ExecuteCommand();
-                                }
-                                //鏌ヨ鍒嗘嫞鍗曞瓙琛紙姝e父鎯呭喌杩橀渶瑕佸鍔犳壒娆″垽鏂級
-                                var soc = db.Queryable<SortingCompose>().Where(s => s.S_ITEM_CODE == so.Details[i].S_ITEM_CODE && s.S_SORTING_NO == sortingOrder.S_NO).First();
-                                if (soc == null) {
-                                    soc = new SortingCompose
-                                    {
-                                        S_ITEM_CODE = so.Details[i].S_ITEM_CODE,
-                                        S_SORTING_NO = sortingOrder.S_NO,
-                                        F_QTY = qty,
-                                        N_ROW_NO = sortingOrder.Composes.Count() + 1,
-                                        S_BATCH_NO = so.Details[i].S_BATCH_NO
-                                    };
-
-                                    //鍒涘缓鍒嗘嫞鍗曞瓙琛�-                                    db.Insertable(soc).ExecuteCommand();
-                                }
-                                else {
-                                    soc.F_QTY += qty;
-                                    soc.T_MODIFY = DateTime.Now;
-                                    //鏇存柊鍒嗘嫞鍗曞瓙琛�-                                    db.Updateable(soc).UpdateColumns(it => new { it.F_QTY, it.T_MODIFY }).ExecuteCommand();
-                                }
-                                //鏇存柊浠撳簱閲忚〃鍒嗛厤閲�-                                whi.F_ALLOC_QTY += qty;
-                                whi.T_MODIFY = DateTime.Now;
-                                db.Updateable(whi).UpdateColumns(it => new { it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand();
-                                //璺熸柊鍙戣揣鍗曞瓙琛ㄩ厤璐ф暟閲�-                                so.Details[i].F_ACC_D_QTY += qty;
-                                so.Details[i].T_MODIFY = DateTime.Now;
-                                db.Updateable(so.Details[i]).UpdateColumns(it => new { it.F_ACC_D_QTY, it.T_MODIFY }).ExecuteCommand();
-                            }
-
-                        }
-                        //鏇存柊鍙戣揣鍗曠姸鎬�-                        so.N_B_STATE = fail ? 5 : 1;
-                        if (fail) {
-                            so.S_NOTE = "娌℃湁搴撳瓨";
-                        }
-                        so.S_WAVE_CODE = sortingOrderNo;
-                        so.T_MODIFY = DateTime.Now;
-                        db.Updateable(so).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY, it.S_WAVE_CODE, it.S_NOTE }).ExecuteCommand();
-
-                    }
-
-
-                    //鏌ユ壘搴撳尯鍐呮墭鐩樼敓鎴愭墭鐩樻槑缁嗭紙鍖呮嫭鍒嗘嫞涓級鎬庝箞鍒ゆ柇搴撳唴锛熸煡鎵捐揣浣嶇粦瀹氾紵杩樻槸鎵樼洏涓婂姞鏍囪瘑姣旇緝濂斤紝濡傛灉鏄暣鎵樺嚭鐨勶紝鍒嗘嫞纭鍚庡幓鎺夊垎鎷f爣璇嗐�
-                    //1銆佸彧鏈夌爜鐩樺叆搴撳悗鐨勬墠闇�鍔犳爣璇嗭紝鍒嗘嫞鍥炵殑涓嶇敤锛屽垎鎷e洖鐨勬爣璇嗚繕鍦紝娌℃湁鍙樸�鍐欐鐮佺洏鍏ョ殑瀹屾垚鍚庡姞鏍囪瘑锛屾暣鎵樺垎鎷g殑鍘绘帀鏍囪瘑锛岄槻姝㈠悗闈㈤噸鏂扮爜鐩樿剰鏁版嵁
-                    //2銆佹垨鑰呭叧鑱旀煡璇㈠簱鍐呯殑锛屽彧缁欏垎鎷e嚭鐨勫姞鏍囪瘑锛屾瘡娆″垎鎷e洖鍐嶆妸鏍囪瘑娓呴櫎浜嗭紙濡傛灉涓嶆竻闄ゅ甫鏍囪瘑鐨勪細寰堝锛岃繕涓嶅鍏ㄩ儴鍔犳爣璇嗭級锛屾暣鎵樼殑娓呴櫎銆�-                    //缁煎悎閫夋嫨杩樻槸鏂规1锛岃繖鏍峰垱寤哄垎鎷f槑缁嗭紝鍙渶瑕佹墭鐩樼墿鏂欎袱琛ㄦ煡璇㈠氨鑳藉畾浣嶆墭鐩橈紙濡傛灉淇℃伅涓嶅噯锛屽彲浠ラ噸缃級锛屾柟妗�闇�璐т綅銆佹墭鐩樸�鐗╂枡涓夎〃鑱旀煡
-
-                    //鏆傛椂涓嶈搴撳尯锛屾爣璇嗙敤瀹瑰櫒琛�C_ENABLE 鏉ュ垽鏂紝琛ㄧず鑳戒笉鑳藉嚭搴�-
-                    //鎵ц鍒嗘嫞鍒涘缓浠诲姟锛岄亶鍘嗗垎鎷f槑缁嗕腑鐨勬墭鐩橈紝濡傛灉鍦ㄤ粨搴撳氨鍑哄簱锛屽鏋滀笉鍦ㄥ氨涓嶇敤鍑哄簱
-
-
-                });
-                //鍏ㄩ儴鍒嗘嫞鍗曠敓鎴愪箣鍚庡皢鍒嗘嫞鍗曠姸鎬佽缃负寮�閰嶈揣,娉㈡鍙蜂负鍙戣揣鍗�-                sortingOrder = db.Queryable<SortingOrder>().Where(s => s.S_NO == sortingOrderNo).First();
-                sortingOrder.N_B_STATE = 1;
-                sortingOrder.T_MODIFY = DateTime.Now;
-                db.Updateable(sortingOrder).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand();
-                db.CommitTran();
-                res = true;
-            }
-            catch (Exception ex) {
-                Console.WriteLine(ex.Message);
-                db.RollbackTran();
-            }
-            return res;
-
-        }
-
-        internal static List<SortingDetail> GetSortingDetailByCntr(string cntr) {
-            var db = new SqlHelper<object>().GetInstance();
-            var result = db.Queryable<SortingDetail>().Where(a => a.S_CNTR_CODE == cntr && a.N_B_STATE != 2).ToList();
-            return result;
-        }
+        
 
         internal static bool CreateWmsTask(WMSTask wmsTask) {
             try {
@@ -250,74 +131,7 @@
             var db = new SqlHelper<object>().GetInstance();
             return db.Queryable<WMSTask>().Where(a => a.S_CODE == code).First();
         }
-        /*
-        internal static void CreateSortingOrderDetail(string so_no) {
-            //鍒嗘嫞鍗曢厤璐�-            var db = new SqlHelper<object>().GetInstance();
-            var so = db.Queryable<SortingOrder>().Includes(a => a.Composes).Where(a => a.S_NO == so_no && (a.N_B_STATE == 1 || a.N_B_STATE == 20)).First();// 
-            if (so != null && so.Composes.Count > 0) {
-                db.BeginTran();
-                try {
-                    int rowNo = 1;
-                    so.Composes.ForEach(a => {
-                        //鎸夊垎鎷e崟瀛愯〃鍘婚厤璐э紝鏌ユ壘鍙敤鎵樼洏(鍏堟煡鎵�湁绗﹀悎鐨勶紝鍚庨潰鍐嶄紭鍖�
-                        var cirList = db.Queryable<CntrItemRel>().Includes(c => c.Cntr).Where(c => c.Cntr.C_ENABLE == "Y" && c.S_ITEM_CODE == a.S_ITEM_CODE && (c.F_QTY - c.F_ALLOC_QTY) > 0).OrderBy(c => c.T_CREATE).ToList();
-                        for (int i = 0; i < cirList.Count; i++) {
-                            var cir = cirList[i];
-                            var sd = new SortingDetail
-                            {
-                                N_ROW_NO = rowNo,
-                                S_BATCH_NO = a.S_BATCH_NO,
-                                S_ITEM_CODE = a.S_ITEM_CODE,
-                                S_CNTR_CODE = cir.S_CNTR_CODE,
-                                S_SORTING_NO = a.S_SORTING_NO
-                            };
-                            bool needBreak = false;
-                            if (cir.F_QTY - cir.F_ALLOC_QTY >= (a.F_QTY - a.F_ACC_S_QTY)) {
-                                //瀹瑰櫒鍙敤鏁伴噺澶т簬鍒嗘嫞鍗曞瓙琛ㄨ姹傜殑鏁伴噺锛岀敓鎴愬垎鎷f槑缁嗭紝鐒跺悗璺冲嚭寰幆
-                                sd.F_QTY = a.F_QTY - a.F_ACC_S_QTY;
-                                needBreak = true;
-                            }
-                            else {
-                                //鐢熸垚鍒嗘嫞鏄庣粏锛岀户缁垱寤�-                                sd.F_QTY = cir.F_QTY - cir.F_ALLOC_QTY;
-                            }
-                            db.Insertable(sd).ExecuteCommand();
-                            rowNo++;
-                            //鏇存柊瀹瑰櫒璐у搧琛ㄥ垎閰嶉噺
-                            cir.F_ALLOC_QTY += sd.F_QTY;
-                            cir.T_MODIFY = DateTime.Now;
-                            db.Updateable(cir).UpdateColumns(it => new { it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand();
-                            //鏇存柊鍒嗘嫞鍗曞瓙琛ㄧ殑閲�-                            a.F_ACC_S_QTY += sd.F_QTY;
-                            a.T_MODIFY = DateTime.Now;
-                            db.Updateable(cir).UpdateColumns(it => new { it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand();
-                            if (needBreak) {
-                                break;
-                            }
-                        }
-                    });
-                    //鍏ㄩ儴鍒嗘嫞鍗曞瓙琛ㄧ敓鎴愬垎鎷f槑缁嗭紝淇敼鍒嗘嫞鍗曠姸鎬佷负閰嶈揣瀹屾垚(鍙嶆浠撳簱鐨勮揣鑳介厤鐨勯兘閰嶅畬浜嗭紝闄ら潪鏁版嵁鏈夊紓甯�
-                    so.N_B_STATE = 2;
-                    so.T_MODIFY = DateTime.Now;
-                    db.Updateable(so).UpdateColumns(it => new { it.N_B_STATE, it.T_MODIFY }).ExecuteCommand();
-                    db.CommitTran();
-                }
-                catch (Exception ex) {
-                    Console.WriteLine(ex.Message);
-                    db.RollbackTran();
-                }
-            }
-        }
-        */
-        /// <summary>
-        /// 鑾峰彇寮�閰嶈揣鐨勫垎鎷e崟锛屼竴娆℃�鐢熸垚鍒嗘嫞鏄庣粏锛岄伩鍏嶇敓鎴愪竴鍗婂啀鐢熸垚锛屾墍浠ュ垱寤哄垎鎷f槑缁嗙殑鏃跺�鍔犱笂浜嬪姟
-        /// </summary>
-        /// <returns></returns>
-        internal static List<SortingOrder> GetWaitingSortingOrderList() {
-            var db = new SqlHelper<object>().GetInstance();
-            return db.Queryable<SortingOrder>().Includes(a => a.Composes).Where(a => a.N_B_STATE == 1 || a.N_B_STATE == 20).ToList();
-        }
+    
         /// <summary>
         /// 鑾峰彇閰嶈揣瀹屾垚鐨勫垎鎷e崟锛屾瘡涓垎鎷e崟鍗曠嫭鍒涘缓鍒嗘嫞浣滀笟
         /// </summary>
@@ -509,288 +323,335 @@
             return result;
         }
 
-        public static Location GetLocation4InEmptyRow()
+
+        // ----------------------------------------------- 鍗板凹浣抽� - 纭寲--------------------------------------------
+
+        /// <summary>
+        /// 娣诲姞鎴愬瀷鏈轰笅绾胯褰�+        /// </summary>
+        /// <param name="record"></param>
+        /// <returns></returns>
+        public static bool addOffLineRecord(OffLineRecord record) 
         {
-            Location result = null;
-            try
-            {
-                var db = new SqlHelper<object>().GetInstance();
-
-                #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
-                //Console.WriteLine("鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓");
-                //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
-                var list = db.Queryable<Location>().OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
-                //2.1 閫変竴涓┖鎺�-                for (int i = 0; i < list.Count; i++)
-                {
-                    var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == list[i].S_AREA_CODE && a.N_ROW == list[i].N_ROW && a.S_LOCK_STATE != "鏃�).First();
-                    if (list[i].N_LOCK_STATE == 0 && other == null)
-                    {
-                        //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
-                        var rowSumInfo = db.Queryable<Location>().Where(l => l.S_AREA_CODE == list[i].S_AREA_CODE && l.N_ROW == list[i].N_ROW && l.N_CURRENT_NUM != 0).Count();
-                        if (rowSumInfo == 0)
-                        {
-                            result = list[i];
-                            break;
-                        }
-                    }
-                }
-                #endregion
-
-                if (result != null && (!string.IsNullOrEmpty(result.C_ENABLE) && (result.C_ENABLE == "绂佺敤" || result.C_ENABLE == "N")))
-                {
-                    //绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�-                    Console.WriteLine("绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�);
-                    result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE == result.S_AREA_CODE && a.N_ROW == result.N_ROW && (string.IsNullOrEmpty(a.C_ENABLE) || (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N")) && a.N_COL > result.N_COL).First();
-                }
-            }
-            catch (Exception ex)
-            {
-
-                LogHelper.Error("GetLocation4InEmptyRow:" + ex.Message, ex);
-            }
-            return result;
-        }
-
-        internal static Location GetInstockEnd(string item)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            Location end = null;
-            // 鏌ヨ鐩稿悓鐗╂枡鐨勬帓鏄惁鏈夊彲鏀捐揣鐨勫簱浣�-            var listMaxCol = db.Queryable<Location>()
-                 .LeftJoin<LocCntrRel>((l, lc) => l.S_CODE == lc.S_LOC_CODE)
-                 .LeftJoin<CntrItemRel>((l, lc, ci) => lc.S_CNTR_CODE == ci.S_CNTR_CODE)
-                 .Where((l, lc, ci) => l.N_CURRENT_NUM > 0 && ci.S_ITEM_CODE == item && l.S_AREA_CODE != Settings.BufferArea)
-                 .OrderByDescending((l, lc, ci) => l.N_COL).Take(1).PartitionBy((l, lc, ci) => l.N_ROW).ToList();
-
-            foreach (var loc in listMaxCol)
-            {
-                //鎺掓湁閿佷篃鎺掗櫎
-                var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == loc.S_AREA_CODE && a.N_ROW == loc.N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).First();
-                if (other != null)
-                {
-                   continue;
-                }
-
-                end = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE == loc.S_AREA_CODE && a.N_ROW == loc.N_ROW && a.N_CURRENT_NUM < a.N_CAPACITY && (string.IsNullOrEmpty(a.C_ENABLE) || (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N")) && a.N_COL >= loc.N_COL).First();
-                if (end != null) { 
-                    return end;
-                }
-            }
-            // 濡傛灉娌℃湁锛屽垯闅忔満鏀剧┖鐨勬帓
-            if (end == null) {
-                end = GetLocation4InEmptyRow();
-            }
-            return end;
-        }
-
-        public static Location GetShiftStockStart(string area ,int row)
-        {
-            Location result = null;
-            try
-            {
-                // 1銆佹煡璇㈠綋鍓嶅簱鍖�鎺�鐗╂枡 鏈夋墭鐩樼殑璐т綅
-                var db = new SqlHelper<object>().GetInstance();
-                result = db.Queryable<Location>() 
-                    .Where(l => l.N_CURRENT_NUM > 0 && l.S_AREA_CODE == area && l.N_ROW == row && l.N_LOCK_STATE == 0 && (l.C_ENABLE != "绂佺敤" && l.C_ENABLE != "N"))
-                    .Includes(l => l.LocCntrRel, l => l.CntrItemRel)
-                    .OrderByDescending(l => l.N_COL)
-                    .First();
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Error("GetShiftStockStart:" + ex.Message, ex);
-            }
-            return result;
-        }
-
-        public static Location GetShiftStockStart(string area)
-        {
-            Location result = null;
-            try
-            {
-                // 1銆佹煡璇㈠綋鍓嶅簱鍖�鎺�鐗╂枡 鏈夋墭鐩樼殑璐т綅
-                var db = new SqlHelper<object>().GetInstance();
-                var listMaxCol = db.Queryable<Location>()
-                    .Where(l => l.N_CURRENT_NUM > 0 && l.S_AREA_CODE == area)
-                    .Includes(l => l.LocCntrRel, l => l.CntrItemRel)
-                    .OrderByDescending(l => l.N_COL)
-                    .Take(1)
-                    .PartitionBy(l => l.N_ROW)
-                    .ToList();
-
-                foreach (var loc in listMaxCol)
-                {
-                    //鎺掓湁閿佷篃鎺掗櫎
-                    var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == loc.S_AREA_CODE && a.N_ROW == loc.N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).First();
-                    if (other != null)
-                    {
-                        continue;
-                    }
-                    return loc;
-                }
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Error("GetShiftStockStart:" + ex.Message, ex);
-            }
-            return result;
-        }
-
-        public static bool isRowLock(Location location) {
-            var db = new SqlHelper<object>().GetInstance();
-            return  db.Queryable<Location>().Where(a => a.S_AREA_CODE == location.S_AREA_CODE && a.N_ROW == location.N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).Count() > 0;
-        }
-
-        public static Location GetShiftStockEnd(string area, int row)
-        {
-            Location result = null;
-
-            try
-            {
-                //1.0 鑾峰彇姣忎竴鎺掓渶澶х殑鍒�-                //1.1 鍒ゆ柇褰撳墠鏁伴噺鏄笉鏄弧鐨勶紝濡傛灉鏄弧鐨勫苟涓旀槸鏈�ぇ鍒楋紝闇�鎺掗櫎
-                var listMaxCol = new SqlHelper<Location>().GetInstance().Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
-                //1.1 鏌ュ埌鎵�湁鏈夋墭鐩樼殑鎺�
-                Console.WriteLine("鏌ュ埌鎵�湁鏈夋墭鐩樼殑鎺�");
-                var db = new SqlHelper<object>().GetInstance();
-                var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE == area && a.N_ROW == row).Includes(a => a.LocCntrRel, a => a.CntrItemRel).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
-                if (list.Count > 0)
-                {
-                    //1.2 鏌ユ壘鍏跺畠灏哄鏈夋墭鐩樻垨鑰呴攣瀹氱殑鎺�-                    for (int i = list.Count - 1; i >= 0; i--)
-                    {
-                        //鎺掗櫎宸茬粡閿佸畾鐨勮揣浣�鍜�鏀炬弧浜嗕笖鏄渶澶у垪鐨勮揣浣�-                        if (list[i].N_LOCK_STATE != 0 || (list[i].N_CURRENT_NUM == list[i].N_CAPACITY && listMaxCol.Count(a => a.S_CODE == list[i].S_CODE) > 0))
-                        {
-                            Console.WriteLine($"鎺掗櫎宸茬粡閿佸畾鐨勮揣浣�鍜�鏀炬弧浜嗕笖鏄渶澶у垪鐨勮揣浣�鎺抺list[i].N_ROW}");
-                            list.Remove(list[i]);
-                        }
-                        else
-                        {
-                            //鎺掓湁閿佷篃鎺掗櫎
-                            var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.S_LOCK_STATE != "鏃� && a.N_LOCK_STATE != 0).First();
-                            if (other != null)
-                            {
-                                Console.WriteLine($"鎺掗櫎鏈夐攣鐨勬帓{list[i].N_ROW}");
-                                list.Remove(list[i]);
-                            }
-                        }
-                    }
-                    Console.WriteLine($"鏈夋墭鐩樻帓鏁颁负{list.Count}");
-                    if (list.Count > 0)
-                    {
-
-                        //1.3 閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓
-                        Console.WriteLine("閬嶅巻鍒ゆ柇鐗╂枡绫诲瀷鏄惁鐩稿悓");
-                        for (int i = 0; i < list.Count; i++)
-                        {
-                            //todo 杩橀渶瑕佸垽鏂攣
-                            if (list[i].LocCntrRel != null && list[i].LocCntrRel.CntrItemRel != null)
-                            {
-                                if (list[i].N_CURRENT_NUM < list[i].N_CAPACITY)
-                                {
-                                    result = list[i];
-                                }
-                                else
-                                {
-                                    Console.WriteLine("閫夋嫨鍚庨潰绌轰綅");
-                                    result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.C_ENABLE == "Y").OrderBy(a => a.N_COL).First();
-                                }
-
-                                if (result != null)
-                                {
-                                    break;
-                                }
-                            }
-
-                        }
-                    }
-                }
-
-                if (result == null) 
-                {
-                    #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
-                    //Console.WriteLine("鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓");
-                    //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
-                    list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
-                    //2.1 閫変竴涓┖鎺�-                    for (int i = 0; i < list.Count; i++)
-                    {
-                        var other = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == list[i].N_ROW && a.S_LOCK_STATE != "鏃�).First();
-                        if (list[i].N_LOCK_STATE == 0 && other == null)
-                        {
-                            //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
-                            var rowSumInfo = db.Queryable<Location>().Where(l => l.S_AREA_CODE == area && l.N_ROW == list[i].N_ROW && l.N_CURRENT_NUM != 0).Count();
-                            if (rowSumInfo == 0)
-                            {
-                                result = list[i];
-                                break;
-                            }
-                        }
-                    }
-                    #endregion
-                }
-
-                if (result != null && (!string.IsNullOrEmpty(result.C_ENABLE) && (result.C_ENABLE == "绂佺敤" || result.C_ENABLE == "N")))
-                {
-                    //绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�-                    //Console.WriteLine("绂佺敤浜嗛�鎷╁悗闈竴涓揣浣�);
-                    result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE == area && a.N_ROW == result.N_ROW && (string.IsNullOrEmpty(a.C_ENABLE) || (a.C_ENABLE != "绂佺敤" && a.C_ENABLE != "N")) && a.N_COL > result.N_COL).First();
-                }
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Error("GetLocation4InFinish:" + ex.Message, ex);
-            }
-            return result;
-        }
-
-
-        public static List<Location> GetLocationList(string area , int row) { 
-            List<Location> result = new List<Location> ();
-            try {
-                var db = new SqlHelper<object>().GetInstance();
-                result = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area && a.N_ROW == row).Includes(a => a.LocCntrRel, a => a.CntrItemRel).ToList();
-            }
-            catch (Exception ex) {
-                    LogHelper.Error("GetLocationList:" + ex.Message, ex);
-            }
-            return result;
-        }
-
-        public static List<TN_YiKuDetail> getShiftOrderDetail(string orderNo = null) {
-            var db = new SqlHelper<object>().GetInstance();
-            List<TN_YiKuDetail> details = new List<TN_YiKuDetail>();
-            var orderList = db.Queryable<TN_YiKuOrder>().Where(a => a.S_B_STATE == "鎵ц").ToList();
-            foreach (var order in orderList)
-            {
-                var detail = db.Queryable<TN_YiKuDetail>().Where(a => order.S_NO == a.S_NO).First();
-                if (detail != null) 
-                {
-                    details.Add(detail);
-                }
-            }
-            return details;
-        }
-
-        public static bool updateShiftOrderDetail(TN_YiKuDetail detail) {
             bool result = false;
             var db = new SqlHelper<object>().GetInstance();
-            LogHelper.Info("绉诲簱瀹屾垚鏁伴噺鍙樻洿鍙傛暟锛� + JsonConvert.SerializeObject(detail), "TSSG");
-            result = db.Updateable<TN_YiKuDetail>()
-                .SetColumns(a => new TN_YiKuDetail() { N_COMPLETE_NUM = a.N_COMPLETE_NUM + 1 })
-                .Where(a => a.S_NO == detail.S_NO 
-                    && a.S_START_AREA == detail.S_START_AREA 
-                    && a.S_START_ROW == detail.S_START_ROW 
-                    && a.S_END_AREA == detail.S_END_AREA 
-                    && a.S_END_ROW == detail.S_END_ROW
-                    )
-                .ExecuteCommand() > 0;
+            var offLineRecord = db.Queryable<OffLineRecord>().Where(a => a.S_RFID == record.S_RFID).First();
+            if (offLineRecord != null)
+            {
+                offLineRecord.S_LOC = record.S_LOC;
+                offLineRecord.N_IS_URGENT = record.N_IS_URGENT;
+                offLineRecord.T_OFF_TIME = record.T_OFF_TIME;
+                offLineRecord.N_IS_FULL = record.N_IS_FULL;
+                result = db.Updateable(offLineRecord).ExecuteCommand() > 0;
+            }
+            else 
+            {
+                result = db.Insertable(record).ExecuteCommand() > 0;
+            }
+            return result;
+        }
 
-            var completeResult = db.Queryable<TN_YiKuDetail>().Where(a => a.S_NO == detail.S_NO && a.N_QTY > a.N_COMPLETE_NUM).Count() == 0;
-            if(completeResult) {
-                result = db.Updateable<TN_YiKuOrder>().SetColumns(a => new TN_YiKuOrder() { S_B_STATE = "瀹屾垚" }).Where(a => a.S_NO == detail.S_NO).ExecuteCommand() > 0;
+        /// <summary>
+        /// 鏌ヨ鎴愬瀷鏈轰笅绾胯褰�+        /// </summary>
+        /// <param name="rfid"></param>
+        /// <returns></returns>
+        public static OffLineRecord getOffLineRecord(string rfid) 
+        {
+            OffLineRecord offLineRecord = null;
+            var db = new SqlHelper<object>().GetInstance();
+            if (rfid != null)
+            {
+                offLineRecord = db.Queryable<OffLineRecord>().Where(a => a.S_RFID == rfid).First();
+            }
+            return offLineRecord;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鐗╂枡鏉$爜淇℃伅
+        /// </summary>
+        /// <param name="barcode"></param>
+        /// <returns></returns>
+        public static GreenTireInformation GetGreenTireInformation(string barcode) 
+        {
+            GreenTireInformation greenTireInformation = null;
+            var db = new SqlHelper<object>().GetInstance();
+            if (barcode != null)
+            {
+                greenTireInformation = db.Queryable<GreenTireInformation>().Where(a => a.BARCODE == barcode).First();
+            }
+            return greenTireInformation;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍏ュ簱缁堢偣璐т綅
+        /// </summary>
+        /// <param name="itemCode"></param>
+        /// <param name="locNum">1.鍗曡揣浣�2.鍙岃揣浣�/param>
+        /// <returns></returns>
+        public static List<Location> getInStockEndLoc(string itemCode, int locNum) 
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            List<Location> locations = new List<Location>();
+            // 1.鎸夊绉巼浠庡ぇ鍒板皬锛屽宸烽亾杩涜鎺掑簭
+            var roadwayOrderList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y")
+                .GroupBy(a => a.N_ROADWAY)
+                .Select(a => new { roadway = a.N_ROADWAY ,  num = SqlFunc.AggregateCount(a.S_CODE)})
+                .OrderByDescending(a => a.num)
+                .ToList();
+
+            // 鏌ヨ鍗曡揣浣�+            if (locNum == 1) 
+            {
+                foreach (var order in roadwayOrderList)
+                {
+                    // 1. 鏌ヨ1鍙疯揣浣嶆槸鍚︽湁鐩稿悓鐗╂枡,鏈夛紝鍒欐煡璇㈠搴旂殑2鍙疯揣浣嶆槸鍚︿负绌�+                    var oneLocList = db.Queryable<Location>()
+                        .LeftJoin<LocCntrRel>((a,b) => a.S_CODE == b.S_LOC_CODE)
+                        .LeftJoin<CntrItemRel>((a,b,c) => b.S_CNTR_CODE == c.S_CNTR_CODE)
+                        .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea 
+                                        && a.N_ROADWAY == order.roadway 
+                                        && a.N_COL % 2 == 1 
+                                        && a.N_CURRENT_NUM == 1 
+                                        && a.N_LOCK_STATE == 0 
+                                        && a.C_ENABLE == "Y"
+                                        && c.S_ITEM_CODE == itemCode
+                                        )
+                        .OrderBy(a => a.N_LAYER).OrderBy(a => a.N_COL)
+                        .ToList();
+                    if (oneLocList.Count > 0) 
+                    {
+                        foreach (var loc in oneLocList)
+                        {
+                            var twoLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
+                            if (twoLoc != null)
+                            {
+                                locations.Add(twoLoc);
+                                return locations;
+                            }
+                        }
+                    }
+
+                    // 2.鏌ヨ2鍙疯揣浣嶆槸鍚︽湁鐩稿悓鐗╂枡锛屾湁锛屽垯鏌ヨ瀵瑰簲鐨�鍙蜂綅鏄惁涓虹┖
+                    if (locations.Count == 0) 
+                    {
+                        var twoLocList = db.Queryable<Location>()
+                            .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                            .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE)
+                            .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea 
+                                            && a.N_ROADWAY == order.roadway
+                                            && a.N_COL % 2 == 0
+                                            && a.N_CURRENT_NUM == 1
+                                            && a.N_LOCK_STATE == 0
+                                            && a.C_ENABLE == "Y"
+                                            && c.S_ITEM_CODE == itemCode
+                                            )
+                            .OrderBy(a => a.N_LAYER).OrderBy(a => a.N_COL)
+                            .ToList();
+
+                        if (twoLocList.Count > 0)
+                        {
+                            foreach (var loc in twoLocList)
+                            {
+                                var oneLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
+                                if (oneLoc != null)
+                                {
+                                    locations.Add(oneLoc);
+                                    return locations;
+                                }
+                            }
+                        }
+                    }
+
+                    // 3.娌℃湁鐩稿悓鐗╂枡鐨�浼樺厛鏀剧鐢ㄨ揣浣嶆梺杈癸紙鍗曚竴璐т綅锛�+                    if (locations.Count == 0) 
+                    {
+                       var  disableLocList= db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.C_ENABLE == "N").OrderBy(a => a.N_LAYER).ToList();
+                        foreach (var loc in disableLocList) 
+                        {
+                            // 璐т綅涓�鍙蜂綅锛屽垯鏌ヨ瀵瑰簲浜屽彿浣嶆槸鍚︿负绌�+                            if (loc.N_LAYER % 2 == 1) 
+                            {
+                                var twoLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
+                                if (twoLoc != null) 
+                                {
+                                    locations.Add(twoLoc);
+                                    return locations;
+                                }
+                            }
+
+                            // 璐т綅涓�鍙蜂綅锛屽垯鏌ヨ瀵瑰簲涓�彿浣嶆槸鍚︿负绌�+                            if (loc.N_LAYER % 2 == 0) 
+                            {
+                                var oneLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
+                                if (oneLoc != null)
+                                {
+                                    locations.Add(oneLoc);
+                                    return locations;
+                                }
+                            }
+                        }
+                    }
+
+                    // 4.娌℃湁鐩稿悓鐗╂枡鐨勶紝涓旂鐢ㄨ揣浣嶆梺杈规病鏈夌┖璐т綅锛屽垯浼樺厛鏀�鍙蜂綅
+                    if (locations.Count == 0) 
+                    {
+                        oneLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_COL % 2 == 1 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => a.N_LAYER).OrderByDescending(a => a.N_COL).ToList();
+                        if (oneLocList.Count > 0) 
+                        {
+                            locations.Add(oneLocList[0]);
+                            return locations;
+                        }
+                    }
+                }
+            }
+
+            // 鏌ヨ鍙岃揣浣�+            if (locNum == 2) 
+            {
+                foreach (var order in roadwayOrderList) 
+                {
+                   var oneLocList = db.Queryable<Location>().Where( a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_COL % 2 == 1 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => a.N_LAYER).OrderBy(a => a.N_COL).ToList();
+                    foreach (var loc in oneLocList) 
+                    {
+                       var twoLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
+                        if (twoLoc != null)
+                        {
+                            locations.Add(loc);
+                            locations.Add(twoLoc);
+                            return locations;
+                        }
+                    }
+                }
+            }
+            return locations;
+        }
+
+        /// <summary>
+        /// 鏌ヨ寮傚父鍖虹┖璐т綅
+        /// </summary>
+        /// <param name="areaCode"></param>
+        public static Location getAbnormalAreaEmptyLoc(string areaCode) 
+        {
+            Location location = new Location();
+            var db = new SqlHelper<object>().GetInstance();
+            location = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_CURRENT_NUM == 0 && a.C_ENABLE == "Y" && a.N_LOCK_STATE == 0).First();
+            return location;
+        }
+
+        /// <summary>
+        /// 鏌ヨ宸烽亾浠诲姟鏈�皯鐨勬帴椹充綅
+        /// </summary>
+        /// <returns></returns>
+        public static Location getMinTaskMiddleLoc(int type) 
+        {
+            Location location = new Location();
+            var db = new SqlHelper<object>().GetInstance();
+            var roadwayGroup = db.Queryable<Location>()
+                .LeftJoin<WCSTask>((a,b) => a.S_CODE == b.S_END_LOC && b.N_B_STATE < 3)
+                .Where((a, b) => a.S_AREA_CODE == Settings.stockArea && b.S_CODE != null )
+                .GroupBy((a, b) => a.N_ROADWAY)
+                .Select( (a, b) => new { roadway = a.N_ROADWAY  , num = SqlFunc.AggregateDistinctCount(a.S_CODE)})
+                .OrderBy(a => a.num)
+                .ToList();
+
+            foreach (var item in roadwayGroup)
+            {
+                // 1.鏌ヨ宸烽亾鍐呯殑鍫嗗灈鏈虹姸鎬佹槸鍚︽甯�+
+                // 2.鏌ヨ鎺ラ┏浣�+                var connectLoc = Settings.connectLocList.Where(a => a.type == type && a.roadway == item.roadway).FirstOrDefault();
+                if (connectLoc != null) 
+                {
+                    location = LocationHelper.GetLoc(connectLoc.locCode);
+                    break;
+                }
+            }
+            return location;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅
+        /// </summary>
+        /// <param name="bc_entried"></param>
+        /// <returns></returns>
+        public static Overage getOverage(string bc_entried)
+        {
+
+            var db = new SqlHelper<object>().GetInstance();
+
+            // 鐩存帴鎵ц SQL锛堝弬鏁板寲鏌ヨ锛�+            var sql = "SELECT get_ovg_bar(@barcode, @mcngrp) AS overage_value";
+            var sql1 = "SELECT get_minhour_bar(@barcode, @mcngrp) AS overage_value";
+
+            // 浣跨敤鍖垮悕瀵硅薄浼犻�鍙傛暟
+            var ovg_bar = db.Ado.SqlQuery<int>(sql, new { barcode = bc_entried, mcngrp = "0" });
+            var minhour_bar = db.Ado.SqlQuery<float>(sql1, new { barcode = bc_entried, mcngrp = "0" });
+            if (ovg_bar.Count > 0 && minhour_bar.Count > 0)
+            {
+                Overage overage = new Overage()
+                {
+                    MINHOUR = minhour_bar[0],
+                    OVERAGE = ovg_bar[0]
+                };
+                return overage;
+            }
+            return null;
+        }
+
+        public static bool bindBarcodeItemInfo( string cntrCode,GreenTireInformation greenTireInformation) 
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrCode).First();
+            if (cntrItemRel == null)
+            {
+                var overage = getOverage(greenTireInformation.BARCODE);
+                DateTime txndate = DateTime.Parse(greenTireInformation.TXNDATE);
+                DateTime minTime = txndate.AddHours(overage.MINHOUR);
+                DateTime maxTime = txndate.AddDays(overage.OVERAGE);
+                cntrItemRel = new CntrItemRel()
+                {
+                    S_CG_ID = greenTireInformation.BARCODE,
+                    S_ITEM_CODE = greenTireInformation.ITEMCODE,
+                    S_CNTR_CODE = cntrCode,
+                    S_CELL_NO = greenTireInformation.TIRECODE,
+                    F_QTY = greenTireInformation.QTY,
+                    S_MCN = greenTireInformation.MCN,
+                    S_OPR = greenTireInformation.OPR,
+                    S_OPR02 = greenTireInformation.OPR02,
+                    S_OPR03 = greenTireInformation.OPR03,
+                    S_OPR04 = greenTireInformation.OPR04,
+                    S_WINDUP = greenTireInformation.WINDUP,
+                    S_TXNDATE = greenTireInformation.TXNDATE,
+                    S_DATE_SHIFT = greenTireInformation.DATE_SHIFT,
+                    S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                    S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                };
+                result = db.Insertable(cntrItemRel).ExecuteCommand() > 0;
+            }
+            else 
+            {
+                var overage = getOverage(greenTireInformation.BARCODE);
+                DateTime txndate = DateTime.Parse(greenTireInformation.TXNDATE);
+                DateTime minTime = txndate.AddHours(overage.MINHOUR);
+                DateTime maxTime = txndate.AddDays(overage.OVERAGE);
+                cntrItemRel.S_CG_ID = greenTireInformation.BARCODE;
+                cntrItemRel.S_ITEM_CODE = greenTireInformation.ITEMCODE;
+                cntrItemRel.S_CNTR_CODE = cntrCode;
+                cntrItemRel.S_CELL_NO = greenTireInformation.TIRECODE;
+                cntrItemRel.F_QTY = greenTireInformation.QTY;
+                cntrItemRel.S_MCN = greenTireInformation.MCN;
+                cntrItemRel.S_OPR = greenTireInformation.OPR;
+                cntrItemRel.S_OPR02 = greenTireInformation.OPR02;
+                cntrItemRel.S_OPR03 = greenTireInformation.OPR03;
+                cntrItemRel.S_OPR04 = greenTireInformation.OPR04;
+                cntrItemRel.S_WINDUP = greenTireInformation.WINDUP;
+                cntrItemRel.S_TXNDATE = greenTireInformation.TXNDATE;
+                cntrItemRel.S_DATE_SHIFT = greenTireInformation.DATE_SHIFT;
+                cntrItemRel.S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss");
+                cntrItemRel.S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss");
+                result = db.Updateable(cntrItemRel).ExecuteCommand() > 0;
             }
             return result;
         }

--
Gitblit v1.9.1