如洲 陈
2025-09-24 c5751829f3a3dc86a510c90fb5e987d72533a08e
退货通知单
已修改4个文件
已添加3个文件
772 ■■■■ 文件已修改
MES.Service/Dto/webApi/ErpSalesReturn.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpSalesReturnDetailDto.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpSalesReturnDto.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/SalesReturnNotice.cs 201 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/SalesReturnNoticeDetail.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/SalesReturnNoticeManager.cs 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/BasicData/SalesReturnNoticeController.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpSalesReturn.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
namespace MES.Service.Dto.webApi;
public class ErpSalesReturn
{
    public ErpSalesReturnDto OrderDto { get; set; }
    public List<ErpSalesReturnDetailDto> Items { get; set; }
}
MES.Service/Dto/webApi/ErpSalesReturnDetailDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
namespace MES.Service.Dto.webApi;
public class ErpSalesReturnDetailDto
{
    public string? Type { get; set; }
    public string? FMaterialId { get; set; } // ç‰©æ–™ç¼–码
    public string? FUnitID { get; set; } // é”€å”®å•位
    public string? FQty { get; set; } // é”€å”®æ•°é‡
    public string? FIsFree { get; set; } // æ˜¯å¦èµ å“
    public string? FDeliverydate { get; set; } // é€€è´§æ—¥æœŸ
    public string? FStockId { get; set; } // ä»“库
    public string? FMtoNo { get; set; } // è®¡åˆ’跟踪号
    public string? FLot { get; set; } // æ‰¹å·
    public string? FEntryDescription { get; set; } // å¤‡æ³¨
    public string? FRmType { get; set; } // é€€è´§ç±»åž‹
    public string? FStockUnitID { get; set; } // åº“存单位
    public decimal? FStockQty { get; set; } // åº“存数量
    public string? FOwnerTypeID { get; set; } // è´§ä¸»ç±»åž‹
    public string? FOwnerId { get; set; } // è´§ä¸»
    public string? FSrcType { get; set; } // æºå•类型
    public string? FSrcBillNo { get; set; } // æºå•编号
    public string? FOrderNo { get; set; } // è®¢å•单号
    public string? ErpID { get; set; } // ERPID
    public string? EHID { get; set; } // ERP头ID
}
MES.Service/Dto/webApi/ErpSalesReturnDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
namespace MES.Service.Dto.webApi;
public class ErpSalesReturnDto
{
    public string? Type { get; set; }
    public string? ErpID { get; set; } // ERPID
    public string? FBillTypeID { get; set; } // å•据类型
    public string? FBillNo { get; set; } // å•据编号
    public string? FDate { get; set; } // æ—¥æœŸ
    public string? FSettleCurrld { get; set; } // ç»“算币别
    public string? FSaleDeptId { get; set; } // é”€å”®éƒ¨é—¨
    public string? FRetcustId { get; set; } // é€€è´§å®¢æˆ·
    public string? FRetcustReason { get; set; } // é€€è´§åŽŸå› 
    public string? FHeadLocId { get; set; } // äº¤è´§åœ°ç‚¹
    public string? FRetDeptId { get; set; } // åº“存部门
    public string? FStockerGroupId { get; set; } // åº“存组
    public string? FStockerId { get; set; } // ä»“管员
    public string? FSaleGroupId { get; set; } // é”€å”®ç»„
    public string? FSalesManId { get; set; } // é”€å”®å‘˜
    public string? FReceiveCusId { get; set; } // æ”¶è´§æ–¹
    public string? FReceiveCusContact { get; set; } // æ”¶è´§æ–¹è”系人
    public string? FReceiveAddress { get; set; } // æ”¶è´§æ–¹åœ°å€
    public string? FLinkMan { get; set; } // æ”¶è´§æ–¹å§“名
    public string? FSettleCusId { get; set; } // ç»“ç®—æ–¹
    public string? FCreatorId { get; set; } // åˆ›å»ºäºº
    public string? FCreateDate { get; set; } // åˆ›å»ºæ—¥æœŸ
    public string? FModifierId { get; set; } // æœ€åŽä¿®æ”¹äºº
    public string? FModifyDate { get; set; } // æœ€åŽä¿®æ”¹æ—¥æœŸ
    public string? FCloserId { get; set; } // å…³é—­äºº
    public string? FCloseReason { get; set; } // å…³é—­åŽŸå› 
    public string? FCloseDate { get; set; } // å…³é—­æ—¥æœŸ
    public string? FApproverId { get; set; } // å®¡æ ¸äºº
    public string? FApproveDate { get; set; } // å®¡æ ¸æ—¥æœŸ
    public string? FCancelStatus { get; set; } // ä½œåºŸçŠ¶æ€
    public string? FCancellerId { get; set; } // ä½œåºŸäºº
    public string? FCancelDate { get; set; } // ä½œåºŸæ—¥æœŸ
    public string? FBillCloseStatus { get; set; } // å…³é—­çŠ¶æ€
    public string? FDocumentStatus { get; set; } // å•据状态
}
MES.Service/Modes/SalesReturnNotice.cs
@@ -9,75 +9,206 @@
public class SalesReturnNotice
{
    /// <summary>
    ///     SEQ_sales
    /// </summary>
    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_sales",
        IsPrimaryKey = true)]
    public decimal Id { get; set; }
    public decimal? Id { get; set; }
    /// <summary>
    ///     åˆ¶å•人
    ///     å•据类型
    /// </summary>
    [SugarColumn(ColumnName = "BILL_TYPE")]
    public string BillType { get; set; }
    /// <summary>
    ///     å•据编号
    /// </summary>
    [SugarColumn(ColumnName = "BILL_NO")]
    public string BillNo { get; set; }
    /// <summary>
    ///     æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "F_DATE")]
    public DateTime? FDate { get; set; }
    /// <summary>
    ///     ç»“算币别
    /// </summary>
    [SugarColumn(ColumnName = "CURRENCY")]
    public string Currency { get; set; }
    /// <summary>
    ///     é”€å”®éƒ¨é—¨
    /// </summary>
    [SugarColumn(ColumnName = "SALES_DEPT")]
    public string SalesDept { get; set; }
    /// <summary>
    ///     é€€è´§å®¢æˆ·
    /// </summary>
    [SugarColumn(ColumnName = "RETURN_CUSTOMER")]
    public string ReturnCustomer { get; set; }
    /// <summary>
    ///     é€€è´§åŽŸå› 
    /// </summary>
    [SugarColumn(ColumnName = "RETURN_REASON")]
    public string ReturnReason { get; set; }
    /// <summary>
    ///     äº¤è´§åœ°ç‚¹
    /// </summary>
    [SugarColumn(ColumnName = "DELIVERY_LOCATION")]
    public string DeliveryLocation { get; set; }
    /// <summary>
    ///     åº“存部门
    /// </summary>
    [SugarColumn(ColumnName = "INVENTORY_DEPT")]
    public string InventoryDept { get; set; }
    /// <summary>
    ///     åº“存组
    /// </summary>
    [SugarColumn(ColumnName = "INVENTORY_GROUP")]
    public string InventoryGroup { get; set; }
    /// <summary>
    ///     ä»“管员
    /// </summary>
    [SugarColumn(ColumnName = "WAREHOUSE_MANAGER")]
    public string WarehouseManager { get; set; }
    /// <summary>
    ///     é”€å”®ç»„
    /// </summary>
    [SugarColumn(ColumnName = "SALES_GROUP")]
    public string SalesGroup { get; set; }
    /// <summary>
    ///     é”€å”®å‘˜
    /// </summary>
    [SugarColumn(ColumnName = "SALES_PERSON")]
    public string SalesPerson { get; set; }
    /// <summary>
    ///     æ”¶è´§æ–¹
    /// </summary>
    [SugarColumn(ColumnName = "RECEIVER")]
    public string Receiver { get; set; }
    /// <summary>
    ///     æ”¶è´§æ–¹è”系人
    /// </summary>
    [SugarColumn(ColumnName = "RECEIVER_CONTACT")]
    public string ReceiverContact { get; set; }
    /// <summary>
    ///     æ”¶è´§æ–¹åœ°å€
    /// </summary>
    [SugarColumn(ColumnName = "RECEIVER_ADDRESS")]
    public string ReceiverAddress { get; set; }
    /// <summary>
    ///     æ”¶è´§æ–¹å§“名
    /// </summary>
    [SugarColumn(ColumnName = "RECEIVER_NAME")]
    public string ReceiverName { get; set; }
    /// <summary>
    ///     ç»“ç®—æ–¹
    /// </summary>
    [SugarColumn(ColumnName = "SETTLE_PARTY")]
    public string SettleParty { get; set; }
    /// <summary>
    ///     åˆ›å»ºäºº
    /// </summary>
    [SugarColumn(ColumnName = "CREATED_BY")]
    public string CreatedBy { get; set; }
    /// <summary>
    ///     å•据编号
    ///     åˆ›å»ºæ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "DOCUMENT_ID")]
    public string DocumentId { get; set; }
    [SugarColumn(ColumnName = "CREATED_DATE")]
    public DateTime? CreatedDate { get; set; }
    /// <summary>
    ///     å®¡æ ¸äººåç§°
    ///     ä¿®æ”¹äºº
    /// </summary>
    [SugarColumn(ColumnName = "MODIFIED_BY")]
    public string ModifiedBy { get; set; }
    /// <summary>
    ///     ä¿®æ”¹æ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "MODIFIED_DATE")]
    public DateTime? ModifiedDate { get; set; }
    /// <summary>
    ///     å…³é—­äºº
    /// </summary>
    [SugarColumn(ColumnName = "CLOSED_BY")]
    public string ClosedBy { get; set; }
    /// <summary>
    ///     å…³é—­åŽŸå› 
    /// </summary>
    [SugarColumn(ColumnName = "CLOSE_REASON")]
    public string CloseReason { get; set; }
    /// <summary>
    ///     å…³é—­æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "CLOSE_DATE")]
    public DateTime? CloseDate { get; set; }
    /// <summary>
    ///     å®¡æ ¸äºº
    /// </summary>
    [SugarColumn(ColumnName = "APPROVED_BY")]
    public string ApprovedBy { get; set; }
    /// <summary>
    ///     åˆ¶å•/审核日期
    ///     å®¡æ ¸æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "CREATED_OR_APPROVED_DATE")]
    public DateTime? CreatedOrApprovedDate { get; set; }
    [SugarColumn(ColumnName = "APPROVED_DATE")]
    public DateTime? ApprovedDate { get; set; }
    /// <summary>
    ///     éƒ¨é—¨ä»£ç 
    ///     ä½œåºŸçŠ¶æ€
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENT_CODE")]
    public string DepartmentCode { get; set; }
    [SugarColumn(ColumnName = "CANCEL_STATUS")]
    public string CancelStatus { get; set; }
    /// <summary>
    ///     éƒ¨é—¨åç§°
    ///     ä½œåºŸäºº
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENT_NAME")]
    public string DepartmentName { get; set; }
    [SugarColumn(ColumnName = "CANCELLED_BY")]
    public string CancelledBy { get; set; }
    /// <summary>
    ///     è´­è´§å•位代码
    ///     ä½œåºŸæ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "PURCHASER_CODE")]
    public string PurchaserCode { get; set; }
    [SugarColumn(ColumnName = "CANCEL_DATE")]
    public DateTime? CancelDate { get; set; }
    /// <summary>
    ///     è´­è´§å•位名称
    ///     å…³é—­çŠ¶æ€
    /// </summary>
    [SugarColumn(ColumnName = "PURCHASER_NAME")]
    public string PurchaserName { get; set; }
    [SugarColumn(ColumnName = "CLOSE_STATUS")]
    public string CloseStatus { get; set; }
    /// <summary>
    ///     ä¸šåŠ¡å‘˜ä»£ç 
    /// </summary>
    [SugarColumn(ColumnName = "SALESPERSON_CODE")]
    public string SalespersonCode { get; set; }
    /// <summary>
    ///     ä¸šåŠ¡å‘˜åç§°
    /// </summary>
    [SugarColumn(ColumnName = "SALESPERSON_NAME")]
    public string SalespersonName { get; set; }
    /// <summary>
    ///     ERPID
    ///     ERP头ID
    /// </summary>
    [SugarColumn(ColumnName = "ERP_ID")]
    public string ErpId { get; set; }
    /// <summary>
    ///     å•据状态
    /// </summary>
    [SugarColumn(ColumnName = "BILL_STATUS")]
    public string BillStatus { get; set; }
}
MES.Service/Modes/SalesReturnNoticeDetail.cs
@@ -16,136 +16,112 @@
    public decimal Id { get; set; }
    /// <summary>
    ///     å•据行号
    ///     ç‰©æ–™ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "LINE_NUMBER")]
    public long? LineNumber { get; set; }
    [SugarColumn(ColumnName = "MATERIAL_ID")]
    public string MaterialId { get; set; }
    /// <summary>
    ///     äº§å“ä»£ç 
    ///     é”€å”®å•位
    /// </summary>
    [SugarColumn(ColumnName = "PRODUCT_CODE")]
    public string ProductCode { get; set; }
    [SugarColumn(ColumnName = "SALES_UNIT_ID")]
    public string SalesUnitId { get; set; }
    /// <summary>
    ///     äº§å“åç§°
    ///     é”€å”®æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "PRODUCT_NAME")]
    public string ProductName { get; set; }
    [SugarColumn(ColumnName = "SALES_QUANTITY")]
    public decimal SalesQuantity { get; set; }
    /// <summary>
    ///     äº§å“è§„æ ¼
    ///     æ˜¯å¦èµ å“
    /// </summary>
    [SugarColumn(ColumnName = "PRODUCT_SPEC")]
    public string ProductSpec { get; set; }
    [SugarColumn(ColumnName = "IS_FREE")]
    public string IsFree { get; set; }
    /// <summary>
    ///     é‡‘额
    ///     é€€è´§æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "AMOUNT")]
    public decimal? Amount { get; set; }
    [SugarColumn(ColumnName = "RETURN_DATE")]
    public DateTime? ReturnDate { get; set; }
    /// <summary>
    ///     å•ä»·
    ///     ä»“库
    /// </summary>
    [SugarColumn(ColumnName = "UNIT_PRICE")]
    public decimal? UnitPrice { get; set; }
    [SugarColumn(ColumnName = "WAREHOUSE")]
    public string Warehouse { get; set; }
    /// <summary>
    ///     æ•°é‡
    ///     è®¡åˆ’跟踪号
    /// </summary>
    [SugarColumn(ColumnName = "QUANTITY")]
    public decimal? Quantity { get; set; }
    /// <summary>
    ///     å‡ºåº“数量
    /// </summary>
    [SugarColumn(ColumnName = "OUT_QUANTITY")]
    public decimal? OutQuantity { get; set; }
    [SugarColumn(ColumnName = "PLAN_TRACKING_NUMBER")]
    public string PlanTrackingNumber { get; set; }
    /// <summary>
    ///     æ‰¹å·
    /// </summary>
    [SugarColumn(ColumnName = "BATCH_NUMBER")]
    public string BatchNumber { get; set; }
    /// <summary>
    ///     é€€è´§æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "RETURN_QUANTITY")]
    public decimal? ReturnQuantity { get; set; }
    /// <summary>
    ///     å‘货数量
    /// </summary>
    [SugarColumn(ColumnName = "DELIVERY_QUANTITY")]
    public decimal? DeliveryQuantity { get; set; }
    [SugarColumn(ColumnName = "LOT_NUMBER")]
    public string LotNumber { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "REMARKS")]
    public string Remarks { get; set; }
    [SugarColumn(ColumnName = "NOTE")]
    public string Note { get; set; }
    /// <summary>
    ///     é”€å”®è®¢å•单号
    ///     é€€è´§ç±»åž‹
    /// </summary>
    [SugarColumn(ColumnName = "SALES_ORDER_ID")]
    public string SalesOrderId { get; set; }
    [SugarColumn(ColumnName = "RETURN_TYPE")]
    public string ReturnType { get; set; }
    /// <summary>
    ///     é”€å”®è®¢å•分录
    ///     åº“存单位
    /// </summary>
    [SugarColumn(ColumnName = "SALES_ORDER_ENTRY")]
    public string SalesOrderEntry { get; set; }
    [SugarColumn(ColumnName = "INVENTORY_UNIT")]
    public string InventoryUnit { get; set; }
    /// <summary>
    ///     é”€å”®è®¢å•ID
    ///     åº“存数量
    /// </summary>
    [SugarColumn(ColumnName = "SALES_ORDER_DETAIL_ID")]
    public string SalesOrderDetailId { get; set; }
    [SugarColumn(ColumnName = "INVENTORY_QUANTITY")]
    public decimal InventoryQuantity { get; set; }
    /// <summary>
    ///     åŸºæœ¬å•ä»·
    ///     è´§ä¸»ç±»åž‹
    /// </summary>
    [SugarColumn(ColumnName = "BASE_UNIT_PRICE")]
    public decimal? BaseUnitPrice { get; set; }
    [SugarColumn(ColumnName = "OWNER_TYPE_ID")]
    public string OwnerTypeId { get; set; }
    /// <summary>
    ///     åŸºæœ¬å•位数量
    ///     è´§ä¸»
    /// </summary>
    [SugarColumn(ColumnName = "BASE_UNIT_QUANTITY")]
    public decimal? BaseUnitQuantity { get; set; }
    [SugarColumn(ColumnName = "OWNER_ID")]
    public string OwnerId { get; set; }
    /// <summary>
    ///     ä»“库代码
    ///     æºå•类型
    /// </summary>
    [SugarColumn(ColumnName = "WAREHOUSE_CODE")]
    public string WarehouseCode { get; set; }
    [SugarColumn(ColumnName = "SOURCE_BILL_TYPE")]
    public string SourceBillType { get; set; }
    /// <summary>
    ///     ä»“库名称
    ///     æºå•单号
    /// </summary>
    [SugarColumn(ColumnName = "WAREHOUSE_NAME")]
    public string WarehouseName { get; set; }
    [SugarColumn(ColumnName = "SOURCE_BILL_NO")]
    public string SourceBillNo { get; set; }
    /// <summary>
    ///     åŸºæœ¬å•位出库数量
    ///     è®¢å•单号
    /// </summary>
    [SugarColumn(ColumnName = "BASE_UNIT_OUT_QUANTITY")]
    public decimal? BaseUnitOutQuantity { get; set; }
    [SugarColumn(ColumnName = "ORDER_BILL_NO")]
    public string OrderBillNo { get; set; }
    /// <summary>
    ///     å•位
    ///     ERP行ID
    /// </summary>
    [SugarColumn(ColumnName = "UNIT")]
    public string Unit { get; set; }
    /// <summary>
    ///     ERPID
    /// </summary>
    [SugarColumn(ColumnName = "ERP_ID")]
    public string ErpId { get; set; }
    [SugarColumn(ColumnName = "ERP_LINE_ID")]
    public string ErpLineId { get; set; }
    /// <summary>
    ///     ERP头ID
