using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; using System.Security.Cryptography; namespace MES.Service.service.BasicData; public class MesDeliveryNoteManager : Repository { private readonly MesDeliveryDetailsManager mesDeliveryNoteManager= new (); // Save 方法用于保存单个 RohIn 记录,根据类型执行不同的操作 public bool Save(Delivery delivery) { var erpDelivery = delivery.ErpDelivery; var mesDeliveryNote = GetMesDeliveryNote(erpDelivery); var mesDeliveryNoteDetails = GetMesDeliveryNoteDetails(delivery.ErpDeliveryData, erpDelivery.DeliveryNo, mesDeliveryNote.Status); return UseTransaction(db => { switch (erpDelivery.Type) { case "2": case "4": case "5": return SaveOrUpdateData(db, mesDeliveryNote, mesDeliveryNoteDetails) ? 1 : 0; case "3": case "6": return DeleteData(db, mesDeliveryNote, mesDeliveryNoteDetails) ? 1: 0; default: throw new NotImplementedException( $"type没有{erpDelivery.Type}这个类型"); } }) > 0; } // 插入数据的方法 private bool InsertData(SqlSugarScope db, MesDeliveryNote mesDeliveryNote,List mesDeliveryNoteDetails) { var decimals = mesDeliveryNoteDetails.Select(s => s.Id).ToArray(); if (mesDeliveryNote.Id != null) base.DeleteById(mesDeliveryNote.Id); if (decimals.Length > 0) db.Deleteable().In(decimals).ExecuteCommand(); var insert = base.Insert(mesDeliveryNote); var insertRange = mesDeliveryNoteManager.InsertRange(mesDeliveryNoteDetails); if (insert && insertRange) return true; throw new NotImplementedException("插入失败"); } // 更新数据的方法 private bool DeleteData(SqlSugarScope db, MesDeliveryNote mesDeliveryNote,List mesDeliveryNoteDetails) { var decimals = mesDeliveryNoteDetails.Select(s => s.Id).ToArray(); var update = base.DeleteById(mesDeliveryNote.Id); var insertOrUpdate = db.Deleteable().Where(s => s.DeliveryNo == mesDeliveryNote.DeliveryNo).ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("删除失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, MesDeliveryNote mesDeliveryNote,List mesDeliveryNoteDetails) { if (mesDeliveryNote.Id != null) base.DeleteById(mesDeliveryNote.Id); if (mesDeliveryNoteDetails.Count > 0) db.Deleteable().Where(s => s.DeliveryNo == mesDeliveryNote.DeliveryNo).ExecuteCommand(); var orUpdate = base.Insert(mesDeliveryNote); var baOrUpdate = mesDeliveryNoteManager.InsertRange(mesDeliveryNoteDetails); if (orUpdate && baOrUpdate) return true; throw new NotImplementedException("插入或更新失败"); } // 批量保存记录的方法 public bool SaveList(List deliveries) { var result = deliveries.Select(Save).ToList(); return result.All(b => b); } public MesDeliveryNote GetMesDeliveryNote(ErpDelivery delivery) { var mesDeliveryNote = new MesDeliveryNote(); var single = base.GetSingle(it => it.DeliveryNo == delivery.DeliveryNo); if (single != null) mesDeliveryNote.Id = single.Id; mesDeliveryNote.DeliveryNo = delivery.DeliveryNo; mesDeliveryNote.SuppNo = delivery.SupplierId; mesDeliveryNote.DeliveryDate = delivery.FDate; mesDeliveryNote.Remark = delivery.Remark; if (single != null) { mesDeliveryNote.Status = single.Status; mesDeliveryNote.CheckUser = single.CheckUser; mesDeliveryNote.CheckDate = single.CheckDate; } else { mesDeliveryNote.Status =0; } mesDeliveryNote.CreateDate = DateTime.Now; mesDeliveryNote.DepotNo = delivery.DepotNo; mesDeliveryNote.ErpId = delivery.ErpId; return mesDeliveryNote; } public List GetMesDeliveryNoteDetails(List erpDeliveryDatas, string? type,decimal? status) { return erpDeliveryDatas.Select(s => { var entity = new MesDeliveryNoteDetails { DeliveryNo = type, LineNo = Convert.ToDecimal(s.LineNo), ErpNo = s.FBillNo, PoLineNo = s.OrderlineId, ProductCode = s.ProductCode, SlUnit = s.PurchaseUnit, KcUnit = s.InventoryUnit, DeliveryQty = Convert.ToDecimal(s.DeliveryQty), Remark = s.Remark, CreateDate = DateTime.Now, SaleOrder = s.FXSHTH, PurchaseQty = Convert.ToDecimal(s.PurchaseQty), IncludeQty = Convert.ToDecimal(s.IncludeQty), Fsrcbill_no = s.SalesOrderId, RealQty = Convert.ToDecimal(s.IncludeQty) }; var single = mesDeliveryNoteManager.GetSingle(it =>it.LineNo == entity.LineNo); if (single !=null && status==1) entity.RealQty = single.RealQty; return entity; }).ToList(); } }