using MES.Service.DB; using System.Data; using System.Globalization; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; using DbType = System.Data.DbType; namespace MES.Service.service.BasicData; public class SalesOrderManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 private readonly SalesOrderDetailManager _SalesOrderDetailManager = new(); //ErpSalesOrder public bool Save(ErpSalesOrder SalesOrder) { var erpSalesOrderDto = SalesOrder.OrderDto; var mesSalesOrder = ConvertErpToSalesOrder(SalesOrder); var mesSalesOrderDatas = ConvertErpToSalesOrderDetail(SalesOrder); return UseTransaction(db => { switch (erpSalesOrderDto.Type) { // case "2": // return InsertData(db, mesSalesOrder, mesSalesOrderDatas, // rohInErpRohIn.FBILLTYPE) // ? 1 // : 0; case "3": return UpdateData(db, mesSalesOrder, mesSalesOrderDatas) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesSalesOrder, mesSalesOrderDatas, erpSalesOrderDto.Type) ? 1 : 0; default: throw new NotImplementedException( $"type没有{erpSalesOrderDto.Type}这个类型"); } }) > 0; } private bool UpdateData(SqlSugarScope db, SalesOrder mesSalesOrder, List mesSalesOrderDatas) { var decimals = mesSalesOrderDatas.Select(s => s.Id).ToArray(); var update = base.DeleteById(mesSalesOrder.Id); var insertOrUpdate = db .Deleteable().In(decimals) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, SalesOrder mesSalesOrder, List mesSalesOrderDatas,string type) { if (mesSalesOrder.Id != null) base.DeleteById(mesSalesOrder.Id); if (mesSalesOrderDatas.Count > 0) db.Deleteable() .Where(s => s.Ehid == mesSalesOrder.Erpid).ExecuteCommand(); var orUpdate = base.Insert(mesSalesOrder); var baOrUpdate = _SalesOrderDetailManager.InsertRange(mesSalesOrderDatas); if (orUpdate && baOrUpdate) return true; throw new NotImplementedException("插入或更新失败"); } // 批量保存记录的方法 public bool SaveList(List salesOrder) { var result = salesOrder.Select(Save).ToList(); return result.All(b => b); } private SalesOrder ConvertErpToSalesOrder( ErpSalesOrder erpDto1) { 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 erpDto = erpDto1.OrderDto; var salesOrder = new SalesOrder { Id = erpDto.Id, Erpid = erpDto.Erpid, Fbillno = erpDto.Fbillno, Fbilltypeid = erpDto.Fbilltypeid, Fdocumentstatus = erpDto.Fdocumentstatus, Fdate = erpDto.Fdate, Fbusinesstype = erpDto.Fbusinesstype, Fheaddeliveryway = erpDto.Fheaddeliveryway, Fheadlocid = erpDto.Fheadlocid, Fsaleorgid = erpDto.Fsaleorgid, Fcustid = erpDto.Fcustid, Fclosestatus = erpDto.Fclosestatus, Fsaledeptid = erpDto.Fsaledeptid, Fsalerid = erpDto.Fsalerid, Fchangereason = erpDto.Fchangereason, Fnote = erpDto.Fnote, Fsettleid = erpDto.Fsettleid, Fapproverid = erpDto.Fapproverid, Flinkman = erpDto.Flinkman, Fchargeid = erpDto.Fchargeid, Flinkphone = erpDto.Flinkphone, Fcreatorid = erpDto.Fcreatorid, Fcreatedate = erpDto.Fcreatedate, Fmodifierid = erpDto.Fmodifierid, Fmodifydate = erpDto.Fmodifydate, Fapprovedate = erpDto.Fapprovedate, Fcloserid = erpDto.Fcloserid, Fclosedate = erpDto.Fclosedate, Fchangedate = erpDto.Fchangedate, Fcancelstatus = erpDto.Fcancelstatus, Fcancellerid = erpDto.Fcancellerid, Fversionno = erpDto.Fversionno, Fchangerid = erpDto.Fchangerid, FWwcDate = erpDto.FWwcDate, FWwcCheckbox = erpDto.FWwcCheckbox, FWwcLargetext = erpDto.FWwcLargetext, FWwcLargetext1 = erpDto.FWwcLargetext1, Fentrynote = erpDto.Fentrynote //ParseDateTime() ?? null //long.Parse() //Convert.ToDecimal() //Convert.ToDouble() }; var single = base.GetSingle(it => it.Erpid == erpDto.Erpid); if (single != null) salesOrder.Id = single.Id; return salesOrder; } private List ConvertErpToSalesOrderDetail( ErpSalesOrder erpDtoList) { var salesOrderSubList = new List(); foreach (var erpDto in erpDtoList.Items) { var salesOrderSub = new SalesOrderDetail { Id = erpDto.Id, Erpid = erpDto.Erpid, Ehid = erpDto.Ehid, Fmaterialid = erpDto.Fmaterialid, Funitid = erpDto.Funitid, Fqty = erpDto.Fqty, Fpriceunitid = erpDto.Fpriceunitid, Fpriceunitqty = erpDto.Fpriceunitqty, Fdeliverydate = erpDto.Fdeliverydate, Fisfree = erpDto.Fisfree, Fsettleorgids = erpDto.Fsettleorgids, Fownertypeid = erpDto.Fownertypeid, Fownerid = erpDto.Fownerid, Fentrynote = erpDto.Fentrynote, Fmtono = erpDto.Fmtono, Flot = erpDto.Flot, Fdeliverymaxqty = erpDto.Fdeliverymaxqty, Fdeliveryminqty = erpDto.Fdeliveryminqty, Foutlmtunitid = erpDto.Foutlmtunitid, Fmrpclosestatus = erpDto.Fmrpclosestatus, Fmrpterminatestatus = erpDto.Fmrpterminatestatus, Fterminatedate = erpDto.Fterminatedate, Fterminaterid = erpDto.Fterminaterid, Fsrctype = erpDto.Fsrctype, Fsrcbillno = erpDto.Fsrcbillno, Fdeliqty = erpDto.Fdeliqty, Fstockoutqty = erpDto.Fstockoutqty, Fbaseretnoticeqty = erpDto.Fbaseretnoticeqty, Fbasereturnqty = erpDto.Fbasereturnqty, Fbaseremainoutqty = erpDto.Fbaseremainoutqty, Fbasearqty = erpDto.Fbasearqty, Fmapid = erpDto.Fmapid, Fmapname = erpDto.Fmapname, Fmapspec = erpDto.Fmapspec }; var single = _SalesOrderDetailManager.GetSingle(it => it.Erpid == salesOrderSub.Erpid); if (single != null) salesOrderSub.Id = single.Id; salesOrderSubList.Add(salesOrderSub); } return salesOrderSubList; } }