MES.Service/service/BasicData/SalesReturnNoticeManager.cs
@@ -1,4 +1,6 @@
using MES.Service.DB;
using System.Globalization;
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
@@ -8,6 +10,269 @@
{
    //当前类已经继承了 Repository å¢žã€åˆ ã€æŸ¥ã€æ”¹çš„æ–¹æ³•
    private readonly SalesReturnNoticeDetailManager _SalesReturnDetailManager =
        new();
    //ErpSalesReturn
    public bool Save(ErpSalesReturn SalesReturn)
    {
        var erpSalesReturnDto = SalesReturn.OrderDto;
        var mesSalesReturn = ConvertErpToSalesReturn(SalesReturn.OrderDto);
        var mesSalesReturnDatas =
            ConvertErpToSalesReturnDetail(SalesReturn.Items);
        return UseTransaction(db =>
        {
            switch (erpSalesReturnDto.Type)
            {
                // case "2":
                //     return InsertData(db, mesSalesReturn, mesSalesReturnDatas,
                //         rohInErpRohIn.FBILLTYPE)
                //         ? 1
                //         : 0;
                case "3":
                    return UpdateData(db, mesSalesReturn, mesSalesReturnDatas)
                        ? 1
                        : 0;
                case "2":
                case "4":
                    return SaveOrUpdateData(db, mesSalesReturn,
                        mesSalesReturnDatas, erpSalesReturnDto.Type)
                        ? 1
                        : 0;
                default:
                    throw new NotImplementedException(
                        $"type没有{erpSalesReturnDto.Type}这个类型");
            }
        }) > 0;
    }
    private bool UpdateData(SqlSugarScope db, SalesReturnNotice mesSalesReturn,
        List<SalesReturnNoticeDetail> mesSalesReturnDatas)
    {
        // å…ˆåˆ é™¤ä»Žè¡¨æ•°æ®ï¼ˆæ˜Žç»†è¡¨ï¼‰
        var deleteDetails = db.Deleteable<SalesReturnNoticeDetail>()
            .Where(s => s.ErpHeadId == mesSalesReturn.ErpId)
            .ExecuteCommand() >= 0; // ä½¿ç”¨>=0,因为可能没有明细数据
        // å†åˆ é™¤ä¸»è¡¨æ•°æ®
        var deleteMain = base.DeleteById(mesSalesReturn.Id);
        if (deleteMain && deleteDetails) return true;
        throw new NotImplementedException("删除失败");
    }
    // æ’入或更新数据的方法
    private bool SaveOrUpdateData(SqlSugarScope db,
        SalesReturnNotice mesSalesReturn,
        List<SalesReturnNoticeDetail> mesSalesReturnDatas, string type)
    {
        // å¦‚果存在主表记录,先删除从表数据,再删除主表
        if (mesSalesReturn.Id != null)
        {
            // å…ˆåˆ é™¤ä»Žè¡¨æ•°æ®ï¼ˆæ˜Žç»†è¡¨ï¼‰
            db.Deleteable<SalesReturnNoticeDetail>()
                .Where(s => s.ErpHeadId == mesSalesReturn.ErpId)
                .ExecuteCommand();
            // å†åˆ é™¤ä¸»è¡¨æ•°æ®
            base.DeleteById(mesSalesReturn.Id);
        }
        else
        {
            // å¦‚果主表不存在,但可能有从表数据,也删除从表数据
            db.Deleteable<SalesReturnNoticeDetail>()
                .Where(s => s.ErpHeadId == mesSalesReturn.ErpId)
                .ExecuteCommand();
        }
        // æ’入新的主表数据
        var orUpdate = base.Insert(mesSalesReturn);
        // æ’入新的从表数据
        var baOrUpdate = true;
        if (mesSalesReturnDatas.Count > 0)
        {
            baOrUpdate = _SalesReturnDetailManager.InsertRange(mesSalesReturnDatas);
        }
        if (orUpdate && baOrUpdate) return true;
        throw new NotImplementedException("插入或更新失败");
    }
    // æ‰¹é‡ä¿å­˜è®°å½•的方法
    public bool SaveList(List<ErpSalesReturn> salesOrder)
    {
        var result = salesOrder.Select(Save).ToList();
        return result.All(b => b);
    }
    // é‡å†™DeleteById方法,实现级联删除
    public new bool DeleteById(object id)
    {
        return UseTransaction(db =>
        {
            // å…ˆèŽ·å–ä¸»è¡¨è®°å½•ï¼ŒèŽ·å–ErpId用于删除从表
            var mainRecord = base.GetById(Convert.ToDecimal(id));
            if (mainRecord != null)
            {
                // å…ˆåˆ é™¤ä»Žè¡¨æ•°æ®ï¼ˆæ˜Žç»†è¡¨ï¼‰
                db.Deleteable<SalesReturnNoticeDetail>()
                    .Where(s => s.ErpHeadId == mainRecord.ErpId)
                    .ExecuteCommand();
            }
            // å†åˆ é™¤ä¸»è¡¨æ•°æ®
            return base.DeleteById(id) ? 1 : 0;
        }) > 0;
    }
    // é‡å†™DeleteByIds方法,实现级联删除
    public new bool DeleteByIds(object[] ids)
    {
        return UseTransaction(db =>
        {
            var successCount = 0;
            foreach (var id in ids)
            {
                // å…ˆèŽ·å–ä¸»è¡¨è®°å½•ï¼ŒèŽ·å–ErpId用于删除从表
                var mainRecord = base.GetById(Convert.ToDecimal(id));
                if (mainRecord != null)
                {
                    // å…ˆåˆ é™¤ä»Žè¡¨æ•°æ®ï¼ˆæ˜Žç»†è¡¨ï¼‰
                    db.Deleteable<SalesReturnNoticeDetail>()
                        .Where(s => s.ErpHeadId == mainRecord.ErpId)
                        .ExecuteCommand();
                }
                // å†åˆ é™¤ä¸»è¡¨æ•°æ®
                if (base.DeleteById(id))
                {
                    successCount++;
                }
            }
            return successCount;
        }) > 0;
    }
    private SalesReturnNotice ConvertErpToSalesReturn(
        ErpSalesReturnDto erpDto)
    {
        DateTime parsedDate;
        // æ—¶é—´æ ¼å¼è½¬æ¢å‡½æ•°ï¼ŒERP时间格式为 "yyyy-MM-dd HH:mm:ss"
        DateTime? ParseDateTime(string dateStr)
        {
            if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out parsedDate))
                return parsedDate;
            return null; // å¦‚果转换失败,返回null
        }
        var salesOrder = new SalesReturnNotice
        {
            BillNo = erpDto.FBillNo,
            ErpId = erpDto.ErpID,
            FDate = ParseDateTime(erpDto.FDate) ?? null,
            BillType = erpDto.FBillTypeID, // å•据类型
            Currency = erpDto.FSettleCurrld, // ç»“算币别
            SalesDept = erpDto.FSaleDeptId, //销售部门
            ReturnCustomer = erpDto.FRetcustId, // é€€è´§å®¢æˆ·
            ReturnReason = erpDto.FRetcustReason, // é€€è´§åŽŸå› 
            DeliveryLocation = erpDto.FHeadLocId, // äº¤è´§åœ°ç‚¹
            InventoryDept = erpDto.FRetDeptId, // åº“存部门
            InventoryGroup = erpDto.FStockerGroupId, // åº“存组
            WarehouseManager = erpDto.FStockerId, // ä»“管员
            SalesGroup = erpDto.FSaleGroupId, // é”€å”®ç»„
            SalesPerson = erpDto.FSalesManId, //销售员
            Receiver = erpDto.FReceiveCusId, // æ”¶è´§æ–¹
            ReceiverContact = erpDto.FReceiveCusContact, // æ”¶è´§æ–¹è”系人
            ReceiverAddress = erpDto.FReceiveAddress, // æ”¶è´§æ–¹åœ°å€
            ReceiverName = erpDto.FLinkMan, // æ”¶è´§æ–¹å§“名
            SettleParty = erpDto.FSettleCusId, // ç»“ç®—æ–¹
            CreatedBy = erpDto.FCreatorId, // åˆ›å»ºäºº
            CreatedDate = ParseDateTime(erpDto.FCreateDate) ?? null, // åˆ›å»ºæ—¶é—´
            ModifiedBy = erpDto.FModifierId, // ä¿®æ”¹äºº
            ModifiedDate = ParseDateTime(erpDto.FModifyDate) ?? null, // ä¿®æ”¹æ—¶é—´
            ClosedBy = erpDto.FCloserId, // å…³é—­äºº
            CloseReason = erpDto.FCloseReason, // å…³é—­åŽŸå› 
            CloseDate = ParseDateTime(erpDto.FCloseDate) ?? null, // å…³é—­æ—¥æœŸ
            ApprovedBy = erpDto.FApproverId, // å®¡æ ¸äºº
            ApprovedDate = ParseDateTime(erpDto.FApproveDate) ?? null, // å®¡æ ¸æ—¥æœŸ
            CancelStatus = erpDto.FCancelStatus, // ä½œåºŸçŠ¶æ€
            CancelledBy = erpDto.FCancellerId, // ä½œåºŸäºº
            CancelDate = ParseDateTime(erpDto.FCancelDate) ?? null, // ä½œåºŸæ—¥æœŸ
            CloseStatus = erpDto.FBillCloseStatus, // å…³é—­çŠ¶æ€
            BillStatus = erpDto.FDocumentStatus //单据状态
        };
        var single = base.GetSingle(it => it.ErpId == erpDto.ErpID);
        if (single != null) salesOrder.Id = single.Id;
        return salesOrder;
    }
    private List<SalesReturnNoticeDetail> ConvertErpToSalesReturnDetail(
        List<ErpSalesReturnDetailDto> erpDtoList)
    {
        var salesOrderSubList =
            new List<SalesReturnNoticeDetail>();
        DateTime parsedDate;
        // æ—¶é—´æ ¼å¼è½¬æ¢å‡½æ•°ï¼ŒERP时间格式为 "yyyy-MM-dd HH:mm:ss"
        DateTime? ParseDateTime(string dateStr)
        {
            if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out parsedDate))
                return parsedDate;
            return null; // å¦‚果转换失败,返回null
        }
        foreach (var erpDto in erpDtoList)
        {
            var salesOrderSub = new SalesReturnNoticeDetail
            {
                ErpLineId = erpDto.ErpID, //ERP行ID
                ErpHeadId = erpDto.EHID, //ERP头ID
                MaterialId = erpDto.FMaterialId, //物料编号
                SalesUnitId = erpDto.FUnitID, //销售单位
                SalesQuantity = Convert.ToDecimal(erpDto.FQty), //销售数量
                IsFree = erpDto.FIsFree, //是否赠品
                ReturnDate = ParseDateTime(erpDto.FDeliverydate), //退货日期
                Warehouse = erpDto.FStockId, //仓库
                PlanTrackingNumber = erpDto.FMtoNo, //计划跟踪号
                LotNumber = erpDto.FLot, //批号
                Note = erpDto.FEntryDescription, //备注
                ReturnType = erpDto.FRmType, //退货类型
                InventoryUnit = erpDto.FStockUnitID, //库存单位
                InventoryQuantity = Convert.ToDecimal(erpDto.FStockQty), //库存数量
                OwnerTypeId = erpDto.FOwnerTypeID, //货主类型
                OwnerId = erpDto.FOwnerId, //货主
                SourceBillType = erpDto.FSrcType,
                SourceBillNo = erpDto.FSrcBillNo,
                OrderBillNo = erpDto.FOrderNo
            };
            var single = _SalesReturnDetailManager.GetSingle(it =>
                it.ErpLineId == salesOrderSub.ErpLineId);
            if (single != null) salesOrderSub.Id = single.Id;
            salesOrderSubList.Add(salesOrderSub);
        }
        return salesOrderSubList;
    }
    //这里面写的代码不会给覆盖,如果要重新生成请删除 SalesReturnNoticeManager.cs
