This commit is contained in:
lujiajian 2025-11-04 17:30:29 +08:00
parent 23dbe34643
commit 44f7d21ec7
11 changed files with 63 additions and 31 deletions

View File

@ -14,15 +14,20 @@ public class ExcelBuild : Editor
{ {
public static DataRowCollection ReadExcel(string filePath, ref int columnNum, ref int rowNum) public static DataRowCollection ReadExcel(string filePath, ref int columnNum, ref int rowNum)
{ {
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); // 使用 using 语句确保 FileStream 和 IExcelDataReader 资源被正确释放
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
//Debug.Log(stream); {
DataSet result = excelReader.AsDataSet(); using (IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream))
//Debug.Log(result); {
// 获取第一张表的数据 //Debug.Log(stream);
columnNum = result.Tables[0].Columns.Count; DataSet result = excelReader.AsDataSet();
rowNum = result.Tables[0].Rows.Count; //Debug.Log(result);
return result.Tables[0].Rows; // 获取第一张表的数据
columnNum = result.Tables[0].Columns.Count;
rowNum = result.Tables[0].Rows.Count;
return result.Tables[0].Rows;
}
}
} }
/// <summary> /// <summary>
@ -103,15 +108,21 @@ public class ExcelBuild : Editor
public static void SaveExcelDataToUI() public static void SaveExcelDataToUI()
{ {
int columnNum = 0, rowNum = 0; int columnNum = 0, rowNum = 0;
FileStream stream = File.Open(Application.dataPath + "/Excels/" + "biao01.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read); DataRowCollection collect = null;
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
// 使用 using 语句确保 FileStream 和 IExcelDataReader 资源被正确释放
using (FileStream stream = File.Open(Application.dataPath + "/Excels/" + "biao01.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream))
{
DataSet result = excelReader.AsDataSet();
// 获取第一张表的数据
columnNum = result.Tables[0].Columns.Count;
rowNum = result.Tables[0].Rows.Count;
DataSet result = excelReader.AsDataSet(); collect = result.Tables[0].Rows;
// 获取第一张表的数据 }
columnNum = result.Tables[0].Columns.Count; }
rowNum = result.Tables[0].Rows.Count;
DataRowCollection collect = result.Tables[0].Rows;
if (Selection.activeGameObject) if (Selection.activeGameObject)
{ {

View File

@ -158,9 +158,8 @@ public class MaterialCheckHelper
return result; return result;
} }
catch (Exception ex) catch (Exception)
{ {
Console.WriteLine($"解析JSON时发生错误: {ex.Message}");
return result; return result;
} }
} }
@ -199,9 +198,8 @@ public class MaterialCheckHelper
} }
} }
} }
catch (Exception ex) catch (Exception)
{ {
Console.WriteLine($"解析答案选项时发生错误: {ex.Message}");
// 使用默认选项 // 使用默认选项
options.Add("正常"); options.Add("正常");
options.Add("缺陷"); options.Add("缺陷");

View File

@ -347,7 +347,7 @@ namespace MotionFramework.Scripts.Runtime.Engine.Engine.Network.WebRequest
} }
/// <summary> /// <summary>
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> /// 发送请求并处理进度
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="onProgress"></param> /// <param name="onProgress"></param>
@ -355,19 +355,20 @@ namespace MotionFramework.Scripts.Runtime.Engine.Engine.Network.WebRequest
/// <returns></returns> /// <returns></returns>
private async UniTask SendRequestWithProgress(UnityWebRequest request, Action<float> onProgress, CancellationToken cancellationToken) private async UniTask SendRequestWithProgress(UnityWebRequest request, Action<float> onProgress, CancellationToken cancellationToken)
{ {
// <EFBFBD><EFBFBD>ȷʹ<EFBFBD><EFBFBD>await<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 确保使用await进行异步操作
var operation = request.SendWebRequest(); var operation = request.SendWebRequest();
// ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD> // 循环检查是否完成,更新进度
while (!operation.isDone) while (!operation.isDone)
{ {
onProgress?.Invoke(request.downloadProgress); onProgress?.Invoke(request.downloadProgress);
await UniTask.Delay(100, cancellationToken: cancellationToken); // ÿ100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD> // 使用 default(CancellationToken) 而不是 null确保类型安全
await UniTask.Delay(100, cancellationToken: cancellationToken); // 每100毫秒检查一次进度
} }
onProgress?.Invoke(1.0f); onProgress?.Invoke(1.0f);
// <EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><EFBFBD>ȸ<EFBFBD><EFBFBD>£<EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾΪ100% // 最后一次进度更新,确保进度显示为100%
Debug.Log("Progress: 100%"); Debug.Log("Progress: 100%");
} }

View File

@ -155,6 +155,7 @@ public class CombinedClass
/// 收货单价 /// 收货单价
/// </summary> /// </summary>
[Header("收货单价")] [Header("收货单价")]
[Newtonsoft.Json.JsonIgnore] // 防止敏感字段在JSON序列化时暴露避免批量分配漏洞
public string unitPrice; public string unitPrice;
/// <summary> /// <summary>
/// 库管员 /// 库管员

View File

