1
啊鑫
2024-10-23 cdb8ca3f97ded53176a7b5a967932335ea0ac6e1
MES.Service/service/BasicData/MesRohInManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
namespace MES.Service.service.BasicData;
public class MesRohInManager : Repository<MesRohIn>
{
    private readonly MesRohInDataManager rohInDataManager = new();
    // Save æ–¹æ³•用于保存单个 RohIn è®°å½•,根据类型执行不同的操作
    public bool Save(RohIn rohIn)
    {
        var rohInErpRohIn = rohIn.ErpRohIn;
        var mesRohIn = GetMesRohIn(rohInErpRohIn);
        var mesRohInDatas =
            GetMesRohInDatas(rohIn.ErpRohinDatas);
        return UseTransaction(db =>
        {
            return rohInErpRohIn.Type switch
            {
                "2" or "4" or "5" => SaveOrUpdateData(db, mesRohIn,
                    mesRohInDatas)
                    ? 1
                    : 0,
                "3" => UpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0,
                _ => throw new NotImplementedException(
                    $"type没有{rohInErpRohIn.Type}这个类型")
            };
        }) > 0;
    }
    // æ›´æ–°æ•°æ®çš„æ–¹æ³•
    private bool UpdateData(SqlSugarScope db, MesRohIn mesRohIn,
        List<MesRohInData> mesRohInDatas)
    {
        var decimals = mesRohInDatas.Select(s => s.Id).ToArray();
        var update = db.Deleteable<MesRohIn>()
            .Where(a => a.Id == mesRohIn.Id)
            .ExecuteCommand() > 0;
        var insertOrUpdate = db
            .Deleteable<MesRohInData>()
            .Where(s => decimals.Contains(s.Id))
            .ExecuteCommand() > 0;
        if (update && insertOrUpdate) return true;
        throw new NotImplementedException("更新失败");
    }
    // æ’入或更新数据的方法
    private bool SaveOrUpdateData(SqlSugarScope db, MesRohIn mesRohIn,
        List<MesRohInData> mesRohInDatas)
    {
        if (mesRohIn.Id != null)
            db.Deleteable<MesRohIn>().Where(s => s.Id == mesRohIn.Id)
                .ExecuteCommand();
        if (mesRohInDatas.Count > 0)
            db.Deleteable<MesRohInData>()
                .Where(s => s.ErpId == mesRohIn.EbelnK3id).ExecuteCommand();
        var orUpdate = base.Insert(mesRohIn);
        var baOrUpdate = rohInDataManager.InsertRange(mesRohInDatas);
        if (orUpdate && baOrUpdate) return true;
        throw new NotImplementedException("插入或更新失败");
    }
    // æ‰¹é‡ä¿å­˜è®°å½•的方法
    public bool SaveList(List<RohIn> rohIns)
    {
        var result = rohIns.Select(Save).ToList();
        return result.All(b => b);
    }
    // å°† ErpRohIn å¯¹è±¡è½¬æ¢ä¸º MesRohIn å¯¹è±¡çš„æ–¹æ³•
    private MesRohIn GetMesRohIn(ErpRohIn rohIn)
    {
        var eid = long.Parse(rohIn.id);
        var mesRohIn = new MesRohIn();
        var single = base.GetSingle(it => it.EbelnK3id == eid);
        if (single != null) mesRohIn.Id = single.Id;
        mesRohIn.EbelnK3id = eid;
        mesRohIn.BillNo = rohIn.FBillNo;
        mesRohIn.DocumentStatus = rohIn.FDocumentStatus;
        mesRohIn.DocumentType = rohIn.FBillTypeID;
        mesRohIn.BusinessType = rohIn.FBusinessType;
        if (rohIn.FDate != null)
            mesRohIn.PurchaseDate = DateTime.ParseExact(rohIn.FDate,
                "yyyy-MM-dd HH:mm:ss", null);
        mesRohIn.Supplier = rohIn.FSupplierId;
        mesRohIn.CloseStatus = rohIn.FCloseStatus;
        mesRohIn.PurchaseOrg = rohIn.FPurchaseOrgId;
        mesRohIn.PurchaseDept = rohIn.FPurchaseDeptId;
        mesRohIn.PurchaseGroup = rohIn.FPurchaserGroupId;
        mesRohIn.Purchaser = rohIn.FPurchaserId;
        mesRohIn.SettlementParty = rohIn.FSettleId;
        mesRohIn.PaymentParty = rohIn.FChargeId;
        mesRohIn.Emall = rohIn.FProviderEMail;
        mesRohIn.Remarks = rohIn.F_XIFG_Text_qtr1;
        mesRohIn.CancellationStatus = rohIn.FCancelStatus;
        mesRohIn.CancellationPerson = rohIn.FCancellerId;
        if (rohIn.FCancelDate != null)
            mesRohIn.CancellationDate =
                DateTime.ParseExact(rohIn.FCancelDate,
                    "yyyy-MM-dd HH:mm:ss", null);
        mesRohIn.CreateBy = rohIn.FCreatorId;
        if (rohIn.FCreateDate != null)
            mesRohIn.CreateDate = DateTime.ParseExact(rohIn.FCreateDate,
                "yyyy-MM-dd HH:mm:ss", null);
        mesRohIn.LastupdateBy = rohIn.FModifierId;
        if (rohIn.FModifyDate != null)
            mesRohIn.LastupdateDate = DateTime.ParseExact(rohIn.FModifyDate,
                "yyyy-MM-dd HH:mm:ss", null);
        mesRohIn.ErpCheckBy = rohIn.FApproverId;
        mesRohIn.ErpCheckDate = rohIn.FApproveDate;
        mesRohIn.Changereason = rohIn.FChangeReason;
        mesRohIn.Prearrivaldate = rohIn.FPREARRIVALDATE != null
            ? DateTime.ParseExact(rohIn.FPREARRIVALDATE,
                "yyyy-MM-dd HH:mm:ss", null)
            : null;
        mesRohIn.ReceiveOrgId = rohIn.FReceiveOrgId;
        mesRohIn.Remark1 = rohIn.F_XIFG_PrintTimes_qtr;
        return mesRohIn;
    }
    // å°† ErpRohinData å¯¹è±¡è½¬æ¢ä¸º MesRohInData å¯¹è±¡çš„æ–¹æ³•
    private List<MesRohInData> GetMesRohInDatas(
        List<ErpRohinData> erpRohinDatas)
    {
        return erpRohinDatas.Select(s =>
        {
            var entity = new MesRohInData
            {
                EbelnK3id = Convert.ToDecimal(s.id),
                ErpId = Convert.ToDecimal(s.Eid),
                BillNo = s.FBillNo,
                SalesOrderId = s.F_XIFG_Text_k79,
                ItemId = s.FMaterialId,
                PurchaseUnit = s.FUnitId,
                PurchaseQty = Convert.ToDecimal(s.FQty),
                InventoryUnit = s.FStockUnitID,
                PricingUnit = s.FPriceUnitId,
                PricingQty = Convert.ToDecimal(s.FPriceUnitQty),
                DeliveryDate = s.FDeliveryDate != null
                    ? DateTime.ParseExact(s.FDeliveryDate,
                        "yyyy-MM-dd HH:mm:ss", null)
                    : null,
                EarliestDeliveryDate = s.FDeliveryEarlyDate != null
                    ? DateTime.ParseExact(s.FDeliveryEarlyDate,
                        "yyyy-MM-dd HH:mm:ss", null)
                    : null,
                LatestDeliveryDate = s.FDeliveryLastDate != null
                    ? DateTime.ParseExact(s.FDeliveryLastDate,
                        "yyyy-MM-dd HH:mm:ss", null)
                    : null,
                DemandOrg = s.FRequireOrgId,
                DemandDepartment = s.FRequireDeptId,
                ReceivingOrg = s.FReceiveOrgId,
                ReceivingDepartment = s.FReceiveDeptId,
                SettlementOrg = s.FEntrySettleOrgId,
                IsGift = s.FGiveAway,
                Remarks = s.FEntryNote,
                SupplierItemCode = s.FSupMatId,
                SupplierItemName = s.FSupMatName,
                OutsourcingOrderId = s.FSUBREQBILLNO,
                BatchNumber = s.FLot,
                BusinessClose = s.FMRPCloseStatus,
                BusinessFreeze = s.FMRPFreezeStatus,
                Freezer = s.FFreezerId,
                FreezeTime = s.FFreezeDate != null
                    ? DateTime.ParseExact(s.FFreezeDate,
                        "yyyy-MM-dd HH:mm:ss", null)
                    : null,
                BusinessTerminate = s.FMRPTerminateStatus,
                Terminator = s.FTerminaterId,
                TerminateTime = s.FTerminateDate != null
                    ? DateTime.ParseExact(s.FTerminateDate,
                        "yyyy-MM-dd HH:mm:ss", null)
                    : null,
                TotalReceivedQty = Convert.ToDecimal(s.FBASERECEIVEQTY), //累计收料数
                RemainingReceivedQty =
                    Convert.ToDecimal(s.FRemainReceiveQty),
                TotalStoredQty = Convert.ToDecimal(s.FBASESTOCKINQTY), //累计入库数
                RemainingStoredQty = Convert.ToDecimal(s.FRemainStockINQty),
                TotalReturnedQty = Convert.ToDecimal(s.FMrbQty),
                ReturnableReceivedQty =
                    Convert.ToDecimal(s.FBASECHECKRETQTY), //收料可退数
                ReturnableStoredQty =
                    Convert.ToDecimal(s.FBASESTOCKRETQTY), //库存可退数
                SourceDocumentType = s.FSrcBillTypeId,
                SourceDocumentId = s.FSourceBillNo,
                DemandTrackingId = s.FReqTraceNo,
                PlanTrackingId = s.FMtoNo,
                ChangeFlag = s.FChangeFlag,
                DemandSource = s.FDEMANDTYPE,
                DemandDocumentId = s.FDEMANDBILLNO,
                DemandDocumentLineId = s.FDEMANDBILLENTRYSEQ,
                prearrivaldate = s.FTerminateDate != null
                    ? DateTime.ParseExact(s.FPREARRIVALDATE,
                        "yyyy-MM-dd HH:mm:ss", null)
                    : null,
                Remark1 = s.F_XIFG_Text_ne1,
                Remark2 = s.F_XIFG_Text_6oq,
                Remark3 = s.F_XIFG_Base_c1c,
                Remark4 = s.F_XIFG_Text_qtr4
            };
            var single = rohInDataManager.GetSingle(it =>
                it.EbelnK3id == entity.EbelnK3id);
            if (single != null) entity.Id = single.Id;
            return entity;
        }).ToList();
    }
}