using SqlSugar; using System; using System.Collections.Generic; using MES.Service.DB; using MES.Service.Modes; using MES.Service.Dto.webApi; using MES.Service.service.BasicData; using System.Globalization; namespace MES.Service.service { public class QTCKManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 private readonly QTCKDetailManager QTCKDetailManager = new(); //ErpSalesRerurn public bool Save(ErpQTCK QTCK) { var erpQTCKDto = QTCK.OrderDto; var mesQTCK = ConvertErpToQTCK(QTCK.OrderDto); var mesQTCKDatas = ConvertErpToQTCKDetail(QTCK.Items); return UseTransaction(db => { switch (erpQTCKDto.Type) { // case "2": // return InsertData(db, mesSalesReturn, mesSalesReturnDatas, // rohInErpRohIn.FBILLTYPE) // ? 1 // : 0; case "3": return UpdateData(db, mesQTCK, mesQTCKDatas) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesQTCK, mesQTCKDatas, erpQTCKDto.Type) ? 1 : 0; default: throw new NotImplementedException( $"type没有{erpQTCKDto.Type}这个类型"); } }) > 0; } private bool UpdateData(SqlSugarScope db, QTCK mesQTCK, List mesQTCKDatas) { var decimals = mesQTCKDatas.Select(s => s.Id).ToArray(); var update = base.DeleteById(mesQTCK.Id); var insertOrUpdate = db .Deleteable().In(decimals) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, QTCK mesQTCK, List mesQTCKDatas, string type) { if (mesQTCK.Id != null) base.DeleteById(mesQTCK.Id); if (mesQTCKDatas.Count > 0) db.Deleteable() .Where(s => s.ERP_HID == mesQTCK.ERPID).ExecuteCommand(); //var orUpdate = base.Insert(mesQTCK); //var baOrUpdate = QTCKDetailManager.InsertRange(mesQTCKDatas); //if (orUpdate && baOrUpdate) return true; var update_res=UseTransaction(db => { var id = db.Insertable(mesQTCK).ExecuteReturnIdentity(); for (int i = 0; i < mesQTCKDatas.Count; i++) { var item = mesQTCKDatas[i]; item.PID = id; db.Insertable(item).IgnoreColumns(true).ExecuteCommand(); } return 1; }); if (update_res==1) return true; throw new NotImplementedException("插入或更新失败"); } // 批量保存记录的方法 public bool SaveList(List QTCKOrder) { var result = QTCKOrder.Select(Save).ToList(); return result.All(b => b); } private QTCK ConvertErpToQTCK( ErpQTCKDto erpDto) { DateTime parsedDate; // 时间格式转换函数,ERP时间格式为 "yyyy-MM-dd HH:mm:ss" DateTime? ParseDateTime(string dateStr) { if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)) return parsedDate; return null; // 如果转换失败,返回null } var QTCKOrder = new QTCK { ERPID = Convert.ToDecimal(erpDto.ERPID),//ERP行ID BillNo = erpDto.FBillNo, FDate = ParseDateTime(erpDto.FDate) ?? null, BillType = erpDto.FBillTypeID, // 单据类型 CustId = erpDto.FCustId, // 客户ID DeptId = erpDto.FDeptId, //销售部门 BizType = erpDto.FBizType, // OwnerTypeIdHead = erpDto.FOwnerTypeIdHead, // Note = erpDto.FNote, // CreatorId = erpDto.FCreatorId, // CreateDate = ParseDateTime(erpDto.FCreateDate) ?? null, // ModifierId = erpDto.FModifierId, // ModifyDate = ParseDateTime(erpDto.FModifyDate) ?? null, // ApproveDate = ParseDateTime(erpDto.FApproveDate) ?? null, // CloseStatus = erpDto.FCloseStatus, // CloserId = erpDto.FCloserId, // CloseDate = ParseDateTime(erpDto.FCloseDate) ?? null, // ApplyType = erpDto.FApplyType, F_UNW_CKLX= erpDto.F_UNW_CKLX }; var single = base.GetSingle(it => it.ERPID == Convert.ToDecimal(erpDto.ERPID)); if (single != null) QTCKOrder.Id = single.Id; return QTCKOrder; } private List ConvertErpToQTCKDetail( List erpDtoList) { var QTCKOrderSubList = new List(); DateTime parsedDate; // 时间格式转换函数,ERP时间格式为 "yyyy-MM-dd HH:mm:ss" DateTime? ParseDateTime(string dateStr) { if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)) return parsedDate; return null; // 如果转换失败,返回null } foreach (var erpDto in erpDtoList) { var QTCKOrderSub = new QTCKDetail { ERPID = Convert.ToDecimal(erpDto.ERPID),//ERP行ID ERP_HID = Convert.ToDecimal(erpDto.ERP_HID),//ERP头ID MaterialId = erpDto.FMaterialId,//物料编号 MaterialName = erpDto.FMaterialName,// 物料名称 Model = erpDto.FModel,//规格型号 UnitID = erpDto.FUnitID,//销售单位 Qty = Convert.ToDecimal(erpDto.FQty),//数量 BaseUnitId = erpDto.FBaseUnitId,// StockId = erpDto.FStockId,// StockLocId = erpDto.FStockLocId,// Lot = erpDto.FLot,// OwnerTypeId = erpDto.FOwnerTypeId,// OwnerId = erpDto.FOwnerId,// MtoNo = erpDto.FMtoNo,// StockStatusId = erpDto.FStockStatusId,// EntryNote = erpDto.FEntryNote,// BusinessClosed = erpDto.FBUSINESSCLOSED// }; var single = QTCKDetailManager.GetSingle(it => it.ERPID == QTCKOrderSub.ERPID); if (single != null) QTCKOrderSub.Id = single.Id; QTCKOrderSubList.Add(QTCKOrderSub); } return QTCKOrderSubList; } } }