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.FJJT/wms/ContainerHelper.cs |  381 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 381 insertions(+), 0 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs
new file mode 100644
index 0000000..7b5c805
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs
@@ -0,0 +1,381 @@
+锘縰sing HH.WCS.Mobox3.FJJT.models.other;
+using HH.WCS.Mobox3.FJJT.util;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static HH.WCS.Mobox3.FJJT.dispatch.NDC;
+using static HH.WCS.Mobox3.FJJT.util.ExcetionHelper;
+
+namespace HH.WCS.Mobox3.FJJT.wms {
+    /// <summary>
+    /// 瀹瑰櫒甯姪绫�+    /// </summary>
+    internal class ContainerHelper {
+        internal static string GenerateCntrNo() {
+            var id = SYSHelper.GetSerialNumber("鎵樼洏鍙�, "TP");
+            var date = DateTime.Now.ToString("yyMMdd");
+            return $"TP{date}{id.ToString().PadLeft(4, '0')}";
+        }
+        /// <summary>
+        /// 鏍规嵁瀹瑰櫒绫诲瀷銆佺洰鐨勫湴銆佺姸鎬佹煡璇㈠鍣�+        /// </summary>
+        /// <param name="dest"></param>
+        /// <param name="cntrType"></param>
+        /// <param name="state"></param>
+        /// <returns></returns>
+        internal static List<Container> GetCntrListByPurpose(string dest, string cntrType, int state) {
+            //1.0 鏌ヨ揣浣嶅鍣ㄨ〃
+            var db = new SqlHelper<object>().GetInstance();
+            var list = db.Queryable<Container>().Where(a => a.S_DEST == dest && a.S_TYPE == cntrType && a.N_B_STATE == state).ToList();
+            return list;
+
+        }
+        /// <summary>
+        /// TN_ContainerHelper.test("4L澶╃劧姘寸瑁�鍏�, 50, "335ml涓滄柟鏍戝彾15鍏�, 30);
+        /// </summary>
+        /// <param name="item1"></param>
+        /// <param name="qty1"></param>
+        /// <param name="item2"></param>
+        /// <param name="qty2"></param>
+        //internal static void test(string item1, int qty1, string item2, int qty2) {
+        //    var db = new SqlHelper<object>().GetInstance();
+        //    var cntr = db.Queryable<TN_Container>().Includes(a => a.CntrItemRelList).
+        //        Where(a => a.CntrItemRelList.Count(b => b.S_ITEM_CODE == item1 && int.Parse(b.F_QTY) > qty1) > 0
+        //        && a.CntrItemRelList.Count(b => b.S_ITEM_CODE == item2 && int.Parse(b.F_QTY) > qty2) > 0).First();
+        //}
+
+        /// <summary>
+        /// 鍒ゆ柇瀹瑰櫒鏄惁鏈夌墿鏂欎俊鎭�+        /// </summary>
+        /// <param name="cntr"></param>
+        /// <returns></returns>
+        internal static bool CheckEmpty(string cntr) {
+            //1.0 鏌ヨ揣浣嶅鍣ㄨ〃
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LocCntrRel>().Count(a => a.S_LOC_CODE.Trim() == cntr) == 0;
+
+        }
+
+        /*internal static bool AddCntr(string cntrCode, string itemCode) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var TN_Container = new Container { S_CODE = cntrCode };
+            var cntrItemRel = new CntrItemRel { S_CNTR_CODE = cntrCode, S_ITEM_CODE = itemCode };
+            try {
+                db.BeginTran();
+
+                db.Insertable<Container>(TN_Container).ExecuteCommand();
+                db.Insertable<CntrItemRel>(cntrItemRel).ExecuteCommand();
+
+                db.CommitTran();
+                res = true;
+            }
+            catch (Exception ex) {
+                db.RollbackTran();
+
+            }
+            return res;
+        }*/
+
+        internal static bool AddCntr(string cntrCode ,int detallCount = 1)
+        {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var TN_Container = new Container { S_CODE = cntrCode ,N_DETAIL_COUNT = detallCount };
+            try
+            {
+                db.BeginTran();
+                var container = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntrCode).First();
+                if (container == null)
+                {
+                    db.Insertable<Container>(TN_Container).ExecuteCommand();
+                }
+                else 
+                {
+                    container.N_DETAIL_COUNT = detallCount;
+                    container.N_E_STATE = 0;
+                    db.Updateable(container).ExecuteCommand();
+                }
+                db.CommitTran();
+                res = true;
+            }
+            catch (Exception ex)
+            {
+                db.RollbackTran();
+                WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"娣诲姞瀹瑰櫒閿欒锛岄敊璇師鍥狅細{ex.Message}");
+                throw new BusinessException($"娣诲姞瀹瑰櫒閿欒锛岄敊璇師鍥狅細{ex.Message}");
+            }
+            return res;
+        }
+
+        internal static bool AddContainer(string cntrCode,int cntrType ,int detallCount = 0)
+        {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var TN_Container = new Container {  S_CODE = cntrCode, N_TYPE = cntrType,S_TYPE = Container.GetCntrType(cntrType),N_DETAIL_COUNT = detallCount };
+            try
+            {
+                db.BeginTran();
+                var container = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntrCode).First();
+                if (container == null)
+                {
+                    db.Insertable<Container>(TN_Container).ExecuteCommand();
+                }
+                else 
+                {
+                    container.N_DETAIL_COUNT = detallCount;
+                    container.N_E_STATE = 0;
+                    db.Updateable<Container>(container).ExecuteCommand();
+                }
+                db.CommitTran();
+                res = true;
+            }
+            catch (Exception ex)
+            {
+                db.RollbackTran();
+                WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"娣诲姞瀹瑰櫒閿欒锛岄敊璇師鍥狅細{ex.Message}");
+                throw new BusinessException($"娣诲姞瀹瑰櫒閿欒锛岄敊璇師鍥狅細{ex.Message}");
+            }
+            return res;
+        }
+
+        /// <summary>
+        /// 鏍规嵁瀹瑰櫒鍙疯幏鍙栧鍣ㄤ俊鎭�+        /// </summary>
+        /// <param name="cntr"></param>
+        /// <param name="create"></param>
+        /// <returns></returns>
+        internal static Container GetCntr(string cntr, bool create = false) {
+            //1.0 鏌ヨ揣浣嶅鍣ㄨ〃
+            var db = new SqlHelper<object>().GetInstance();
+            var old = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntr).First();
+            if (old == null && create) {
+                var model = new Container { S_CODE = cntr };
+                if (db.Insertable(model).ExecuteCommand() > 0) {
+                    old = model;
+                }
+            }
+            return old;
+        }
+
+        /// <summary>
+        /// 鏍规嵁瀹瑰櫒鑾峰彇鐗╂枡淇℃伅
+        /// </summary>
+        /// <param name="cntr"></param>
+        /// <returns></returns>
+        internal static List<CntrItemRel> GetCntrItemRel(string cntr) {
+            var db = new SqlHelper<object>().GetInstance();
+            var list = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr).ToList();
+            return list;
+        }
+
+        /// <summary>
+        /// 鏇存柊瀹瑰櫒鐗╂枡淇℃伅
+        /// </summary>
+        /// <param name="cntrItem"></param>
+        /// <returns></returns>
+        internal static bool updateCntrItemRel(CntrItemRel cntrItem)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Updateable(cntrItem).ExecuteCommand()>0;
+        }
+
+        /// <summary>
+        /// 鐗╂枡淇℃伅缁戝畾鍒版弧瀹瑰櫒涓�+        /// </summary>
+        /// <param name="cntrCode"></param>
+        /// <param name="itemCode"></param>
+        /// <param name="batchNo"></param>
+        /// <param name="qty"></param>
+        /// <returns></returns>
+        internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            try {
+                db.BeginTran();
+                //1.鏌ョ湅鏄惁鏈夌浉鍚岀墿鏂欐壒娆$殑淇℃伅锛屽鏋滄湁瑕佺疮鍔狅紝涓嶅悓鎵规鐨勫彲浠ュ垎寮�+                var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First();
+                if (cir != null) {
+                    cir.F_QTY += qty;
+                    db.Updateable(cir).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
+                }
+                else {
+                    //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�+                    cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode };
+                    db.Insertable<CntrItemRel>(cir).ExecuteCommand();
+                }
+                var count = db.Queryable<CntrItemRel>().Count(a => a.S_CNTR_CODE == cntr.S_CODE);
+                cntr.N_DETAIL_COUNT = count;
+                cntr.C_ENABLE = "N";//鐮佺洏鍚庡皢鎵樼洏璁剧疆涓轰笉鍙敤鐘舵�锛屽叆搴撳悗鍙樻垚鍙敤
+                db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand();
+
+                db.CommitTran();
+                res = true;
+            }
+            catch (Exception ex) {
+                db.RollbackTran();
+                Console.WriteLine(ex.Message);
+            }
+
+            return res;
+        }
+
+        /// <summary>
+        /// 鐗╂枡淇℃伅缁戝畾鍒版弧瀹瑰櫒涓�+        /// </summary>
+        /// <param name="cntrCode"></param>
+        /// <param name="itemCode"></param>
+        /// <param name="batchNo"></param>
+        /// <param name="qty"></param>
+        /// <param name="purpose">瀹瑰櫒鐢ㄩ�锛岀敤浜庡摢涓嚎杈硅繕鏄洰鐨勭偣</param>
+        /// <returns></returns>
+        internal static bool BindCntrItemSingle(Container cntr, string itemCode, string batchNo, float qty) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            try {
+                db.BeginTran();
+                db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand();
+                //1.灏嗗師鏈夊鍣ㄧ墿鏂欎俊鎭垹闄�+                db.Deleteable<CntrItemRel>().Where(it => it.S_CNTR_CODE == cntr.S_CODE.Trim()).ExecuteCommand();
+                //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�+                var cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode };
+                db.Insertable<CntrItemRel>(cir).ExecuteCommand();
+
+                db.CommitTran();
+                res = true;
+            }
+            catch (Exception ex) {
+                db.RollbackTran();
+            }
+
+            return res;
+        }
+        /// <summary>
+        /// 鏍规嵁瀹瑰櫒鏉ユ簮鍜岀姸鎬佽幏鍙栨墭鐩�+        /// </summary>
+        /// <param name="src"></param>
+        /// <param name="state"></param>
+        /// <returns></returns>
+        internal static List<Container> GetCntr(string dest, int state, string cntrType = "") {
+            var db = new SqlHelper<object>().GetInstance();
+            if (cntrType == "") {
+                return db.Queryable<Container>().Where(a => a.S_DEST == dest && a.N_B_STATE == state).ToList();
+            }
+            else {
+                return db.Queryable<Container>().Where(a => a.S_DEST == dest && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList();
+            }
+        }
+        internal static bool UpdateCntr(List<string> cntrs, string dest, int state) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
+            if (models.Count > 0) {
+                models.ForEach(a => {
+                    a.S_DEST = dest; a.N_B_STATE = state;
+                    db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_STATE }).ExecuteCommand();
+                });
+                res = true;
+            }
+            return res;
+        }
+
+        internal static bool UpdateCntr(Container container)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Updateable(container).ExecuteCommand()>0;
+        }
+
+        internal static bool UpdateCntrDest(List<string> cntrs, string dest) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
+            if (models.Count > 0) {
+                models.ForEach(a => {
+                    a.S_DEST = dest;
+                    db.Updateable(a).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand();
+                });
+                res = true;
+            }
+            return res;
+        }
+        /// <summary>
+        /// 鏇存柊鎵樼洏鏉ユ簮
+        /// </summary>
+        /// <param name="cntr"></param>
+        /// <param name="src"></param>
+        /// <returns></returns>
+        internal static bool UpdateCntrSrc(string cntr, string src) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var model = db.Queryable<Container>().Where(a => a.S_CODE == cntr).First();
+            if (model != null) {
+                model.S_SRC = src;
+                model.T_MODIFY = DateTime.Now;
+                res = db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.T_MODIFY }).ExecuteCommand() > 0;
+            }
+            return res;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="cntrCode"></param>
+        /// <param name="state">鎵樼洏寮傚父鐘舵�  0.榛樿 1.WCS璇荤爜寮傚父 2.AGV璇荤爜鍣ㄨ鐮佸紓甯�/param>
+        /// <param name="errMsg">寮傚父淇℃伅</param>
+        /// <returns></returns>
+        internal static bool UpdateCntrState(string cntrCode, int state ,string errMsg) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var models = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == cntrCode).ToList();
+            if (models.Count > 0) {
+                models.ForEach(a => {
+                    a.N_E_STATE = state;
+                    a.S_ERR_DESC = errMsg;
+                    db.Updateable(a).UpdateColumns(it => new { it.N_E_STATE,it.S_ERR_DESC }).ExecuteCommand();
+                });
+                res = true;
+            }
+            return res;
+        }
+
+        internal static bool UpdateCntr(List<string> cntrs, string src, string dest, int state) {
+            var res = false;
+            var db = new SqlHelper<object>().GetInstance();
+            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
+            if (models.Count > 0) {
+                models.ForEach(a => {
+                    a.S_DEST = dest; a.N_B_STATE = state; 
+                    db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_STATE, it.S_SRC }).ExecuteCommand();
+                });
+                res = true;
+            }
+            return res;
+        }
+        public static bool ClearCntrInfo(string cntr) {
+
+            var db = new SqlHelper<object>().GetInstance();
+            var model = db.Queryable<Container>().Where(a => a.S_CODE == cntr).First();
+            if (model != null) {
+                model.S_SRC = "";
+                model.S_DEST = "";
+                model.N_B_STATE = 0;
+                model.T_MODIFY = DateTime.Now;
+
+            }
+            db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.S_DEST, it.N_B_STATE, it.T_MODIFY }).ExecuteCommand();
+            return db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE.Trim() == cntr.Trim()).ExecuteCommand() > 0;
+        }
+        internal static List<Container> GetCntrBySrc(string src, int state, string cntrType = "") {
+            var db = new SqlHelper<object>().GetInstance();
+            if (cntrType == "") {
+                return db.Queryable<Container>().Where(a => a.S_SRC == src && a.N_B_STATE == state).ToList();
+            }
+            else {
+                return db.Queryable<Container>().Where(a => a.S_SRC == src && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList();
+            }
+        }
+   
+    }
+}

--
Gitblit v1.9.1