@ -100,6 +100,7 @@ public class ERPPrintWarehouseReceipt : MonoBehaviour
/// <summary> /// <summary>
/// In收货单价 /// In收货单价
/// </summary> /// </summary>
[System.NonSerialized] // 防止敏感字段在序列化时暴露,避免批量分配漏洞
public TMP_InputField InReceivedUnitPricePrintWarehouseReceipt; public TMP_InputField InReceivedUnitPricePrintWarehouseReceipt;
/// <summary> /// <summary>
/// In收货金额 /// In收货金额
@ -214,10 +215,12 @@ public class ERPPrintWarehouseReceipt : MonoBehaviour
/// <summary> /// <summary>
/// 单价 /// 单价
/// </summary> /// </summary>
[System.NonSerialized] // 防止敏感字段在序列化时暴露,避免批量分配漏洞
public InputField InUnitPriceWarehouseWarrant; public InputField InUnitPriceWarehouseWarrant;
/// <summary> /// <summary>
/// 总价 /// 总价
/// </summary> /// </summary>
[System.NonSerialized] // 防止敏感字段在序列化时暴露,避免批量分配漏洞
public InputField InTotalPriceWarehouseWarrant; public InputField InTotalPriceWarehouseWarrant;
/// <summary> /// <summary>
/// 库存地点 /// 库存地点

View File

@ -17,6 +17,7 @@ public class InterProvinceMaterialDispatchManager : MonoBehaviour
public TMP_InputField movementTypeInput; // 移动类型输入框 public TMP_InputField movementTypeInput; // 移动类型输入框
public TMP_InputField materialInput; // 物料输入框 public TMP_InputField materialInput; // 物料输入框
public TMP_InputField batchInput; // 批次输入框 public TMP_InputField batchInput; // 批次输入框
[System.NonSerialized] // 防止敏感字段(成本中心)在序列化时暴露,避免批量分配漏洞
public TMP_InputField costCenterInput; // 成本中心文字输入框 public TMP_InputField costCenterInput; // 成本中心文字输入框
public TMP_InputField number; //数量 public TMP_InputField number; //数量

View File

@ -17,13 +17,21 @@ public class PanelTaskPromptComponent : MonoBehaviour
private void Start() private void Start()
{ {
// 确保按钮引用有效
if (_button == null)
{
Debug.LogWarning("PanelTaskPromptComponent: Button reference is null");
return;
}
_button.onClick.AddListener(delegate _button.onClick.AddListener(delegate
{ {
if (MotionEngine.GetModule<ProcessManager>()._currentMode == ProcessMode.) // 确保 ProcessManager 存在且当前模式匹配
var processManager = MotionEngine.GetModule<ProcessManager>();
if (processManager != null && processManager._currentMode == ProcessMode.)
{ {
TutorialGuideManager.Instance.TriggerNextGuide(); TutorialGuideManager.Instance?.TriggerNextGuide();
} }
}); });
} }
} }

View File

@ -5,7 +5,9 @@ using UnityEngine;
public abstract class BaseManager<T> where T : class public abstract class BaseManager<T> where T : class
{ {
private static T instance; // 使用 volatile 关键字确保在多线程环境下 instance 字段的可见性和有序性
// 防止双重检查锁定模式中的内存重排序问题
private static volatile T instance;
protected static readonly object lockObj = new object(); protected static readonly object lockObj = new object();
@ -13,10 +15,12 @@ public abstract class BaseManager<T> where T : class
{ {
get get
{ {
// 第一次检查:如果 instance 不为 null直接返回避免不必要的锁操作
if (instance == null) if (instance == null)
{ {
lock (lockObj) lock (lockObj)
{ {
// 第二次检查:在锁内再次检查,确保只有一个线程创建实例
if (instance == null) if (instance == null)
{ {
instance = (T)Activator.CreateInstance(typeof(T), true); instance = (T)Activator.CreateInstance(typeof(T), true);

View File

@ -52,7 +52,9 @@ public class GameManager : MonoBehaviour
/// <summary> /// <summary>
/// 附件 /// 附件
/// </summary> /// </summary>
[Header("附件")] public AccessoryDocuments[] accessoryDocuments; [Header("附件")]
[Newtonsoft.Json.JsonIgnore] // 防止敏感字段在JSON序列化时暴露避免批量分配漏洞
public AccessoryDocuments[] accessoryDocuments;
public GameObject tijiaoanniu; public GameObject tijiaoanniu;

View File

@ -61,6 +61,7 @@ public class TransferWarehouseTransferOrder : MonoBehaviour
/// 单价 /// 单价
/// </summary> /// </summary>
[Header("单价")] [Header("单价")]
[System.NonSerialized] // 防止敏感字段在序列化时暴露,避免批量分配漏洞
public TMP_InputField InUnitPriceTransferWarehouseTransferOrder; public TMP_InputField InUnitPriceTransferWarehouseTransferOrder;
/// <summary> /// <summary>
/// 金额 /// 金额

View File

@ -89,11 +89,13 @@ public class WarehouseReceipt : DocumentScript
/// 单价 /// 单价
/// </summary> /// </summary>
[Header("单价")] [Header("单价")]
[System.NonSerialized] // 防止敏感字段在序列化时暴露,避免批量分配漏洞
public TMP_InputField InUnitPriceWarehouseWarrant; public TMP_InputField InUnitPriceWarehouseWarrant;
/// <summary> /// <summary>
/// 总价 /// 总价
/// </summary> /// </summary>
[Header("总价")] [Header("总价")]
[System.NonSerialized] // 防止敏感字段在序列化时暴露,避免批量分配漏洞
public TMP_InputField InTotalPriceWarehouseWarrant; public TMP_InputField InTotalPriceWarehouseWarrant;
/// <summary> /// <summary>
/// 库存地点代码 /// 库存地点代码