MES.Service/service/BasicData/SalesOrderManager.cs
@@ -1,4 +1,5 @@
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
@@ -38,7 +39,8 @@
        conModels.Add(new ConditionalModel
        {
            FieldName = typeof(SalesOrder).GetProperties()[0].Name,
            ConditionalType = ConditionalType.Equal, FieldValue = "1"
            ConditionalType = ConditionalType.Equal,
            FieldValue = "1"
        }); //id=1
        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
@@ -75,4 +77,188 @@
    }
    #endregion
    private readonly SalesOrderDetailManager salesOrderDetailManager = new();
    // Save 方法用于保存单个 销售订单(SalesOrder) 记录,根据类型执行不同的操作
    public bool Save(SalesOrders salesOrders)
    {
        var salesOrdersErpSalesOrder = salesOrders.ErpSalesOrder;
        var mesSalesOrders = GetMesSalesOrder(salesOrdersErpSalesOrder);
        var mesSalesOrderDetail = GetErpSalesOrderDetail(salesOrders.ErpSalesOrderDetails,salesOrdersErpSalesOrder.Type);
        return UseTransaction(db =>
        {
            switch (salesOrdersErpSalesOrder.Type)
            {
                case "3":
                    return UpdateData(db, mesSalesOrders, mesSalesOrderDetail) ? 1 : 0;
                case "2":
                case "4":
                case "5":
                case "B":
                    return SaveOrUpdateData(db, mesSalesOrders, mesSalesOrderDetail)
                        ? 1
                        : 0;
                default:
                    throw new NotImplementedException(
                        $"type没有{salesOrdersErpSalesOrder.Type}这个类型");
            }
        }) > 0;
    }
    // 更新数据的方法(单纯的删除)
    private bool UpdateData(SqlSugarScope db, SalesOrder salesOrder,
        List<SalesOrderDetail> salesOrderDetails)
    {
        var decimals = salesOrderDetails.Select(s => s.Id).ToArray();
        var update = base.DeleteById(salesOrder.Id);
        var insertOrUpdate = db
            .Deleteable<SalesOrderDetail>().In(decimals)
            .ExecuteCommand() > 0;
        if (update && insertOrUpdate) return true;
        throw new NotImplementedException("删除失败");
    }
    // 插入或更新数据的方法
    private bool SaveOrUpdateData(SqlSugarScope db, SalesOrder salesOrder,
        List<SalesOrderDetail> salesOrderDetails)
    {
        if (salesOrder.Id != null) base.DeleteById(salesOrder.Id);
        if (salesOrderDetails.Count > 0)
            db.Deleteable<SalesOrderDetail>()
                .Where(s => s.ErpId == salesOrder.Id).ExecuteCommand();
        var orUpdate = base.Insert(salesOrder);
        var baOrUpdate = salesOrderDetailManager.InsertRange(salesOrderDetails);
        if (orUpdate && baOrUpdate) return true;
        throw new NotImplementedException("插入或更新失败");
    }
    // 批量保存记录的方法
    public bool SaveList(List<SalesOrders> salesOrders)
    {
        var result = salesOrders.Select(Save).ToList();
        return result.All(b => b);
    }
    // 将 ErpSalesOrder 对象转换为 SalesOrder 对象的方法
    public SalesOrder GetMesSalesOrder(ErpSalesOrder erpSalesOrder)
    {
        var eid = Convert.ToDecimal(erpSalesOrder.Id);
        var MesSalesOrder = new SalesOrder();
        var single = base.GetSingle(it => it.Id == eid);
        if (single != null) MesSalesOrder.Id = single.Id;
        MesSalesOrder.ErpId = Convert.ToDecimal(erpSalesOrder.ErpID);
        MesSalesOrder.BillNo = erpSalesOrder.FBillNo;
        MesSalesOrder.BillTypeId = erpSalesOrder.FBillTypeID;
        MesSalesOrder.DocumentStatus = erpSalesOrder.FDocumentStatus;
        if (erpSalesOrder.FDate != null)
            MesSalesOrder.FDate = DateTime.ParseExact(erpSalesOrder.FDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesOrder.BusinessType = erpSalesOrder.FBusinessType;
        MesSalesOrder.HeadDeliveryWay = erpSalesOrder.FHeadDeliveryWay;
        MesSalesOrder.CloseStatus = erpSalesOrder.FCloseStatus;
        MesSalesOrder.HeadLocId = erpSalesOrder.FHEADLOCID;
        MesSalesOrder.CustId = erpSalesOrder.FCustId;
        MesSalesOrder.CloseStatus = erpSalesOrder.FCloseStatus;
        MesSalesOrder.SaleDeptId = erpSalesOrder.FSaleDeptId;
        MesSalesOrder.SalerId = erpSalesOrder.FSalerId;
        MesSalesOrder.ChangeReason = erpSalesOrder.FChangeReason;
        MesSalesOrder.Note = erpSalesOrder.FNote;
        MesSalesOrder.SettleId = erpSalesOrder.FSettleId;
        MesSalesOrder.LinkMan = erpSalesOrder.FLinkMan;
        MesSalesOrder.ChargeId = erpSalesOrder.FChargeId;
        MesSalesOrder.LinkPhone = erpSalesOrder.FLinkPhone;
        MesSalesOrder.CreatorId = erpSalesOrder.FCreatorId;
        if (erpSalesOrder.FCreateDate != null)
            MesSalesOrder.CreateDate = DateTime.ParseExact(erpSalesOrder.FCreateDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesOrder.ModifierId = erpSalesOrder.FModifierId;
        if (erpSalesOrder.FModifyDate != null)
            MesSalesOrder.ModifyDate = DateTime.ParseExact(erpSalesOrder.FModifyDate, "yyyy-MM-dd HH:mm:ss", null);
        if (erpSalesOrder.FApproveDate != null)
            MesSalesOrder.ApproveDate = DateTime.ParseExact(erpSalesOrder.FApproveDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesOrder.CloserId = erpSalesOrder.FCloserId;
        if (erpSalesOrder.FCloseDate != null)
            MesSalesOrder.CloseDate = DateTime.ParseExact(erpSalesOrder.FCloseDate, "yyyy-MM-dd HH:mm:ss", null);
        if (erpSalesOrder.FChangeDate != null)
            MesSalesOrder.ChangeDate = DateTime.ParseExact(erpSalesOrder.FChangeDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesOrder.CancelStatus = erpSalesOrder.FCancelStatus;
        MesSalesOrder.CancellerId = erpSalesOrder.FCancellerId;
        MesSalesOrder.VersionNo = Convert.ToDecimal(erpSalesOrder.FVersionNo);
        MesSalesOrder.ChangerId = erpSalesOrder.FChangerId;
        MesSalesOrder.EntryNote = erpSalesOrder.FEntryNote;
        return MesSalesOrder;
    }
    // 将 ErpSalesOrderDetail 对象转换为 SalesOrderDetail 对象的方法
    public List<SalesOrderDetail> GetErpSalesOrderDetail(
        List<ErpSalesOrderDetail> erpSalesOrderDetails, string type)
    {
        return erpSalesOrderDetails.Select(s =>
        {
            var entity = new SalesOrderDetail
            {
                Id = Convert.ToDecimal(s.Id),
                ErpId = Convert.ToDecimal(s.ErpID),
                EHid = Convert.ToDecimal(s.EHID),
                MaterialIDd = s.FMaterialId,
                UnitId = s.FUnitID,
                Qty = Convert.ToDecimal(s.FQty),
                PriceUnitId = s.FPriceUnitId,
                PriceUnitQty = Convert.ToDecimal(s.FPriceUnitQty),
                DeliveryDate = s.FDeliveryDate != null ? DateTime.ParseExact(s.FDeliveryDate, "yyyy-MM-dd HH:mm:ss", null) : null,
                IsFree = s.FIsFree,
                OwnerTypeId = s.FOwnerTypeId,
                OwnerId = s.FOwnerId,
                EntryNote = s.FEntryNote,
                MtoNo = s.FMtoNo,
                Lot = s.FLot,
                DeliveryMaxQty = Convert.ToDecimal(s.FDeliveryMaxQty),
                DeliveryMinQty = Convert.ToDecimal(s.FDeliveryMinQty),
                OutLmtUnitId = s.FOutLmtUnitID,
                MrpCloseStatus = s.FMrpCloseStatus,
                MrpTerminateStatus = s.FMrpTerminateStatus,
                TerminateDate = s.FTerminateDate != null ? DateTime.ParseExact(s.FTerminateDate, "yyyy-MM-dd HH:mm:ss", null) : null,
                TerminaterId = s.FTerminaterId,
                SrcType = s.FSrcType,
                SrcBillNo = s.FSrcBillNo,
                DeliQty = Convert.ToDecimal(s.FDeliQty),
                StockOutQty = Convert.ToDecimal(s.FStockOutQty),
                BaseRetNoticeQty = Convert.ToDecimal(s.FBaseRetNoticeQty),
                BaseReturnQty = Convert.ToDecimal(s.FBaseReturnQty),
                BaseRemainOutQty = Convert.ToDecimal(s.FBaseRemainOutQty),
                BaseArQty = Convert.ToDecimal(s.FBASEARQTY),
            };
            var single = salesOrderDetailManager.GetSingle(it =>
                it.Id == entity.Id);
            if (single != null) entity.Id = single.Id;
            return entity;
        }).ToList();
    }
}