MES.Service/service/BasicData/SalesReturnNoticeManager.cs
@@ -1,4 +1,5 @@
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
@@ -75,4 +76,182 @@
    }
    #endregion
    private readonly SalesReturnNoticeDetailManager salesReturnNoticeDetailManager = new();
    // Save 方法用于保存单个 销售订单(SalesOrder) 记录,根据类型执行不同的操作
    public bool Save(SaleReturnNotice saleReturnNotice)
    {
        var salesReturnNoticeErpSalesReturnNotice = saleReturnNotice.erpSalesReturnNotice;
        var mesSalesReturnNotice = GetSalesReturnNotice(salesReturnNoticeErpSalesReturnNotice);
        var mesSalesReturnNoticeDetails = GetErpSalesOrderDetail(saleReturnNotice.erpSalesReturnNoticeDetail, salesReturnNoticeErpSalesReturnNotice.type);
        return UseTransaction(db =>
        {
            switch (salesReturnNoticeErpSalesReturnNotice.type)
            {
                case "3":
                    return UpdateData(db, mesSalesReturnNotice, mesSalesReturnNoticeDetails) ? 1 : 0;
                case "2":
                case "4":
                case "5":
                case "6":
                    return SaveOrUpdateData(db, mesSalesReturnNotice, mesSalesReturnNoticeDetails)
                        ? 1
                        : 0;
                default:
                    throw new NotImplementedException(
                        $"type没有{salesReturnNoticeErpSalesReturnNotice.type}这个类型");
            }
        }) > 0;
    }
    // 更新数据的方法(单纯的删除)
    private bool UpdateData(SqlSugarScope db, SalesReturnNotice salesReturnNotice,
        List<SalesReturnNoticeDetail> salesReturnNoticeDetails)
    {
        var decimals = salesReturnNoticeDetails.Select(s => s.Id).ToArray();
        var update = base.DeleteById(salesReturnNotice.Id);
        var insertOrUpdate = db
            .Deleteable<SalesOrderDetail>().In(decimals)
            .ExecuteCommand() > 0;
        if (update && insertOrUpdate) return true;
        throw new NotImplementedException("删除失败");
    }
    // 插入或更新数据的方法
    private bool SaveOrUpdateData(SqlSugarScope db, SalesReturnNotice salesReturnNotice,
        List<SalesReturnNoticeDetail> salesReturnNoticeDetails)
    {
        if (salesReturnNotice.Id != null) base.DeleteById(salesReturnNotice.Id);
        if (salesReturnNoticeDetails.Count > 0)
            db.Deleteable<SalesOrderDetail>()
                .Where(s => s.ErpId == salesReturnNotice.Id).ExecuteCommand();
        var orUpdate = base.Insert(salesReturnNotice);
        var baOrUpdate = salesReturnNoticeDetailManager.InsertRange(salesReturnNoticeDetails);
        if (orUpdate && baOrUpdate) return true;
        throw new NotImplementedException("插入或更新失败");
    }
    // 批量保存记录的方法
    public bool SaveList(List<SaleReturnNotice> saleReturnNotices)
    {
        var result = saleReturnNotices.Select(Save).ToList();
        return result.All(b => b);
    }
    // 将 ErpSalesReturnNotice 对象转换为 SalesReturnNotice 对象的方法
    public SalesReturnNotice GetSalesReturnNotice(ErpSalesReturnNotice erpSalesReturnNotice)
    {
        var eid = Convert.ToDecimal(erpSalesReturnNotice.Id);
        var MesSalesReturnNotice = new SalesReturnNotice();
        var single = base.GetSingle(it => it.Id == eid);
        if (single != null) MesSalesReturnNotice.Id = single.Id;
        MesSalesReturnNotice.ErpId = erpSalesReturnNotice.erpID;
        MesSalesReturnNotice.BillType = erpSalesReturnNotice.fBillTypeID;
        MesSalesReturnNotice.BillNo = erpSalesReturnNotice.fBillNo;
        if (erpSalesReturnNotice.fDate != null)
            MesSalesReturnNotice.FDate = DateTime.ParseExact(erpSalesReturnNotice.fDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesReturnNotice.Currency = erpSalesReturnNotice.fSettleCurrld;
        MesSalesReturnNotice.SalesDept = erpSalesReturnNotice.fSaleDeptId;
        MesSalesReturnNotice.ReturnCustomer = erpSalesReturnNotice.fRetcustId;
        MesSalesReturnNotice.ReturnReason = erpSalesReturnNotice.fRetcustReason;
        MesSalesReturnNotice.DeliveryLocation = erpSalesReturnNotice.fHeadLocId;
        MesSalesReturnNotice.InventoryDept = erpSalesReturnNotice.fRetDeptId;
        MesSalesReturnNotice.InventoryGroup = erpSalesReturnNotice.fStockerGroupId;
        MesSalesReturnNotice.WarehouseManager = erpSalesReturnNotice.fStockerId;
        MesSalesReturnNotice.SalesGroup = erpSalesReturnNotice.fSaleGroupId;
        MesSalesReturnNotice.SalesPerson = erpSalesReturnNotice.fSalesManId;
        MesSalesReturnNotice.Receiver = erpSalesReturnNotice.fReceiveCusId;
        MesSalesReturnNotice.ReceiverContact = erpSalesReturnNotice.fReceiveCusContact;
        MesSalesReturnNotice.ReceiverAddress = erpSalesReturnNotice.fReceiveAddress;
        MesSalesReturnNotice.ReceiverName = erpSalesReturnNotice.fLinkMan;
        MesSalesReturnNotice.SettleParty = erpSalesReturnNotice.fSettleCusId;
        MesSalesReturnNotice.CreatedBy = erpSalesReturnNotice.fCreatorId;
        if (erpSalesReturnNotice.fCreateDate != null)
            MesSalesReturnNotice.CreatedDate = DateTime.ParseExact(erpSalesReturnNotice.fCreateDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesReturnNotice.ModifiedBy = erpSalesReturnNotice.fModifierId;
        if (erpSalesReturnNotice.fModifyDate != null)
            MesSalesReturnNotice.ModifiedDate = DateTime.ParseExact(erpSalesReturnNotice.fModifyDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesReturnNotice.ClosedBy = erpSalesReturnNotice.fCloserId;
        MesSalesReturnNotice.CloseReason = erpSalesReturnNotice.fCloseReason;
        if (erpSalesReturnNotice.fCloseDate != null)
            MesSalesReturnNotice.CloseDate = DateTime.ParseExact(erpSalesReturnNotice.fCloseDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesReturnNotice.ApprovedBy = erpSalesReturnNotice.fApproverId;
        if (erpSalesReturnNotice.fApproveDate != null)
            MesSalesReturnNotice.ApprovedDate = DateTime.ParseExact(erpSalesReturnNotice.fApproveDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesReturnNotice.CancelStatus = erpSalesReturnNotice.fCancelStatus;
        MesSalesReturnNotice.CancelledBy = erpSalesReturnNotice.fCancellerId;
        if (erpSalesReturnNotice.fCancelDate != null)
            MesSalesReturnNotice.CancelDate = DateTime.ParseExact(erpSalesReturnNotice.fCancelDate, "yyyy-MM-dd HH:mm:ss", null);
        MesSalesReturnNotice.CloseStatus = erpSalesReturnNotice.fBillCloseStatus;
        MesSalesReturnNotice.BillStatus = erpSalesReturnNotice.fDocumentStatus;
        return MesSalesReturnNotice;
    }
    // 将 ErpSalesReturnNoticeDetail 对象转换为 SalesReturnNoticeDetail 对象的方法
    public List<SalesReturnNoticeDetail> GetErpSalesOrderDetail(
        List<ErpSalesReturnNoticeDetail> erpSalesReturnNoticeDetails, string type)
    {
        return erpSalesReturnNoticeDetails.Select(s =>
        {
            var entity = new SalesReturnNoticeDetail
            {
                Id = Convert.ToDecimal(s.Id),
                ErpLineId = s.erpID,
                ErpHeadId =s.ehid,
                MaterialId = s.fMaterialId,
                MaterialName = s.fMaterialName,
                MaterialSpecification = s.fMaterialModel,
                SalesUnitId = s.fUnitID,
                SalesQuantity = Convert.ToDecimal(s.fQty),
                IsFree = s.fIsFree,
                ReturnDate = s.fDeliverydate != null ? DateTime.ParseExact(s.fDeliverydate, "yyyy-MM-dd HH:mm:ss", null) : null,
                WareHouse = s.fStockId,
                PlanTrackingNumber = s.fMtoNo,
                LotNumber = s.fLot,
                Note = s.fEntryDescription,
                ReturnType = s.fRmType,
                InventoryUnit = s.fStockUnitID,
                InventoryQuantity = Convert.ToDecimal(s.fStockQty),
                MaterialCategory = s.fMaterialType,
                OwnerTypeId = s.fOwnerTypeID,
                OwnerId = s.fOwnerId,
                SourceBillType = s.fSrcType,
                SourceBillNo = s.fSrcBillNo,
                OrderBillNo = s.fOrderNo,
            };
            var single = salesReturnNoticeDetailManager.GetSingle(it =>
                it.Id == entity.Id);
            if (single != null) entity.Id = single.Id;
            return entity;
        }).ToList();
    }
}