This commit is contained in:
zpc 2026-04-06 14:14:48 +08:00
parent 54b6d7fd20
commit 7662935368
3 changed files with 54 additions and 5 deletions

View File

@ -166,14 +166,30 @@ namespace ZR.Admin.WebApi.Controllers.Business
return ToResponse(ResultCode.FAIL, "请选择要导入的文件");
}
var logger = NLog.LogManager.GetCurrentClassLogger();
List<OdfCableFaultImportDto> list = new();
using (var stream = formFile.OpenReadStream())
{
// 使用动态查询读取原始数据避免MiniExcel强类型映射丢失单元格内多行文本
var rows = stream.Query(useHeaderRow: true, startCell: "A1").ToList();
logger.Info($"[导入调试] 共读取到 {rows.Count} 行数据");
int rowIndex = 0;
foreach (var row in rows)
{
rowIndex++;
var dict = (IDictionary<string, object>)row;
// 打印所有列名和值,用于调试
foreach (var kv in dict)
{
var valType = kv.Value?.GetType()?.Name ?? "null";
var valStr = kv.Value?.ToString() ?? "(null)";
// 转义换行符以便在日志中可见
var valEscaped = valStr.Replace("\r", "\\r").Replace("\n", "\\n");
logger.Info($"[导入调试] 行{rowIndex} 列[{kv.Key}] 类型={valType} 值=[{valEscaped}]");
}
var dto = new OdfCableFaultImportDto();
if (dict.TryGetValue("编号", out var idVal) && idVal != null && int.TryParse(idVal.ToString(), out var id))
@ -185,9 +201,20 @@ namespace ZR.Admin.WebApi.Controllers.Business
if (dict.TryGetValue("故障时间", out var ftVal) && ftVal != null)
{
if (ftVal is DateTime dt)
{
dto.FaultTime = dt.ToString("yyyy-MM-dd HH:mm:ss");
logger.Info($"[导入调试] 行{rowIndex} 故障时间是DateTime类型值={dt:yyyy-MM-dd HH:mm:ss}");
}
else
{
dto.FaultTime = ftVal.ToString();
var escaped = dto.FaultTime.Replace("\r", "\\r").Replace("\n", "\\n");
logger.Info($"[导入调试] 行{rowIndex} 故障时间是{ftVal.GetType().Name}类型,值=[{escaped}]");
}
}
else
{
logger.Info($"[导入调试] 行{rowIndex} 未找到故障时间列");
}
if (dict.TryGetValue("故障发生频次", out var fcVal) && fcVal != null && int.TryParse(fcVal.ToString(), out var fc))

View File

@ -338,6 +338,7 @@ namespace ZR.Service.Business
/// </summary>
public (int successCount, int errorCount, string errorMsg) ImportFaults(List<OdfCableFaultImportDto> list)
{
var logger = NLog.LogManager.GetCurrentClassLogger();
int successCount = 0;
int errorCount = 0;
var errorMsgs = new List<string>();
@ -373,15 +374,36 @@ namespace ZR.Service.Business
var allTimes = new List<DateTime>();
if (!string.IsNullOrWhiteSpace(item.FaultTime))
{
var rawFaultTime = item.FaultTime;
var escapedRaw = rawFaultTime.Replace("\r", "\\r").Replace("\n", "\\n");
logger.Info($"[导入调试] 行{rowNum} FaultTime原始值=[{escapedRaw}] 长度={rawFaultTime.Length}");
// 打印每个字符的Unicode编码排查隐藏字符
var charCodes = string.Join(",", rawFaultTime.Select(c => $"U+{(int)c:X4}"));
logger.Info($"[导入调试] 行{rowNum} FaultTime字符编码=[{charCodes}]");
var timeParts = item.FaultTime.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var part in timeParts)
logger.Info($"[导入调试] 行{rowNum} Split后得到 {timeParts.Length} 段");
for (int k = 0; k < timeParts.Length; k++)
{
if (DateTime.TryParse(part.Trim(), out var parsed))
logger.Info($"[导入调试] 行{rowNum} 时间段[{k}]=[{timeParts[k].Trim()}]");
if (DateTime.TryParse(timeParts[k].Trim(), out var parsed))
{
allTimes.Add(parsed);
logger.Info($"[导入调试] 行{rowNum} 时间段[{k}] 解析成功={parsed:yyyy-MM-dd HH:mm:ss}");
}
else
{
logger.Info($"[导入调试] 行{rowNum} 时间段[{k}] 解析失败");
}
}
}
else
{
logger.Info($"[导入调试] 行{rowNum} FaultTime为空");
}
logger.Info($"[导入调试] 行{rowNum} 共解析到 {allTimes.Count} 个有效时间");
// 按时间排序,第一个作为主故障时间
allTimes.Sort();

View File

@ -1,10 +1,10 @@
# 开发环境配置
ENV = 'development'
VITE_APP_API_HOST = 'http://localhost:11082/'
VITE_APP_API_HOST = 'http://localhost:8888'
# 开发环境
VITE_APP_BASE_API = 'http://localhost:8888/'
VITE_APP_BASE_API = 'http://localhost:8888'
# VITE_APP_BASE_API = 'http://49.233.115.141:11082/'
# 路由前缀
@ -14,4 +14,4 @@ VITE_APP_ROUTER_PREFIX = '/'
VITE_APP_UPLOAD_URL = 'Common/UploadFile'
#socket API
VITE_APP_SOCKET_API = 'http://localhost:11082/msghub'
VITE_APP_SOCKET_API = 'http://localhost:8888/msghub'