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 { 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 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 GetMesShtzdDetail(List 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 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 details) { var exists = db.Queryable().Any(x => x.ID == header.ID); if (exists) { db.Updateable(header).ExecuteCommand(); db.Deleteable().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 details) { db.Updateable(header).ExecuteCommand(); db.Deleteable().Where(x => x.Eid == header.ID).ExecuteCommand(); foreach (var item in details) { item.Eid = header.ID; } db.Insertable(details).ExecuteCommand(); return true; } } }