MESApplication/Controllers/BasicData/SalesReturnNoticeController.cs
@@ -1,8 +1,11 @@
using System.Dynamic;
using Microsoft.AspNetCore.Mvc;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using MES.Service.service;
using MES.Service.service.BasicData;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace MESApplication.Controllers.BasicData;
@@ -10,8 +13,107 @@
[Route("api/[controller]")]
public class SalesReturnNoticeController : ControllerBase
{
    private readonly MessageCenterManager _manager = new();
    private readonly SalesReturnNoticeManager m = new();
    private readonly string METHOD = "POST";
    private readonly string TableName = "SALES_RETURN_NOTICE";
    private readonly string URL =
        "http://localhost:10054/api/SalesReturnNotice/";
    //
    [HttpPost("Save")]
    public ResponseResult Save(ErpSalesReturn salesOrder)
    {
        var entity = new MessageCenter();
        entity.TableName = TableName;
        entity.Url = URL + "Save";
        entity.Method = METHOD;
        entity.Route = salesOrder.OrderDto.FBillNo;
        entity.Data = JsonConvert.SerializeObject(salesOrder);
        entity.Status = 1;
        entity.CreateBy = "PL017";
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var save = m.Save(salesOrder);
            resultInfos.tbBillList = save;
            entity.Result = 0;
            if (save) entity.Result = 1;
            entity.DealWith = 1;
            _manager.save(entity);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            entity.Result = 0;
            entity.DealWith = 0;
            entity.ResultData = ex.Message;
            _manager.save(entity);
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("SaveList")]
    public ResponseResult SaveList(List<ErpSalesReturn> units)
    {
        var entity = new MessageCenter();
        entity.TableName = TableName;
        entity.Url = URL + "SaveList";
        entity.Method = METHOD;
        entity.Data = JsonConvert.SerializeObject(units);
        entity.Status = 1;
        entity.CreateBy = "PL017";
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var save = m.SaveList(units);
            resultInfos.tbBillList = save;
            entity.Result = 0;
            if (save) entity.Result = 1;
            entity.DealWith = 1;
            _manager.save(entity);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            entity.Result = 0;
            entity.DealWith = 0;
            entity.ResultData = ex.Message;
            _manager.save(entity);
            return ResponseResult.ResponseError(ex);
        }
    }
    /***进入模版管理可以修改模版***/