From a619299816f2f632c7c6ba3a1bb869e2c212797d Mon Sep 17 00:00:00 2001
From: fcx <2246384483@qq.com>
Date: 星期五, 19 十二月 2025 14:12:33 +0800
Subject: [PATCH] 对添加巡检单物料编码进行去重

---
 StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs |  281 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 237 insertions(+), 44 deletions(-)

diff --git a/StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs b/StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs
index 7acaa01..4aca56d 100644
--- a/StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs
+++ b/StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs
@@ -47,7 +47,7 @@
             //    "                        left join mes_items s on s.id = C.daa002" +
             //    "                       where WORKSNO='" + id + "' and DAA018='宸插紑宸�'  order by DAA016 asc";
             //var sql1 = "select DAA001 tickeNo, s.ITEM_NO itemNo, s.ITEM_NAME itemName, s.ITEM_MODEL itemModel, DAA008 plannedNum\r\nfrom  WOMDAA C\r\n         left join mes_items s on s.id = C.daa002\r\nleft join womcaa A on A.caa001=C.daa021\r\nwhere C.DAA015 = '" + LineId + "'\r\n  and DAA018 = '宸插紑宸�' and A.CAA023='2'\r\norder by DAA016 asc";
-            var sql1 = "select DAA001 tickeNo, s.ITEM_NO itemNo, s.ITEM_NAME itemName, s.ITEM_MODEL itemModel, DAA008 plannedNum\r\nfrom  WOMDAA C\r\n         left join mes_items s on s.id = C.daa002\r\nleft join womcaa A on A.caa001=C.daa021\r\nleft join MESPROJECT_LIKE_CCLOGIN pr1 on A.PROJECT=pr1.PROJECT_ID\r\nleft join MESLINE_LIKE_CCLOGIN_WORKS2 pr2 on pr1.id=pr2.LOGINID\r\nwhere C.DAA015 = '" + LineId + "' and pr2.WORKSNO='"+ LoginId + "'\r\n  and DAA018 = '宸插紑宸�' and A.CAA023='2'\r\norder by DAA016 asc";
+            var sql1 = "select DAA001 tickeNo, s.ITEM_NO itemNo, s.ITEM_NAME itemName, s.ITEM_MODEL itemModel, DAA008 plannedNum\r\nfrom  WOMDAA C\r\n         left join mes_items s on s.id = C.daa002\r\nleft join womcaa A on A.caa001=C.daa021\r\nleft join MESPROJECT_LIKE_CCLOGIN pr1 on A.PROJECT=pr1.PROJECT_ID\r\nleft join MESLINE_LIKE_CCLOGIN_WORKS2 pr2 on pr1.id=pr2.LOGINID\r\nwhere C.DAA015 = '" + LineId + "' and pr2.WORKSNO='"+ LoginId + "'\r\n  and DAA018 = '宸插紑宸�' and A.CAA023='2' and nvl(a.ISCANCEL,0) <>1 \r\norder by DAA016 asc";
             return SQLHelper.ExecuteQuery(sql1);
         }
 
