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 ZzcxdManager : Repository { public bool SaveList(List list) { var result = list.Select(Save).ToList(); return result.All(b => b); } public bool Save(ERPZZCXD data) { var head = MapErpToMesHead(data.ERPZZCXA); var details = MapErpDbckbToDbckb(data.ERPZZCXB); return UseTransaction(db => { switch (data.ERPZZCXA.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.ERPZZCXA.type} 这个类型"); } }) > 0; } private Zzcxa MapErpToMesHead(ERPZZCXA dto) { var entity = new Zzcxa { BillNo = dto.bill_no, // 单据编码 DjLx = dto.dj_lx, // 单据类型 KcZz = dto.kc_zz, // 库存组织 SwLx = dto.sw_lx, // 事务类型 Time = dto.time , // 日期 Bm = dto.bm, // 部门 Cgy = dto.cgy, // 仓管员 Kcz = dto.kcz, // 库存组 DjZt = dto.dj_zt, // 单据状态 Memo = dto.memo, // 备注 Cphzlx = dto.cphzlx, // 成品货主类型 Cphz = dto.cphz, // 成品货主 Zjhzlx = dto.zjhzlx, // 子件货主类型 Zjhz = dto.zjhz, // 子件货主 ItemId = string.IsNullOrEmpty(dto.item_id) ? null : Convert.ToDecimal(dto.item_id), // 物料编码id Qty = string.IsNullOrEmpty(dto.qty) ? null : Convert.ToDecimal(dto.qty), // 数量 Unit = dto.unit, // 单位 DepotId = dto.depot_id, // 仓库 Erpid = dto.erpid // ERP 主表id }; var single = Db.Queryable() .Where(it => it.Erpid == entity.Erpid) .First(); 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 Zzcxb { Erpid = dto.erpid, // ERP 主表id Eid = dto.eid, // ERP 单据头id ItemId = string.IsNullOrEmpty(dto.item_id) ? null : Convert.ToDecimal(dto.item_id), // 物料编码id Qty = string.IsNullOrEmpty(dto.qty) ? null : Convert.ToDecimal(dto.qty), // 数量 Unit = dto.unit, // 单位 DepotId = dto.depot_id, // 仓库 LotNo = dto.lot_no, // 批号 Memo = dto.memo // 备注 }; 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, Zzcxa 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) .ExecuteReturnIdentity(); if (insertedHead <= 0) throw new Exception("主表插入失败,未返回ID"); var success = db.Insertable(details) .PageSize(10) .IgnoreColumnsNull() .ExecuteCommand() > 0; if (insertedHead >= 0 && success) return true; throw new NotImplementedException("插入或更新失败"); } private bool UpdateData(SqlSugarScope db, Zzcxa 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; if (deletedHead && deletedDetails) return true; throw new NotImplementedException("更新失败"); } } }