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; using MES.Service.Modes.SalesDeliveryNotice; namespace MES.Service.service { public class SalesDeliveryNoticeManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 private readonly SalesDeliveryNoticeDetailManager _SalesDeliveryDetailManager = new(); //ErpSalesRerurn public bool Save(ErpSalesDelivery SalesDelivery) { var erpSalesDeliveryDto = SalesDelivery.OrderDto; var mesSalesDelivery = ConvertErpToSalesDelivery(SalesDelivery.OrderDto); var mesSalesDeliveryDatas = ConvertErpToSalesDeliveryDetail(SalesDelivery.Items); return UseTransaction(db => { switch (erpSalesDeliveryDto.Type) { // case "2": // return InsertData(db, mesSalesReturn, mesSalesReturnDatas, // rohInErpRohIn.FBILLTYPE) // ? 1 // : 0; case "3": return UpdateData(db, mesSalesDelivery, mesSalesDeliveryDatas) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesSalesDelivery, mesSalesDeliveryDatas, erpSalesDeliveryDto.Type) ? 1 : 0; default: throw new NotImplementedException( $"type没有{erpSalesDeliveryDto.Type}这个类型"); } }) > 0; } private bool UpdateData(SqlSugarScope db, SalesDeliveryNotice mesSalesDelivery, List mesSalesDeliveryDatas) { var decimals = mesSalesDeliveryDatas.Select(s => s.Id).ToArray(); var update = base.DeleteById(mesSalesDelivery.Id); var insertOrUpdate = db .Deleteable().In(decimals) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, SalesDeliveryNotice mesSalesDelivery, List mesSalesDeliveryDatas, string type) { if (mesSalesDelivery.Id != null) base.DeleteById(mesSalesDelivery.Id); if (mesSalesDeliveryDatas.Count > 0) db.Deleteable() .Where(s => s.Ehid == mesSalesDelivery.Erpid).ExecuteCommand(); var orUpdate = base.Insert(mesSalesDelivery); //var baOrUpdate = _SalesDeliveryDetailManager.InsertRange(mesSalesDeliveryDatas); foreach (var item in mesSalesDeliveryDatas) { _SalesDeliveryDetailManager.Insert(item); } //if (orUpdate && baOrUpdate) return true; return orUpdate; throw new NotImplementedException("插入或更新失败"); } // 批量保存记录的方法 public bool SaveList(List salesOrder) { var result = salesOrder.Select(Save).ToList(); return result.All(b => b); } //自动映射字段 public static void MapProperties(T target, object source) { var targetProps = typeof(T).GetProperties(); var sourceProps = source.GetType().GetProperties(); foreach (var targetProp in targetProps) { var sourceProp = sourceProps.FirstOrDefault(p => p.Name == targetProp.Name && p.PropertyType == targetProp.PropertyType); if (sourceProp != null) { var value = sourceProp.GetValue(source); targetProp.SetValue(target, value); } } } private SalesDeliveryNotice ConvertErpToSalesDelivery( ErpSalesDeliveryDto 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 salesOrder = new SalesDeliveryNotice(); MapProperties(salesOrder, erpDto); /*var salesOrder = new SalesDeliveryNotice { Id = erpDto.Id, Erpid = erpDto.Erpid, Fbilltypeid = erpDto.FBillTypeId, Fbillno = erpDto.FBillNo, Fdate = erpDto.FDate, Fsettlecurrid = erpDto.FSettleCurrId, Fsaleorgid = erpDto.FSaleOrgId, Fsaledeptid = erpDto.FSaleDeptId, Fcustomerid = erpDto.FCustomerId, Fheaddeliveryway = erpDto.FHeadDeliveryWay, Fheadlocid = erpDto.FHeadLocId, Fcarrierid = erpDto.FCarrierId, Fcarriageno = erpDto.FCarriageNo, Fdocumentstatus = erpDto.FDocumentStatus, Fdeliveryorgid = erpDto.FDeliveryOrgId, Fdeliverydeptid = erpDto.FDeliveryDeptId, Fstockergroupid = erpDto.FStockerGroupId, Fstockerid = erpDto.FStockerId, Fsalegroupid = erpDto.FSaleGroupId, Fsalesmanid = erpDto.FSalesManId, Freceiverid = erpDto.FReceiverId, Freceivercontactid = erpDto.FReceiverContactId, Freceiveaddress = erpDto.FReceiveAddress, Flinkman = erpDto.FLinkMan, Flinkphone = erpDto.FLinkPhone, Fsettleid = erpDto.FSettleId, Fpayerid = erpDto.FPayerId, Fcreatorid = erpDto.FCreatorId, Fcreatedate = erpDto.FCreateDate, Fmodifierid = erpDto.FModifierId, Fmodifydate = erpDto.FModifyDate, Fapproverid = erpDto.Fapproverid, Fapprovedate = erpDto.FApproveDate, Fcloserid = erpDto.FCloserId, Fclosereason = erpDto.FCloseReason, Fclosestatus = erpDto.FCloseStatus, Fcancellerid = erpDto.FCancellerId, Fcanceldate = erpDto.FCancelDate, Fcancelstatus = erpDto.FCancelStatus };*/ var single = base.GetSingle(it => it.Erpid == erpDto.Erpid); if (single != null) salesOrder.Id = single.Id; return salesOrder; } private List ConvertErpToSalesDeliveryDetail( List erpDtoList) { var salesOrderSubList = 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 salesOrderSub = new SalesDeliveryNoticeDetail(); MapProperties(salesOrderSub, erpDto); /*{ ErpLineId = erpDto.ErpID,//ERP行ID ErpHeadId = erpDto.EHID,//ERP头ID SalesOrderId = erpDto.F_UNW_Text_xsddh,//销售订单号 MaterialId = erpDto.FMaterialId,//物料编号 // MaterialName = erpDto.FMaterialName,// 物料名称 //MaterialSpecification = erpDto.FMaterialModel,//规格型号 SalesUnitId = erpDto.FUnitID,//销售单位 SalesQuantity = Convert.ToDecimal(erpDto.FQty),//销售数量 IsFree = erpDto.FIsFree,//是否赠品 DeliveryDate = ParseDateTime(erpDto.FDeliverydate),//要货日期 Warehouse = erpDto.FStockId,//出货仓库 PlanTrackingNumber = erpDto.FMtoNo,//计划跟踪号 LotNumber = erpDto.FLot,//批号 SrcBillNo = erpDto.FSrcBillNo,//源单编号 PriceQty = erpDto.FPriceUnitQty,//计价数量 OwnerId = erpDto.FOwnerIdHead,//货主 InventoryUnit = erpDto.FStockUnitID,//库存单位 InventoryQuantity = Convert.ToDecimal(erpDto.FStockQty),//库存数量 //MaterialCategory = erpDto.FMaterialType,//物料类别 PlanDeliveryDate = ParseDateTime(erpDto.FPlanDeliveryDate),//计划发货日期 OutLmtUnit = erpDto.FOutLmtUnit,//超发控制单位 OutMaxQty = erpDto.FOutMaxQty,//出库上限 OutMinQty = erpDto.FOutMinQty,//出库下限 DeliveryLoc = erpDto.FDeliveryLoc,//交货地点 DeliverylAddress = erpDto.FDeliveryLAddress,//交货地址 SourceBillNo = erpDto.FSrcBillNo,//原单单号 OrderBillNo = erpDto.FOrderNo,//订单单号 TerminationStatus = erpDto.FTerminationStatus,//终止状态 TerminationDate = ParseDateTime(erpDto.FTerminateDate),//业务终止日期 SumOutQty = erpDto.FSumOutQty,//累计出库数量 RemainOutQty = erpDto.FRemainOutQty,//未出库数量 GDY = erpDto.F_UNW_Base_GDY,//跟单员 NOTE = erpDto.FEntrynote//备注 };*/ var single = _SalesDeliveryDetailManager.GetSingle(it => it.Erpid == salesOrderSub.Erpid); if (single != null) salesOrderSub.Id = single.Id; salesOrderSubList.Add(salesOrderSub); } return salesOrderSubList; } } }