using MES.Service.DB;
|
using MES.Service.Dto.webApi;
|
using MES.Service.Modes;
|
using SqlSugar;
|
|
namespace MES.Service.service.BasicData;
|
|
public class MesDeliveryNoteManager : Repository<MesDeliveryNote>
|
{
|
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 DeleteData(SqlSugarScope db, MesDeliveryNote mesDeliveryNote,
|
List<MesDeliveryNoteDetails> mesDeliveryNoteDetails)
|
{
|
var decimals = mesDeliveryNoteDetails.Select(s => s.Id).ToArray();
|
var update = base.DeleteById(mesDeliveryNote.Id);
|
var insertOrUpdate = db.Deleteable<MesDeliveryNoteDetails>()
|
.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> mesDeliveryNoteDetails)
|
{
|
if (mesDeliveryNote.Id != null) base.DeleteById(mesDeliveryNote.Id);
|
|
if (mesDeliveryNoteDetails.Count > 0)
|
db.Deleteable<MesDeliveryNoteDetails>()
|
.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<Delivery> 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;
|
mesDeliveryNote.F_ZJXF_SFGX = delivery.F_ZJXF_sfgx;
|
|
return mesDeliveryNote;
|
}
|
|
public List<MesDeliveryNoteDetails> GetMesDeliveryNoteDetails(
|
List<ErpDeliveryData> 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),
|
FMTONO = s.FMtoNo,
|
FLOT = s.FLot,
|
F_SLTZ_SCTZDA = s.F_SLTZ_SCTZDA
|
};
|
var single =
|
mesDeliveryNoteManager.GetSingle(it =>
|
it.LineNo == entity.LineNo);
|
if (single != null && status == 1) entity.RealQty = single.RealQty;
|
|
return entity;
|
}).ToList();
|
}
|
}
|