@@ -222,25 +222,38 @@
             try
             {
                 // 1. 涓昏〃鎻掑叆
-                var sql1 = @"
-            INSERT INTO MES_SN_STATUS_DETAILS
-               (ID, TICKET_NO, SN_NO, WORKSTATION_NO, SN_STATE, LOGIN_ID, TURNOVER_CODE)
-               VALUES (SEQ_MES_SN_STATUS_DETAILS_ID.NEXTVAL,
-                       :ticketNo,
-                       :snNo,
-                       :workstationNo,
-                       :snState,
-                       :loginId,
-                       :turnoverCode)";
+                //    var sql1 = @"
+                //INSERT INTO MES_SN_STATUS_DETAILS
+                //   (ID, TICKET_NO, SN_NO, WORKSTATION_NO, SN_STATE, LOGIN_ID, TURNOVER_CODE,LINE_NO)
+                //   VALUES (SEQ_MES_SN_STATUS_DETAILS_ID.NEXTVAL,
+                //           :ticketNo,
+                //           :snNo,
+                //           :workstationNo,
+                //           :snState,
+                //           :loginId,
+                //           :turnoverCode,select nvl(DAA015,'') from WOMDAA where DAA001 = ':ticketNo' and ROWNUM=1)";
 
+                // 1. 涓昏〃鎻掑叆
+                var sql1 = @"
+             INSERT INTO MES_SN_STATUS_DETAILS
+                   (ID, TICKET_NO, SN_NO, WORKSTATION_NO, SN_STATE, LOGIN_ID, TURNOVER_CODE, LINE_NO) values (
+             SEQ_MES_SN_STATUS_DETAILS_ID.NEXTVAL,
+                   :ticketNo,
+                   :snNo,
+                   :workstationNo,
+                   :snState,
+                   :loginId,
+                   :turnoverCode,
+                   :LINE_NO)";
                 var parameters1 = new[]
                 {
-            new OracleParameter(":ticketNo", asnInfo.tickeNo ?? (object)DBNull.Value),
-            new OracleParameter(":snNo", asnInfo.snNo ?? (object)DBNull.Value),
-            new OracleParameter(":workstationNo", asnInfo.workstationNo ?? (object)DBNull.Value),
-            new OracleParameter(":snState", asnInfo.snState ?? (object)DBNull.Value),
-            new OracleParameter(":loginId", asnInfo.loginId ?? (object)DBNull.Value),
-            new OracleParameter(":turnoverCode", asnInfo.turnoverCode ?? (object)DBNull.Value)
+            new OracleParameter("ticketNo", asnInfo.tickeNo ?? (object)DBNull.Value),
+            new OracleParameter("snNo", asnInfo.snNo ?? (object)DBNull.Value),
+            new OracleParameter("workstationNo", asnInfo.workstationNo ?? (object)DBNull.Value),
+            new OracleParameter("snState", asnInfo.snState ?? (object)DBNull.Value),
+            new OracleParameter("loginId", asnInfo.loginId ?? (object)DBNull.Value),
+            new OracleParameter("turnoverCode", asnInfo.turnoverCode ?? (object)DBNull.Value),
+            new OracleParameter("LINE_NO", asnInfo.lineNo ?? (object)DBNull.Value)
         };
 
                 int i = sqlHelper.ExecuteNonQueryWithTransaction(sql1, parameters1, connection, transaction);
@@ -264,11 +277,11 @@
 
                         var parameters2 = new[]
                         {
-                    new OracleParameter(":defectIssue", item.DefectIssue ?? (object)DBNull.Value),
-                    new OracleParameter(":rootCause", item.RootCause ?? (object)DBNull.Value),
-                    new OracleParameter(":repairMethod", item.RepairMethod ?? (object)DBNull.Value),
-                    new OracleParameter(":materialHandling", item.MaterialHandling ?? (object)DBNull.Value),
-                    new OracleParameter(":loginId", asnInfo.loginId ?? (object)DBNull.Value)
+                    new OracleParameter("defectIssue", item.DefectIssue ?? (object)DBNull.Value),
+                    new OracleParameter("rootCause", item.RootCause ?? (object)DBNull.Value),
+                    new OracleParameter("repairMethod", item.RepairMethod ?? (object)DBNull.Value),
+                    new OracleParameter("materialHandling", item.MaterialHandling ?? (object)DBNull.Value),
+                    new OracleParameter("loginId", asnInfo.loginId ?? (object)DBNull.Value)
                 };
 
                         sqlHelper.ExecuteNonQueryWithTransaction(sql2, parameters2, connection, transaction);
@@ -289,7 +302,7 @@
                         {
                             // 鏍¢獙
                             var checkSql = "SELECT COUNT(1) FROM MES_SN_PART_BINDING WHERE PART_SN_NO = :partSn";
-                            var checkParams = new[] { new OracleParameter(":partSn", partSn ?? (object)DBNull.Value) };
+                            var checkParams = new[] { new OracleParameter("partSn", partSn ?? (object)DBNull.Value) };
                             var exists = Convert.ToInt32(sqlHelper.ExecuteScalarWithTransaction(connection, transaction, checkSql, checkParams));
 
                             if (exists > 0)
@@ -299,24 +312,25 @@
 
                             // 鎻掑叆缁戝畾
                             var sqlBind = @"
-                        INSERT INTO MES_SN_PART_BINDING
-                           (ID, SN_NO, PART_SN_NO, PART_NAME_CN, CREATE_DATE, CREATE_USER)
-                           VALUES (SEQ_MES_SN_PART_BINDING.NEXTVAL,
-                                   :snNo,
-                                   :partSn,
-                                   :partName,
-                                   SYSDATE,
-                                   :user)";
+    INSERT INTO MES_SN_PART_BINDING
+       (ID, SN_NO, PART_SN_NO, PART_NAME_CN, CREATE_DATE, CREATE_USER)
+       VALUES (SEQ_MES_SN_PART_BINDING.NEXTVAL,
+               :snNo,
+               :partSn,
+               :partName,
+               SYSDATE,
+               :createUser)";
 
                             var bindParams = new[]
                             {
-                        new OracleParameter(":snNo", snNo ?? (object)DBNull.Value),
-                        new OracleParameter(":partSn", partSn ?? (object)DBNull.Value),
-                        new OracleParameter(":partName", partName ?? (object)DBNull.Value),
-                        new OracleParameter(":user", user ?? (object)DBNull.Value)
-                    };
+    new OracleParameter("snNo", snNo ?? (object)DBNull.Value),
+    new OracleParameter("partSn", partSn ?? (object)DBNull.Value),
+    new OracleParameter("partName", partName ?? (object)DBNull.Value),
+    new OracleParameter("createUser", user ?? (object)DBNull.Value)
+};
 
                             sqlHelper.ExecuteNonQueryWithTransaction(sqlBind, bindParams, connection, transaction);
+
 
                             // 鎻掑叆鏃ュ織
                             var sqlLog = @"
@@ -327,7 +341,7 @@
                                    :partSn,
                                    :partName,
                                    SYSDATE,
-                                   :user,
+                                   :createUser,
                                    0)";
 
                             sqlHelper.ExecuteNonQueryWithTransaction(sqlLog, bindParams, connection, transaction);
