using EFCore.BulkExtensions; using Microsoft.EntityFrameworkCore; using System.Data.Common; using TaskManager.Contracts.Dtos; using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.Entity.Entitys; using TaskManager.EntityFramework; using TaskManager.EntityFramework.Repository; namespace TaskManager.Controllers { /// /// 采购订单 /// public class CherySupplierPoService : CheryRecurringJobOutPageController { public CherySupplierPoService(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository repository) : base(httpClient, jobDbContext, log, repository) { } protected override async Task ConfirmDataInsertAsync(List plist, JobDbContext dbContext, DbTransaction dbTransaction) { if (plist.Count > 0) { var requestDate= plist.FirstOrDefault().RequestDate; //List list = new List(); //plist.ForEach(p => //{ // var con = new SUPPLIER_CON_PO(); // con.Id = p.Id; // con.SupplierCode = "8EG"; // con.PurchaseOrder =p.PurchaseOrder ; // con.SerialNumber =p.SerialNumber ; // con.QuantityMeet =p.QuantityDelivery==null? p.QuantityDelivery.Value : 0 ; // con.FeedbackResults ="0" ; // con.VentureType ="" ; // con.VentureSpecific ="" ; // con.Measures =""; // con.CreationTime = DateTime.Now; // list.Add(con); //}); //dbContext.BulkInsert(list); var ids = plist.Select(p => p.Id); var existList = await _jobDbContext.Set().Where(p => ids.Contains(p.Id) && p.ReadState == false).ToListAsync(); if (existList.Any()) { foreach (var itm in existList) { var first = plist.FirstOrDefault(p => p.Id == itm.Id); if (first != null) { itm.Id = first.Id; itm.SupplierCode = "8EG"; itm.PurchaseOrder = first.PurchaseOrder; itm.SerialNumber =first.SerialNumber; itm.QuantityMeet = first.QuantityDelivery != null ? first.QuantityDelivery.Value : 0; itm.FeedbackResults = "0"; itm.VentureType = ""; itm.VentureSpecific = ""; itm.Measures = ""; itm.CreationTime = DateTime.Now; itm.RequestDate = requestDate; } } } if (existList.Any()) { _jobDbContext.BulkUpdate(existList.ToList()); } var query = from item in plist join existItem in existList on item.Id equals existItem.Id into gj from subItem in gj.DefaultIfEmpty() where subItem == null select item; List list = new List(); foreach (var p in query) { var con = new SUPPLIER_CON_PO(); con.Id = p.Id; con.SupplierCode = "8EG"; con.PurchaseOrder = p.PurchaseOrder; con.SerialNumber = p.SerialNumber; con.QuantityMeet = p.QuantityDelivery != null ? p.QuantityDelivery.Value : 0; con.FeedbackResults = "0"; con.VentureType = ""; con.VentureSpecific = ""; con.Measures = ""; con.CreationTime = DateTime.Now; con.RequestDate=requestDate; ; list.Add(con); } _jobDbContext.BulkInsert(list); //dbContext.BulkMerge(list, // p => p.Id, // p => p.ReadState // ); //await dbContext.BulkMergeAsync(list, options => { options.Transaction = dbTransaction; options.UseTableLock = false; // options.ColumnPrimaryKeyExpression = p => new { p.Id, p.ReadState}; //}); } return; } } }