快乐的昕的电脑
6 天以前 0dc95390f19439f68d45a4341415b3545d94983e
采购订单_数据库中明细使用序列化ID区分
已修改3个文件
131 ■■■■ 文件已修改
MES.Service/Dto/webApi/ErpRohIn.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpRohinData.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesRohInManager.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpRohIn.cs
@@ -2,11 +2,11 @@
public class ErpRohIn
{
    public string id { get; set; }
    public string? id { get; set; }
    public string? Type { get; set; }
    public string? FBillNo { get; set; }
    public string  FBillNo { get; set; }//采购单号
    public string? FDocumentStatus { get; set; }
    public string? FBillTypeID { get; set; }
    public string? FBillTypeID { get; set; }//单据类型
    public string? FBusinessType { get; set; }
    public string? FDate { get; set; }
    public string? FSupplierId { get; set; }
MES.Service/Dto/webApi/ErpRohinData.cs
@@ -2,9 +2,9 @@
public class ErpRohinData
{
    public string id { get; set; }
    public string Eid { get; set; }
    public string? FBillNo { get; set; }
    public string? id { get; set; }
    public string? Eid { get; set; }
    public string  FBillNo { get; set; }
    public string? FDEMANDBILLNO { get; set; }
    public string? FSEQ { get; set; }
    public string? FMaterialId { get; set; }
MES.Service/service/BasicData/MesRohInManager.cs
@@ -17,9 +17,10 @@
    public bool Save(RohIn rohIn)
    {
        var rohInErpRohIn = rohIn.ErpRohIn;
        var mesRohIn = GetMesRohIn(rohInErpRohIn);
        var mesRohInDatas =
            GetMesRohInDatas(rohIn.ErpRohinDatas);
            GetMesRohInDatas(rohIn.ErpRohinDatas, mesRohIn);
        //1    | 未实现     | 抛出异常
        //2    | 审核       | 调用 SaveOrUpdateData,正常插入/更新
@@ -65,8 +66,7 @@
    }
    // 插入或更新数据的方法
    private bool SaveOrUpdateData(SqlSugarScope db, MesRohIn mesRohIn,
        List<MesRohInData> mesRohInDatas, string type)
    private bool SaveOrUpdateData(SqlSugarScope db, MesRohIn mesRohIn,List<MesRohInData> mesRohInDatas, string type)
    {
        if (type == "3" || (mesRohIn.DocumentStatus != null && mesRohIn.DocumentStatus != "C"))
@@ -104,6 +104,23 @@
    // 将 ErpRohIn 对象转换为 MesRohIn 对象的方法
    private MesRohIn GetMesRohIn(ErpRohIn rohIn)
    {
        //根据单号+单别,获取对应的id
        var singleId = Db.Queryable<MesRohIn>()
            .Where(x => x.BillNo == rohIn.FBillNo && x.DocumentType == rohIn.FBillTypeID)
            .Select(x => x.EbelnK3id)
            .First();
        //如果没有则生成一个新的id
        if (singleId == null || string.IsNullOrWhiteSpace(singleId.ToString()))
        {
            rohIn.id = GenerateNewId().ToString();
            //rohIn.id = GenerateNewId().ToString("0");
        }
        else//如果有则使用已有的id
        {
            rohIn.id = singleId.ToString();
        }
        var eid = long.Parse(rohIn.id);
        var mesRohIn = new MesRohIn();
@@ -185,15 +202,14 @@
    }
    // 将 ErpRohinData 对象转换为 MesRohInData 对象的方法
    private List<MesRohInData> GetMesRohInDatas(
        List<ErpRohinData> erpRohinDatas)
    private List<MesRohInData> GetMesRohInDatas(List<ErpRohinData> erpRohinDatas, MesRohIn mesRohIn)
    {
        return erpRohinDatas.Select(s =>
        {
            var entity = new MesRohInData
            {
                EbelnK3id = Convert.ToDecimal(s.id),
                ErpId = Convert.ToDecimal(s.Eid),
                ErpId = Convert.ToDecimal(mesRohIn.EbelnK3id),//使用主表的EbelnK3id作为子表的ErpId
                BillNo = s.FBillNo,
                ItemId = s.FMaterialId,
                PurchaseUnit = s.FUnitId,
@@ -280,12 +296,75 @@
                        DateTime.ParseExact(s.FTerminateDate,
                            "yyyy-MM-dd HH:mm:ss", null);
            var single = rohInDataManager.GetSingle(it =>
                it.EbelnK3id == entity.EbelnK3id);
            //根据单号+单别+行号,获取对应的id
            var singleId = Db.Queryable<MesRohInData>()
            .Where(x => x.BillNo == s.FBillNo && x.SourceDocumentType == s.FBillTypeID && x.OrderLineId == s.FDEMANDBILLENTRYSEQ)
            .Select(x => x.EbelnK3id)
            .First();
            if (singleId == null)//如果没有则生成一个新的id
            {
                //entity.EbelnK3id = GenerateNewId2().ToString();
                entity.EbelnK3id = GenerateNewId2();
            }
            else//如果有则使用已有的id
            {
                //entity.EbelnK3id = singleId.EbelnK3id;
                entity.EbelnK3id = singleId;
            }
            //查询EbelnK3id对应的Guid,赋值给entity.Guid。实现主键复用
            var single = rohInDataManager.GetSingle(it =>it.EbelnK3id == entity.EbelnK3id);
            if (single != null) entity.Guid = single.Guid;
            return entity;
        }).ToList();
    }
    /// <summary>
    /// 生成新的主表ID,确保不重复
    /// </summary>
    private decimal GenerateNewId()
    {
        // 处理空表的情况,从1开始
        var maxId = Db.Queryable<MesRohIn>().Max(x => (decimal?)x.EbelnK3id) ?? 0;
        var newId = maxId + 1;
        // 双重检查,确保生成的ID不存在
        while (Db.Queryable<MesRohIn>().Where(x => x.EbelnK3id == newId).Any())
        {
            newId++;
        }
        return newId;
    }
    /// <summary>
    /// 生成新的子表ID,通过数据库序列获取唯一ID
    /// </summary>
    private decimal GenerateNewId2()
    {
        try
        {
            // 替换为:
            var sequenceValueObj = Db.Ado.GetScalar("SELECT NEXT VALUE FOR MES_ROH_IN_DATA_seq");
            var sequenceValue = Convert.ToDecimal(sequenceValueObj);
            // 验证序列值是否有效
            if (sequenceValue <= 0)
            {
                throw new InvalidOperationException($"数据库序列 MES_ROH_IN_DATA_seq 返回了无效的值: {sequenceValue}");
            }
            return sequenceValue;
        }
        catch (Exception ex)
        {
            // 记录异常信息
            Console.WriteLine($"调用数据库序列 MES_ROH_IN_DATA_seq 失败: {ex.Message}");
            // 向上层抛出明确的异常信息
            throw new InvalidOperationException($"生成子表ID失败,无法获取数据库序列值: {ex.Message}", ex);
        }
    }
    /// <summary>
@@ -313,4 +392,28 @@
        return (outSum, outMsg);
    }
    // 整单删除
    //private bool Delete(SqlSugarScope db, MesRohIn mesRohIn,List<MesRohInData> mesRohInDatas)
    //{
    //    if (mesRohIn.Guid != null)
    //        db.Deleteable<MesRohIn>().Where(s => s.Guid == mesRohIn.Guid)
    //            .ExecuteCommand();
    //    if (mesRohInDatas.Count > 0)
    //        db.Deleteable<MesRohInData>()
    //            .Where(s => s.ErpId == mesRohIn.EbelnK3id).ExecuteCommand();
    //    var orUpdate = db.Insertable(mesRohIn)
    //        .IgnoreColumns(true).ExecuteCommand() > 0;
    //    var baOrUpdate = db.Insertable(mesRohInDatas).PageSize(1)
    //        .IgnoreColumnsNull()
    //        .ExecuteCommand() > 0;
    //    if (orUpdate && baOrUpdate) return true;
    //    throw new NotImplementedException("删除");
    //}
}