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

View File

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

View File

@ -347,7 +347,7 @@ namespace MotionFramework.Scripts.Runtime.Engine.Engine.Network.WebRequest
}
/// <summary>
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// 发送请求并处理进度
/// </summary>
/// <param name="request"></param>
/// <param name="onProgress"></param>
@ -355,19 +355,20 @@ namespace MotionFramework.Scripts.Runtime.Engine.Engine.Network.WebRequest
/// <returns></returns>
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();
// ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>
// 循环检查是否完成,更新进度
while (!operation.isDone)
{
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);
// <EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><EFBFBD>ȸ<EFBFBD><EFBFBD>£<EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾΪ100%
// 最后一次进度更新,确保进度显示为100%
Debug.Log("Progress: 100%");
}

View File

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

View File

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

View File

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

View File

@ -17,13 +17,21 @@ public class PanelTaskPromptComponent : MonoBehaviour
private void Start()
{
// 确保按钮引用有效
if (_button == null)
{
Debug.LogWarning("PanelTaskPromptComponent: Button reference is null");
return;
}
_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
{
private static T instance;
// 使用 volatile 关键字确保在多线程环境下 instance 字段的可见性和有序性
// 防止双重检查锁定模式中的内存重排序问题
private static volatile T instance;
protected static readonly object lockObj = new object();
@ -13,10 +15,12 @@ public abstract class BaseManager<T> where T : class
{
get
{
// 第一次检查:如果 instance 不为 null直接返回避免不必要的锁操作
if (instance == null)
{
lock (lockObj)
{
// 第二次检查:在锁内再次检查,确保只有一个线程创建实例
if (instance == null)
{
instance = (T)Activator.CreateInstance(typeof(T), true);

View File

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

View File

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

View File

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