@@ -342,8 +356,8 @@
 
                             var unbindParams = new[]
                             {
-                        new OracleParameter(":snNo", snNo ?? (object)DBNull.Value),
-                        new OracleParameter(":partSn", partSn ?? (object)DBNull.Value)
+                        new OracleParameter("snNo", snNo ?? (object)DBNull.Value),
+                        new OracleParameter("partSn", partSn ?? (object)DBNull.Value)
                     };
 
                             sqlHelper.ExecuteNonQueryWithTransaction(sqlUnbind, unbindParams, connection, transaction);
@@ -357,15 +371,15 @@
                                    :partSn,
                                    :partName,
                                    SYSDATE,
-                                   :user,
+                                   :Puser,
                                    1)";
 
                             var logParams = new[]
                             {
-                        new OracleParameter(":snNo", snNo ?? (object)DBNull.Value),
-                        new OracleParameter(":partSn", partSn ?? (object)DBNull.Value),
-                        new OracleParameter(":partName", partName ?? (object)DBNull.Value),
-                        new OracleParameter(":user", user ?? (object)DBNull.Value)
+                        new OracleParameter("snNo", snNo ?? (object)DBNull.Value),
+                        new OracleParameter("partSn", partSn ?? (object)DBNull.Value),
+                        new OracleParameter("partName", partName ?? (object)DBNull.Value),
+                        new OracleParameter("Puser", user ?? (object)DBNull.Value)
                     };
 
                             sqlHelper.ExecuteNonQueryWithTransaction(sqlLog, logParams, connection, transaction);
@@ -388,6 +402,7 @@
 
             return result;
         }
+
 
 
         /// <summary>
@@ -725,5 +740,183 @@
             return result;
         }
 
