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, rohInErpRohIn.Type);
|
|
return UseTransaction(db =>
|
{
|
switch (rohInErpRohIn.Type)
|
{
|
// case "2":
|
// return InsertData(db, mesRohIn, mesRohInDatas,
|
// rohInErpRohIn.FBILLTYPE)
|
// ? 1
|
// : 0;
|
case "3":
|
return UpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0;
|
case "2":
|
case "4":
|
return SaveOrUpdateData(db, mesRohIn, mesRohInDatas)
|
? 1
|
: 0;
|
default:
|
throw new NotImplementedException(
|
$"type没有{rohInErpRohIn.Type}这个类型");
|
}
|
}) > 0;
|
}
|
|
// 插入数据的方法
|
private bool InsertData(SqlSugarScope db, MesRohIn mesRohIn,
|
List<MesRohInData> mesRohInDatas, string FBILLTYPE)
|
{
|
switch (FBILLTYPE)
|
{
|
case "A":
|
{
|
var decimals = mesRohInDatas.Select(s => s.Id).ToArray();
|
|
if (mesRohIn.Id != null) base.DeleteById(mesRohIn.Id);
|
|
if (decimals.Length > 0)
|
db.Deleteable<MesRohInData>().In(decimals).ExecuteCommand();
|
|
var insert = base.Insert(mesRohIn);
|
var insertRange =
|
rohInDataManager.InsertRange(mesRohInDatas);
|
|
if (insert && insertRange) return true;
|
throw new NotImplementedException("插入失败");
|
}
|
case "B":
|
{
|
var decimals = mesRohInDatas.Select(s => s.Id).ToArray();
|
if (base.DeleteById(mesRohIn.Id) && db
|
.Deleteable<MesRohInData>().In(decimals)
|
.ExecuteCommand() > 0)
|
{
|
var insert = base.Insert(mesRohIn);
|
var insertRange =
|
rohInDataManager.InsertRange(mesRohInDatas);
|
|
if (insert && insertRange) return true;
|
throw new NotImplementedException("插入失败");
|
}
|
|
break;
|
}
|
}
|
|
throw new NotImplementedException("采购订单类型错误");
|
}
|
|
// 更新数据的方法
|
private bool UpdateData(SqlSugarScope db, MesRohIn mesRohIn,
|
List<MesRohInData> mesRohInDatas)
|
{
|
|
//根据单别和单号进行删除
|
var update = db.Deleteable<MesRohIn>()
|
.Where(it => it.BillNo == mesRohIn.BillNo &&
|
it.DocumentType == mesRohIn.DocumentType)
|
.ExecuteCommand() > 0;
|
|
|
var mesRohInData = mesRohInDatas.Select(s => new { billno = s.BillNo, billnotype = s.Billnotype, seqno = s.OrderLineId }).ToList();
|
|
|
|
|
var insertOrUpdate = db.Deleteable<MesRohInData>().Where(it => mesRohInData.Any(p => p.billno == it.BillNo && p.billnotype == it.Billnotype && p.seqno == it.OrderLineId)).ExecuteCommand() > 0;
|
|
if (update && insertOrUpdate) return true;
|
throw new NotImplementedException("更新失败");
|
|
}
|
|
// 插入或更新数据的方法
|
private bool SaveOrUpdateData(SqlSugarScope db, MesRohIn mesRohIn,
|
List<MesRohInData> mesRohInDatas)
|
{
|
if (mesRohIn.BillNo != null && mesRohIn.DocumentType != null)
|
{
|
|
db.Deleteable<MesRohIn>()
|
.Where(it => it.BillNo == mesRohIn.BillNo &&
|
it.DocumentType == mesRohIn.DocumentType)
|
.ExecuteCommand();
|
|
};
|
|
|
if (mesRohInDatas.Count > 0)
|
{
|
|
var mesRohInData = mesRohInDatas.Select(s => new { billno = s.BillNo, billnotype = s.Billnotype, seqno = s.OrderLineId }).ToList();
|
|
db.Deleteable<MesRohInData>()
|
.Where(it => mesRohInData.Any(p => p.billno == it.BillNo
|
&& p.billnotype == it.Billnotype
|
&& p.seqno == it.OrderLineId))
|
.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 对象的方法
|
public MesRohIn GetMesRohIn(ErpRohIn rohIn)
|
{
|
//var eid = Convert.ToDecimal(rohIn.id);
|
var mesRohIn = new MesRohIn();
|
|
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.Purchaser = rohIn.FPurchaserId;
|
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.ErpCheckBy = rohIn.FApproverId;
|
mesRohIn.ErpCheckDate = rohIn.FApproveDate;
|
mesRohIn.Changereason = rohIn.FCHANGEREASON;
|
return mesRohIn;
|
}
|
|
// 将 ErpRohinData 对象转换为 MesRohInData 对象的方法
|
public List<MesRohInData> GetMesRohInDatas(
|
List<ErpRohinData> erpRohinDatas, string type)
|
{
|
return erpRohinDatas.Select(s =>
|
{
|
|
|
|
|
var entity = new MesRohInData
|
{
|
|
Billnotype = s.FBillTypeID, //采购单别
|
BillNo = s.FBillNo,
|
OrderLineId = s.FDEMANDBILLENTRYSEQ,
|
SalesOrderId = s.F_UNW_Text_xsddh,
|
ItemId = s.FMaterialId,
|
PurchaseUnit = s.FUnitId,
|
PurchaseQty = Convert.ToDecimal(s.FQty),
|
InventoryUnit = s.FStockUnitID,
|
DeliveryDate = DateTime.ParseExact(s.FDeliveryDate,"yyyy-MM-dd HH:mm:ss", null),
|
BusinessClose = s.FMRPCloseStatus,
|
TerminateTime = !string.IsNullOrEmpty(s.FTerminateDate) ? DateTime.ParseExact(s.FTerminateDate, "yyyy-MM-dd HH:mm:ss", null) : (DateTime?)null,
|
SourceDocumentType = s.FSrcBillTypeId,
|
Remarks = s.FEntryNote,
|
SupplierItemCode = s.FSupMatId,
|
SupplierItemName = s.FSupMatName,
|
TotalReceivedQty = Convert.ToDecimal(s.FReceiveQty),
|
RemainingReceivedQty =
|
Convert.ToDecimal(s.FRemainReceiveQty),
|
TotalStoredQty = Convert.ToDecimal(s.FStockInQty),
|
RemainingStoredQty = Convert.ToDecimal(s.FRemainStockINQty),
|
TotalReturnedQty = Convert.ToDecimal(s.FMrbQty),
|
ReturnableReceivedQty = Convert.ToDecimal(s.FCHECKRETQTY),
|
SourceDocumentId = s.FSrcBillNo,
|
DemandTrackingId = s.FReqTraceNo,
|
DepotCode = s.FDepotCode,
|
DepotName = s.FDepotName,
|
URGENT_MATERIAL = s.FUrgent_material
|
};
|
|
|
|
return entity;
|
}).ToList();
|
}
|
|
|
|
|
public bool Delete(YFDelete data)
|
{
|
|
|
return UseTransaction(db =>
|
{
|
var update = db.Deleteable<MesRohIn>()
|
.Where(it => it.BillNo == data.FBillNo &&
|
it.DocumentType == data.FBillTypeID)
|
.ExecuteCommand() > 0;
|
|
var insertOrUpdate = db.Deleteable<MesRohInData>()
|
.Where(it => it.BillNo == data.FBillNo &&
|
it.Billnotype == data.FBillTypeID)
|
.ExecuteCommand() > 0;
|
|
|
|
if (update && insertOrUpdate) return 1;
|
throw new NotImplementedException("删除失败");
|
}) > 0;
|
|
|
}
|
|
|
}
|