From 67f74c1d68ccbb69eb8436e70018357533ef9c0a Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期五, 16 五月 2025 17:32:27 +0800
Subject: [PATCH] ERP同步功能部分完善,测试逻辑优化

---
 Services/DebugService.cs |  226 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 212 insertions(+), 14 deletions(-)

diff --git a/Services/DebugService.cs b/Services/DebugService.cs
index fbbad8d..4374a10 100644
--- a/Services/DebugService.cs
+++ b/Services/DebugService.cs
@@ -1,30 +1,121 @@
-锘縰sing HH.WCS.Mobox3.AnGang.Models;
-using HH.WCS.Mobox3.AnGang.config;
-using System;
+锘縰sing System;
 using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
 using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+
+using CsvHelper;
+using CsvHelper.Configuration;
+
+using HH.WCS.Mobox3.AnGang.Helper;
 using HH.WCS.Mobox3.AnGang.Helpers;
+using HH.WCS.Mobox3.AnGang.Models;
+using HH.WCS.Mobox3.AnGang.Services;
+
+using Newtonsoft.Json;
+
+using static HH.WCS.Mobox3.AnGang.Dtos.Request.AgvRequest;
+using static HH.WCS.Mobox3.AnGang.Dtos.Request.DebugRequest;
+using static HH.WCS.Mobox3.AnGang.Dtos.Response.AgvResponse;
+using static HH.WCS.Mobox3.AnGang.Dtos.Response.DebugResponse;
+using static HH.WCS.Mobox3.AnGang.Models.DebugModel;
 
 namespace HH.WCS.Mobox3.AnGang.Debug {
     public class DebugService {
         /// <summary>
+        /// 妯℃嫙 AGV 澶氭鍥炴姤浠诲姟鐘舵�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ReturnResults AgvSeriesReports(UpdateTaskState model) {
+            var returnResults = new ReturnResults();
+            returnResults.ResultList = new List<ReturnResult>();
+
+            //if (!AgvHelper.IsTaskState(model.NextState)) {
+            //    return returnResults;
+            //}
+
+            var agvCurrentState = 1; // 濡傛灉娌℃湁鎵惧埌鏈�柊鐨�TaskAction锛岄粯璁ゅ綋鍓嶇姸鎬佷负 1(鎵ц)  
+
+            // 鏌ヨ TaskAction 琛ㄤ腑涓庡綋鍓嶄换鍔″彿鍖归厤鐨勬渶鏂拌褰�+            var db = DbHelper.GetDbClient();
+            var taskAction = db.Queryable<TN_Task_Action>()
+                .Where(a => a.S_TASK_CODE == model.TaskID)
+                .OrderBy(a => a.T_CREATE, SqlSugar.OrderByType.Desc).First();
+
+            if (taskAction != null) {
+                // 濡傛灉鏈夊尮閰嶏紝灏嗗綋鍓嶄换鍔$姸鎬佽缃负琛ㄥ崟涓殑鏈�柊鐘舵�
+                agvCurrentState = taskAction.N_ACTION_CODE;
+            }
+
+            if (!AgvHelper.IsNextStateOk(agvCurrentState, model.NextState)) {
+                LogHelper.Info($"Debug: AGV 鐘舵� '{model.NextState}' 涓嶆槸 '{agvCurrentState}' 鐨�鍚堟硶涓嬩竴鐘舵�");
+                return returnResults;
+            }
+
+            var agvTaskState = new AgvTaskState() {
+                task_no = model.TaskID,
+                forklift_no = model.ForkliftNo,
+            };
+
+            var result = new ReturnResult();
+
+            // 褰撳墠鐘舵�娌℃湁杈惧埌鏈�粓鐘舵�鏃讹紝寰幆鍔犲叆杩斿洖鍒楄〃
+            while (agvCurrentState != model.NextState) {
+                agvTaskState.state = agvCurrentState;
+                result = AgvService.OperateAgvTaskStatus(agvTaskState);
+                returnResults.ResultList.Add(result);
+                agvCurrentState = AgvHelper.GetNextState(agvCurrentState);
+            }
+
+            // 灏嗗惊鐜病鏈夊埌杈剧殑鏈�粓鐘舵�锛屼篃鍔犲叆杩斿洖鍒楄〃
+            agvTaskState.state = model.NextState;
+            result = AgvService.OperateAgvTaskStatus(agvTaskState);
+            returnResults.ResultList.Add(result);
+
+            return returnResults;
+        }
+
+        /// <summary>
         /// 鍒濆鏁版嵁搴撳缓绔�         /// </summary>
         /// <returns></returns>
-        public string CreateDatabase() {
+        public static string CreateDatabase(bool cover = true) {
             try {
                 var db = DbHelper.GetDbClient();
 
-                db.CodeFirst.InitTables<TN_CG_Detail>();
-                db.CodeFirst.InitTables<TN_WorkOrder>();
-                db.CodeFirst.InitTables<TN_CAR_IN>();
-                //db.CodeFirst.InitTables<SYSHelper.OI_SYS_MAXID>();
-                db.CodeFirst.InitTables<TN_Task_Action>();
-                db.CodeFirst.InitTables<TN_Task>();
-                db.CodeFirst.InitTables<TN_Location>();
-                db.CodeFirst.InitTables<TN_Loc_Container>();
+                var entityTypes = new Type[] {
+                    typeof(TN_CAR_IN),
+                    typeof(TN_CG_Detail),
+                    typeof(TN_Container),
+                    typeof(TN_Loc_Container),
+                    typeof(TN_Location),
+                    typeof(TN_Task),
+                    typeof(TN_Task_Action),
+                    typeof(SysHelper.OI_SYS_MAXID),
+
+                };
+
+                using (var tran = db.Ado.UseTran()) {
+                    if (cover) {
+                        // 鍒犻櫎鎵�湁琛紙鎸変緷璧栧叧绯诲�搴忥級
+                        var tables = db.DbMaintenance.GetTableInfoList();
+                        foreach (var table in tables.OrderByDescending(t => t.Name)) {
+                            db.DbMaintenance.DropTable(table.Name);
+                        }
+
+                        // 鍒涘缓鏂拌〃
+                        db.CodeFirst.InitTables(entityTypes);
+
+                        //db.CodeFirst.BackupTable().InitTables(entityTypes);
+                    }
+                    else {
+                        db.CodeFirst.InitTables(entityTypes);
+                    }
+
+                    tran.CommitTran();
+                }
+
             }
             catch (Exception ex) {
                 LogHelper.Info($"鍙戠敓浜嗗紓甯�);
@@ -34,6 +125,113 @@
             return "鎴愬姛";
         }
 
+        public static string InsertLocCntrCg() {
+            string filePath = PathHelper.GetProjDir("./debug/loc_cntr_cg.csv");
+            var db = DbHelper.GetDbClient();
 
+            try {
+                var configuration = new CsvConfiguration(CultureInfo.InvariantCulture) {
+                    // 閰嶇疆閫夐」
+                    Delimiter = ",",               // 鍒嗛殧绗�+                    HasHeaderRecord = true,        // 鏈夋爣棰樿
+                    MissingFieldFound = null,      // 蹇界暐缂哄け瀛楁
+                    HeaderValidated = null,        // 璺宠繃鏍囬楠岃瘉
+                    BadDataFound = context => { }  // 澶勭悊閿欒鏁版嵁
+                };
+
+                var locCntrCgList = new List<LocCntrCg>();
+
+                using (var reader = new StreamReader(filePath))
+                using (var csv = new CsvReader(reader, configuration)) {
+                    // 璇诲彇璁板綍
+                    locCntrCgList = csv.GetRecords<LocCntrCg>().ToList();
+                }
+
+                using (var tran = db.UseTran()) {
+                    foreach (var locCntrCg in locCntrCgList) {
+                        LogHelper.Info("LogCntrCg锛� + JsonConvert.SerializeObject(locCntrCg));
+                        if (string.IsNullOrEmpty(locCntrCg.LocCode)) break;
+
+                        var loc = db.Queryable<TN_Location>().First(a => a.S_CODE == locCntrCg.LocCode);
+                        if (loc == null) {
+                            var newLoc = new TN_Location {
+                                S_CODE = locCntrCg.LocCode,
+                                S_AREA_CODE = locCntrCg.LocArea ?? ""
+                            };
+
+                            if (db.Insertable<TN_Location>(newLoc).ExecuteCommand() <= 0) {
+                                tran.RollbackTran();
+                                LogHelper.Info($"鎻掑叆浣嶇疆{locCntrCg.LocCode}澶辫触");
+                                return "鎻掑叆澶辫触";
+                            }
+
+                            loc = newLoc;
+                        }
+
+                        //if (loc.N_CURRENT_NUM == 0) {
+                        //    loc.N_CURRENT_NUM = 1;
+                        //    if (db.Updateable<TN_Location>(loc).UpdateColumns(
+                        //        it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) {
+                        //        tran.RollbackTran();
+                        //        LogHelper.Info($"淇敼浣嶇疆{locCntrCg.LocCode}澶辫触");
+                        //        continue;
+                        //    }
+                        //}
+
+                        if (string.IsNullOrEmpty(locCntrCg.CntrCode)) {
+                            LogHelper.Info("瀹瑰櫒鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�);
+                            continue;
+                        }
+
+                        var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == locCntrCg.LocCode
+                            && a.S_CNTR_CODE == locCntrCg.CntrCode);
+
+                        if (locCntrRel == null) {
+                            var newLocCntrRel = new TN_Loc_Container {
+                                S_LOC_CODE = locCntrCg.LocCode,
+                                S_CNTR_CODE = locCntrCg.CntrCode,
+                                S_CNTR_TYPE = locCntrCg.CntrType ?? ""
+                            };
+
+                            loc.N_CURRENT_NUM = 1;
+
+                            if (db.Insertable<TN_Loc_Container>(newLocCntrRel).ExecuteCommand() <= 0
+                                && db.Updateable<TN_Location>(loc).UpdateColumns(c => c.N_CURRENT_NUM).ExecuteCommand() <= 0) {
+                                tran.RollbackTran();
+                                LogHelper.Info($"鎻掑叆浣嶇疆鎵樼洏鍏崇郴{locCntrCg.LocCode}-{locCntrCg.CntrCode}澶辫触");
+                                return "鎻掑叆澶辫触";
+                            }
+                        }
+
+                        if (string.IsNullOrEmpty(locCntrCg.ItemCode)) {
+                            LogHelper.Info("鐗╂枡鍙蜂负绌猴紝涓嶅啀璇诲彇鍚庨潰鐨勬暟鎹�);
+                            continue;
+                        }
+
+                        var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrCg.CntrCode
+                            && a.S_ITEM_CODE == locCntrCg.ItemCode);
+                        if (cgDetail == null) {
+                            var locList = new List<TN_CG_Detail>();
+                            locList.Add(new TN_CG_Detail { S_CNTR_CODE = locCntrCg.CntrCode, S_ITEM_CODE = locCntrCg.ItemCode, S_BATCH_NO = locCntrCg.BatchNo ?? "" });
+                            if (db.Insertable<TN_CG_Detail>(locList).ExecuteCommand() <= 0) {
+                                tran.RollbackTran();
+                                LogHelper.Info($"鎻掑叆鎵樼洏鐗╂枡鍏崇郴{locCntrCg.CntrCode}-{locCntrCg}澶辫触");
+                                return "鎻掑叆澶辫触";
+                            }
+                        }
+                    }
+                    tran.CommitTran();
+                }
+
+                return "鎻掑叆鏁版嵁鎴愬姛";
+
+            }
+            catch (FileNotFoundException) {
+                return $"Error: File not found - {filePath}";
+            }
+            catch (Exception ex) {
+                return $"Error reading CSV file: {ex.Message}";
+            }
+        }
     }
 }

--
Gitblit v1.9.1