+
+        public string[] SyncStackCodeFromApi(string stackCode, string loginId)
+        {
+            string[] msg = new string[2];
+            msg[0] = "true";
+
+            var sqlHelper = new OracleSQLHelper();
+            var (conn, tran) = sqlHelper.BeginTransaction();
+
+            try
+            {
+                // ---------------------------
+                // 1. 鍒ゆ柇鏄惁宸插叆搴擄紙IS_INBOUND = 1锛�
+                // ---------------------------
+                string sqlCheck = @"
+            SELECT COUNT(*) 
+              FROM MES_PALLET_BINDING 
+             WHERE STACKCODE = :stackCode 
+               AND IS_INBOUND = 1";
+
+                int count = Convert.ToInt32(sqlHelper.ExecuteScalarWithTransaction(
+                    conn,
+                    tran,
+                    sqlCheck,
+                    new[] { new OracleParameter(":stackCode", stackCode) }
+                ));
+
+                if (count > 0)
+                {
+                    msg[0] = "false";
+                    msg[1] = $"璇ユ爤鏉垮凡鍏ュ簱锛屼笉鍏佽閲嶆柊缁戝畾锛佹爤鏉跨爜锛歿stackCode}";
+                    tran.Rollback();
+                    return msg;
+                }
+
+
+                // ---------------------------
+                // 2. 璋冪敤鎺ュ彛鑾峰彇鏈�鏂� SN 鍒楄〃
+                // ---------------------------
+                var apiUrl = "http://no2api.dream-maker.com/storage/getTransferList";
+                var reqObj = new { stackCode = stackCode };
+                string jsonReq = Newtonsoft.Json.JsonConvert.SerializeObject(reqObj);
+
+                string apiResult = HttpHelper.HttpPost(apiUrl, jsonReq);
+                var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(apiResult);
+
+                if ((int)obj.code != 0)
+                {
+                    msg[0] = "false";
+                    msg[1] = "鎺ュ彛杩斿洖閿欒锛�" + (string)obj.msg;
+                    tran.Rollback();
+                    return msg;
+                }
+
+                var snList = obj.data.snList;
+                if (snList == null || snList.Count == 0)
+                {
+                    msg[0] = "false";
+                    msg[1] = "鎺ュ彛杩斿洖SN鍒楄〃涓虹┖锛�";
+                    tran.Rollback();
+                    return msg;
+                }
+
+
+                // ---------------------------
+                // 3. 鍒犻櫎鏃х粦瀹�
+                // ---------------------------
+                string sqlDelete = @"DELETE FROM MES_PALLET_BINDING WHERE STACKCODE = :stackCode";
+
+                sqlHelper.ExecuteNonQueryWithTransaction(
+                    sqlDelete,
+                    new[] { new OracleParameter(":stackCode", stackCode) },
+                    conn,
+                    tran
+                );
+
+
+                // ---------------------------
+                // 4. 鎵归噺鎻掑叆锛堟柟寮� 1锛氭彁鍓嶅鐞� transitTime锛�
+                // ---------------------------
+                int rowCount = snList.Count;
+
+                string[] arrSnNo = new string[rowCount];
+                string[] arrStackCode = new string[rowCount];
+                string[] arrLoginId = new string[rowCount];
+                string[] arrCreatedBy = new string[rowCount];
+                DateTime?[] arrTransitTime = new DateTime?[rowCount];
+                string[] arrLineNo = new string[rowCount];
+
+                for (int i = 0; i < rowCount; i++)
+                {
+                    arrSnNo[i] = (string)snList[i].snNo;
+                    arrStackCode[i] = stackCode;
+                    arrLoginId[i] = loginId;
+                    arrCreatedBy[i] = loginId;
+                    arrLineNo[i] = (string)snList[i].lineNo;
+
+                    // ------------------------
+                    // transitTime 杞崲锛堝叧閿級
+                    // ------------------------
+                    string timeStr = (string)snList[i].transitTime;
+
+                    if (string.IsNullOrWhiteSpace(timeStr))
+                    {
+                        arrTransitTime[i] = null;
+                    }
+                    else
+                    {
+                        DateTime dt;
+                        if (DateTime.TryParse(timeStr, out dt))
+                            arrTransitTime[i] = dt;
+                        else
+                            arrTransitTime[i] = null;  // 闈炴硶鏃堕棿鐩存帴缃┖
+                    }
+                }
+
+                string sqlBatchInsert = @"
+            INSERT INTO MES_PALLET_BINDING
+            (ID, STACKCODE, LOGIN_ID, SN_NO, TICKET_NO, MEDIUMBOXCODE, CREATE_DATE, CREATED_BY, BIND_TRANSIT_TIME, LINE_NO)
+            VALUES 
+            (
+                SEQ_MES_PALLET_BINDING_ID.NEXTVAL,
+                :STACKCODE,
+                :LOGIN_ID,
+                :SN_NO,
+                NULL,
+                NULL,
+                SYSDATE,
+                :CREATED_BY,
+                :BIND_TRANSIT_TIME,
+                :LINE_NO
+            )";
+
+                using (OracleCommand cmd = (OracleCommand)conn.CreateCommand())
+                {
+                    cmd.Transaction = (OracleTransaction)tran;
+                    cmd.CommandText = sqlBatchInsert;
+                    cmd.ArrayBindCount = rowCount;
+
+                    cmd.Parameters.Add(new OracleParameter(":STACKCODE", arrStackCode));
+                    cmd.Parameters.Add(new OracleParameter(":LOGIN_ID", arrLoginId));
+                    cmd.Parameters.Add(new OracleParameter(":SN_NO", arrSnNo));
+                    cmd.Parameters.Add(new OracleParameter(":CREATED_BY", arrCreatedBy));
+
+                    // 鍏抽敭锛歯ull 浼氳嚜鍔ㄥ瓨涓� Oracle NULL
+                    var pTransit = new OracleParameter(":BIND_TRANSIT_TIME", OracleDbType.Date);
+                    pTransit.Value = arrTransitTime;
+                    cmd.Parameters.Add(pTransit);
+
+                    cmd.Parameters.Add(new OracleParameter(":LINE_NO", arrLineNo));
+
+                    cmd.ExecuteNonQuery();
+                }
+
+
+                // ---------------------------
+                // 5. 鎻愪氦浜嬪姟
+                // ---------------------------
+                tran.Commit();
+                msg[1] = "鍚屾鎴愬姛锛�";
+            }
+            catch (Exception ex)
+            {
+                tran.Rollback();
+                msg[0] = "false";
+                msg[1] = ex.Message;
+                throw;
+            }
+            finally
+            {
+                sqlHelper.CloseConnection(conn);
+            }
+
+            return msg;
+        }
+
+
+
     }
 }

--
Gitblit v1.9.3