快乐的昕的电脑
2025-10-17 d24c080e18db940f0d786752c24c42561f5b95c4
Services/WomdaaManager.cs
@@ -171,21 +171,38 @@
        var sqlQuerySingle = Db.Ado.SqlQuerySingle<string>(sql);
        VOrdrerBycl.finalResult = sqlQuerySingle;
        // 新增:查询最早与最新数采记录(按采集时间排序)
        var baseQuery = Db.Queryable<MesNumericalBycl>()
            .Where(n => n.OrderId == Convert.ToDecimal(query.OrderId) && n.MachineNo == VOrdrerBycl.MachineNo);
        // 数采记录:基于主键ID与最大采集数逻辑,解决同一CJ_NUM在不同时间重复的问题
        var numericalQuery = Db.Queryable<MesNumericalBycl>()
            .Where(n => n.MachineNo == VOrdrerBycl.MachineNo
                        && n.OrderId == VOrdrerBycl.ID
                        && n.CjNum != null);
        // 修复后代码(精确时间排序,Oracle数据库下字符串转时间)
        var startCjNum = baseQuery.OrderBy(n => SqlFunc.Oracle_ToDate(n.CjTiem, "yyyy-MM-dd HH24:mi:ss")).Select(n => n.CjNum).First();
        // 修复后(取最大CjNum,排除CjTiem为空或无效的情况)
        var currentCjNum = baseQuery
            .Where(n => !string.IsNullOrEmpty(n.CjTiem))
            .OrderBy(n => SqlFunc.Oracle_ToDate(n.CjTiem, "yyyy-MM-dd HH24:mi:ss"), OrderByType.Desc)
        // 开工采集值=第一条记录(按ID最小)
        var startCjNum = numericalQuery
            .OrderBy(n => n.Id)
            .Select(n => n.CjNum)
            .First();
        VOrdrerBycl.StartCjNum = startCjNum;
        VOrdrerBycl.CurrentCjNum = currentCjNum;
        // 最大采集数(累计当前值)
        var maxCjNum = numericalQuery.Max(n => n.CjNum);
        // 达到最大值的第一次时间(如需展示可后续新增字段)
        var firstReachMaxTime = numericalQuery
            .Where(n => n.CjNum == maxCjNum)
            .OrderBy(n => n.Id)
            .Select(n => n.CjTiem)
            .First();
        // 达到最大值的最后一次时间(若需要判断是否仍在增长,可对比 first 与 last)
        var lastReachMaxTime = numericalQuery
            .Where(n => n.CjNum == maxCjNum)
            .OrderBy(n => n.Id, OrderByType.Desc)
            .Select(n => n.CjTiem)
            .First();
        // 赋值(CurrentCjNum 采用累计最大值,避免 plateau 重复记录导致误解)
        VOrdrerBycl.StartCjNum = startCjNum ?? 0;
        VOrdrerBycl.CurrentCjNum = maxCjNum ?? VOrdrerBycl.StartCjNum;
        return VOrdrerBycl;
    }