using MES.Service.DB;
|
using MES.Service.Dto.webApi;
|
using MES.Service.Modes;
|
using MES.Service.util;
|
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 =>
|
{
|
return rohInErpRohIn.Type switch
|
{
|
"2" or "4" or "5" => SaveOrUpdateData(db, mesRohIn,
|
mesRohInDatas)
|
? 1
|
: 0,
|
"3" => DeleteData(db, mesRohIn, mesRohInDatas) ? 1 : 0,
|
_ => throw new NotImplementedException(
|
$"type没有{rohInErpRohIn.Type}这个类型")
|
};
|
}) > 0;
|
}
|
|
// 更新数据的方法
|
private bool DeleteData(SqlSugarScope db, MesRohIn mesRohIn,
|
List<MesRohInData> mesRohInDatas)
|
{
|
var decimals = mesRohInDatas.Select(s => s.Id).ToArray();
|
|
//var update = base.DeleteById(mesRohIn.Id);
|
//var insertOrUpdate = db
|
// .Deleteable<MesRohInData>().In(decimals)
|
// .ExecuteCommand() > 0;
|
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) base.DeleteById(mesRohIn.Id);
|
|
if (mesRohInDatas.Count > 0)
|
db.Deleteable<MesRohInData>()
|
.Where(s => s.ErpId == mesRohIn.EbelnK3id).ExecuteCommand();
|
|
//var orUpdate = base.Insert(mesRohIn);
|
//var baOrUpdate = rohInDataManager.InsertRange(mesRohInDatas);
|
var orUpdate = db.Insertable(mesRohIn)
|
.IgnoreColumns(true).ExecuteCommand() > 0;
|
|
|
var baOrUpdate = db.Insertable(mesRohInDatas).PageSize(1)
|
.IgnoreColumnsNull()
|
.ExecuteCommand() > 0;
|
|
|
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 = rohIn.id;
|
var mesRohIn = new MesRohIn();
|
|
var single = base.GetSingle(it => it.EbelnK3id == eid);
|
if (single != null) mesRohIn.Id = single.Id;
|
|
var mesLinkU9 = Db.Queryable<MesLinkU9>()
|
.Where(s => s.U9Id == rohIn.FSupplierId
|
&& s.OrgId == rohIn.FReceiveOrgId
|
&& s.TableType == "MES_SUPPLIER").First();
|
|
if (mesLinkU9 != null)
|
{
|
mesRohIn.Supplier = mesLinkU9.MesId;
|
}
|
|
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.CloseStatus = rohIn.FCloseStatus;
|
mesRohIn.PurchaseOrg = rohIn.FPurchaseOrgId;
|
mesRohIn.PurchaseDept = rohIn.FPurchaseDeptId;
|
mesRohIn.Purchaser = rohIn.FPurchaserId;
|
|
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.PubDescSeg2;
|
mesRohIn.ReceiveOrg = rohIn.FReceiveOrgId;
|
mesRohIn.Remarks = rohIn.Remarks;
|
mesRohIn.SrcDocType = rohIn.FSrcDocType;
|
mesRohIn.SrcDoc = rohIn.FSrcDoc;
|
mesRohIn.TradePathName = rohIn.FTradePathName;
|
mesRohIn.SubType = rohIn.FSubType;
|
mesRohIn.IsReDo = short.Parse(rohIn.FIsReDo ?? "0");
|
mesRohIn.PrivateDescSeg1 = rohIn.PrivateDescSeg1;
|
mesRohIn.Version = rohIn.FVersion;
|
|
//作废的相关字段
|
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);
|
|
return mesRohIn;
|
}
|
|
// 将 ErpRohinData 对象转换为 MesRohInData 对象的方法
|
private List<MesRohInData> GetMesRohInDatas(
|
List<ErpRohinData> erpRohinDatas, string type)
|
{
|
return erpRohinDatas.DistinctByConcurrent(x => x.id).Select(s =>
|
{
|
var entity = new MesRohInData
|
{
|
EbelnK3id = s.id,
|
ErpId = s.Eid,
|
BillNo = s.FBillNo,
|
OrderLineId = s.FSeq,
|
BusinessFreeze = s.FStatus,
|
PurchaseOrderLineNumber = s.FSeq,
|
SalesOrderId = s.FDemandBillEntrySeq,
|
|
PurchaseUnit = s.FUnitId,
|
PurchaseQty = Convert.ToDecimal(s.FQty),
|
PricingUnit = s.FPriceUnitId,
|
PricingQty = Convert.ToDecimal(s.FPriceUnitQty),
|
Demand = s.FRequireOrgId,
|
Receiving = s.FReceiveOrgId,
|
ReceivingDept = s.FReceiveDeptId,
|
DemandOrg = s.FRequireOrgId,
|
ReceivingOrg = s.FReceiveOrgId,
|
IsGift = s.FGiveAway,
|
Remarks = s.FEntryNote,
|
BatchNumber = s.FLot,
|
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), //收料可退数
|
ReturnableStoredQty = Convert.ToDecimal(s.FSTOCKRETQTY), //库存可退数
|
SourceDocumentType = s.FSrcBillTypeId,
|
SourceDocumentId = s.FSrcBillNo,
|
DemandSource = s.FDemandType,
|
DemandDocumentId = s.FDemandBillNo,
|
DemandDocumentLineId = s.FDemandBillEntrySeq,
|
RdProject = s.RdProject,
|
ProjectPurchaser = s.ProjectPurchaser
|
};
|
|
if (s.FDeliveryDate != null)
|
entity.DeliveryDate =
|
DateTime.ParseExact(s.FDeliveryDate,
|
"yyyy-MM-dd HH:mm:ss", null);
|
|
var single = rohInDataManager.GetSingle(it =>
|
it.EbelnK3id == entity.EbelnK3id);
|
if (single != null) entity.Id = single.Id;
|
|
//ItemId = s.FMaterialId,
|
var mesLinkU9 = Db.Queryable<MesLinkU9>()
|
.Where(x => x.U9Id == s.FMaterialId
|
&& x.OrgId == s.FReceiveOrgId
|
&& x.TableType == "MES_ITEMS").First();
|
|
if (mesLinkU9 != null)
|
{
|
entity.ItemId = mesLinkU9.MesId;
|
}
|
|
|
var mesLinkU92 = Db.Queryable<MesLinkU9>()
|
.Where(x => x.U9Id == s.Project
|
&& x.OrgId == s.FReceiveOrgId
|
&& x.TableType == "MES_PROJECT").First();
|
|
if (mesLinkU92 != null)
|
{
|
entity.Project = mesLinkU92.MesId;
|
}
|
|
return entity;
|
}).ToList();
|
}
|
}
|