using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using MES.Service.DB;
|
using MES.Service.Modes;
|
using MES.Service.Dto.webApi;
|
|
namespace MES.Service.service
|
{
|
public class ShtzdManager : Repository<Shtzd>
|
{
|
public bool Save(Sh sh)
|
{
|
var SH = sh.ErpShtzd;
|
var mesShtzd = GetMesShtzd(SH);
|
var shtzdDetails = GetMesShtzdDetail(sh.ErpShzdDetail);
|
|
return UseTransaction(db =>
|
{
|
return SH.Type switch
|
{
|
"2" or "4" or "5" => SaveOrUpdateData(db, mesShtzd, shtzdDetails) ? 1 : 0,
|
"3" => UpdateData(db, mesShtzd, shtzdDetails) ? 1 : 0,
|
_ => throw new NotImplementedException($"类型 Type = {SH.Type} 不存在")
|
};
|
}) > 0;
|
}
|
public bool SaveList(List<Sh> shList)
|
{
|
return UseTransaction(db =>
|
{
|
foreach (var sh in shList)
|
{
|
var SH = sh.ErpShtzd;
|
var mesShtzd = GetMesShtzd(SH);
|
var shtzdDetails = GetMesShtzdDetail(sh.ErpShzdDetail);
|
|
switch (SH.Type)
|
{
|
case "2":
|
case "4":
|
case "5":
|
SaveOrUpdateData(db, mesShtzd, shtzdDetails);
|
break;
|
case "3":
|
UpdateData(db, mesShtzd, shtzdDetails);
|
break;
|
default:
|
throw new NotImplementedException($"类型 Type = {SH.Type} 暂不支持处理");
|
}
|
}
|
return shList.Count;
|
}) > 0;
|
}
|
|
public Shtzd GetMesShtzd(ErpShzd sh)
|
{
|
return new Shtzd
|
{
|
ID = Convert.ToInt32(sh.ERPID),
|
Deliveryno = sh.FBillNo,
|
Depotno = sh.FStockID,
|
Supplierid = sh.FSupplierId,
|
Fdate = sh.FDate,
|
Remark = sh.FNote,
|
FZjxfSfgx = sh.F_ZJXF_sfgx
|
};
|
}
|
|
public List<ShtzdDetail> GetMesShtzdDetail(List<ErpShzdDetail> erpShzdDetails)
|
{
|
return erpShzdDetails.Select(s => new ShtzdDetail
|
{
|
Erpid = Convert.ToInt32(s.ERPID),
|
Eid = Convert.ToInt32(s.EID),
|
Lineno = s.LineNo,
|
Fbillno = s.FORDERBILLNO,
|
Productcode = s.FMATERIALID,
|
Purchaseqty = s.FPOQTY,
|
Deliveryqty = s.FACTRECEIVEQTY,
|
Includeqty = s.FACTREQTY,
|
Purchaseunit = s.FUNITID,
|
Inventoryunit = s.FSTOCKUNITID,
|
Remark = s.FDESCRIPTION,
|
Salesorderid = s.FSRCBILLNO,
|
Orderlineid = s.FSRCENTRYID,
|
Fxshth = s.FXSHTH,
|
Fmtono = s.FMtoNo,
|
Flot = s.FLot
|
}).ToList();
|
}
|
|
protected int UseTransaction(Func<SqlSugarScope, int> action)
|
{
|
try
|
{
|
Db.Ado.BeginTran();
|
var affectedRows = action.Invoke(Db);
|
Db.Ado.CommitTran();
|
return affectedRows;
|
}
|
catch (Exception)
|
{
|
Db.Ado.RollbackTran();
|
throw;
|
}
|
}
|
|
private bool SaveOrUpdateData(SqlSugarScope db, Shtzd header, List<ShtzdDetail> details)
|
{
|
var exists = db.Queryable<Shtzd>().Any(x => x.ID == header.ID);
|
if (exists)
|
{
|
db.Updateable(header).ExecuteCommand();
|
db.Deleteable<ShtzdDetail>().Where(x => x.Eid == header.ID).ExecuteCommand();
|
}
|
else
|
{
|
db.Insertable(header).ExecuteCommand();
|
}
|
|
foreach (var item in details)
|
{
|
item.Eid = header.ID;
|
}
|
db.Insertable(details).ExecuteCommand();
|
return true;
|
}
|
|
private bool UpdateData(SqlSugarScope db, Shtzd header, List<ShtzdDetail> details)
|
{
|
db.Updateable(header).ExecuteCommand();
|
db.Deleteable<ShtzdDetail>().Where(x => x.Eid == header.ID).ExecuteCommand();
|
|
foreach (var item in details)
|
{
|
item.Eid = header.ID;
|
}
|
db.Insertable(details).ExecuteCommand();
|
return true;
|
}
|
}
|
}
|