using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; namespace MES.Service.service { public class DbckaManager : Repository { public bool SaveList(List list) { var result = list.Select(Save).ToList(); return result.All(b => b); } public bool Save(ERPDBCK data) { var head = MapErpDbckaToDbcka(data.erpDbcka); var details = MapErpDbckbToDbckb(data.erpDbckB); return UseTransaction(db => { switch (data.erpDbcka.type) { case "3": return UpdateData(db, head, details) ? 1 : 0; case "2": case "4": case "5": return SaveOrUpdateData(db, head, details) ? 1 : 0; default: throw new NotImplementedException($"type没有 {data.erpDbcka.type} 这个类型"); } }) > 0; } private Dbcka MapErpDbckaToDbcka(ErpDBCKA dto) { var entity = new Dbcka { Billno = dto.billno, DjLx = dto.dj_lx, DbLx1 = dto.db_lx1, DbFx = dto.db_fx, DbLx = dto.db_lx, YwLx = dto.yw_lx, DjZt = dto.dj_zt, SqBm = dto.sq_bm, SqZz = dto.sq_zz, SqTime = DateTime.TryParse(dto.sq_time, out var d) ? d : null, DcHz = dto.dc_hz, Bz = dto.bz, Type = dto.type, Erpid = dto.erpid, CreateDate = DateTime.Now }; var single = base.GetSingle(it => it.Erpid == entity.Erpid); if (single != null) entity.Id = single.Id; return entity; } private List MapErpDbckbToDbckb(List list) { var result = new List(); foreach (var dto in list) { var item = new Dbckb { Itemid = dto.itemid, Unit = dto.unit, Quantity = decimal.TryParse(dto.quantity, out var qty) ? qty : null, DcOrg = dto.dc_org, DcDepot = dto.dc_depot, DrOrg = dto.dr_org, DrDepot = dto.dr_depot, DcHz = dto.dc_hz, DrHz = dto.dr_hz, Bz = dto.bz, Erpid = dto.erpid, Eid = dto.eid }; var existing = Db.Queryable().Where(s => s.Erpid == item.Erpid).Single(); if (existing != null) item.Id = existing.Id; result.Add(item); } return result; } private bool SaveOrUpdateData(SqlSugarScope db, Dbcka head, List details) { if (head.Id != null) base.DeleteById(head.Id); db.Deleteable() .Where(d => d.Eid == head.Erpid) .ExecuteCommand(); var insertedHead = db.Insertable(head) .IgnoreColumns(true) .ExecuteReturnEntity(); foreach (var item in details) item.Pid = Convert.ToDecimal(insertedHead.Id); var success = db.Insertable(details) .PageSize(10) .IgnoreColumnsNull() .ExecuteCommand() > 0; return insertedHead.Id != null && success; } private bool UpdateData(SqlSugarScope db, Dbcka head, List details) { var ids = details.Select(d => d.Id).ToArray(); var deletedHead = base.DeleteById(head.Id); var deletedDetails = db.Deleteable().In(ids).ExecuteCommand() > 0; return deletedHead && deletedDetails; } } }