using EFCore.BulkExtensions; using Microsoft.EntityFrameworkCore; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using Omu.ValueInjecter; using Org.BouncyCastle.Crypto; using System.Collections.Generic; using System.Data.Common; using TaskManager.Contracts.Dtos; using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.Entity.Entitys; using TaskManager.EntityFramework; using TaskManager.EntityFramework; using TaskManager.EntityFramework.Repository; namespace TaskManager.Controllers { /// /// 日物料需求计划 /// public class CherySupplierMrpDataService : CheryRecurringJobOutPageController { public CherySupplierMrpDataService(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) { //List list = new List(); //plist.ForEach(p => //{ // var con = new SUPPLIER_CON_DATE(); // con.Id=p.Id; // con.SupplierCode = "8EG"; // con.ReleaseEdition = p.ReleaseEdition; // con.MaterialCode = p.MaterialCode; // con.PlantId = p.PlantId; // con.FeedbackResults = "0"; // con.VentureType = ""; // con.VentureSpecific = ""; // con.Measures = ""; // con.StartDate = p.StartDate; // con.QuantityMeet1 =p.QuantityDemand1==null? p.QuantityDemand1.Value : 0 ; // con.QuantityMeet2 = p.QuantityDemand2 == null ? p.QuantityDemand2.Value : 0; // con.QuantityMeet3 =p.QuantityDemand3 ; // con.QuantityMeet4 =p.QuantityDemand4 ; // con.QuantityMeet5 =p.QuantityDemand5 ; // con.QuantityMeet6 =p.QuantityDemand6 ; // con.QuantityMeet7 =p.QuantityDemand7 ; // con.QuantityMeet8 =p.QuantityDemand8 ; // con.QuantityMeet9 =p.QuantityDemand9 ; // con.QuantityMeet10 =p.QuantityDemand10 ; // con.QuantityMeet11 =p.QuantityDemand11 ; // con.QuantityMeet12 =p.QuantityDemand12 ; // con.QuantityMeet13 =p.QuantityDemand13 ; // con.QuantityMeet14 =p.QuantityDemand14 ; // con.QuantityMeet15 =p.QuantityDemand15 ; // con.QuantityMeet16 =p.QuantityDemand16 ; // con.QuantityMeet17 =p.QuantityDemand17 ; // con.QuantityMeet18 =p.QuantityDemand18 ; // con.QuantityMeet19 =p.QuantityDemand19 ; // con.QuantityMeet20 =p.QuantityDemand20 ; // con.QuantityMeet21 =p.QuantityDemand21 ; // con.QuantityMeet22 =p.QuantityDemand22 ; // con.QuantityMeet23 =p.QuantityDemand23 ; // con.QuantityMeet24 =p.QuantityDemand24 ; // con.QuantityMeet25 =p.QuantityDemand25 ; // con.QuantityMeet26 =p.QuantityDemand26 ; // con.QuantityMeet27 =p.QuantityDemand27 ; // con.QuantityMeet28 =p.QuantityDemand28 ; // con.QuantityMeet29 =p.QuantityDemand29 ; // con.QuantityMeet30 =p.QuantityDemand30 ; // con.QuantityMeet31 = p.QuantityDemand31; // con.CreationTime = DateTime.Now; // list.Add(con); //}); 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.ReleaseEdition = first.ReleaseEdition; itm.MaterialCode = first.MaterialCode; itm.PlantId = first.PlantId; itm.FeedbackResults = "0"; itm.VentureType = ""; itm.VentureSpecific = ""; itm.Measures = ""; itm.StartDate = first.StartDate; itm.QuantityMeet1 = first.QuantityDemand1 != null ? first.QuantityDemand1.Value : 0; itm.QuantityMeet2 = first.QuantityDemand2 != null ? first.QuantityDemand2.Value : 0; itm.QuantityMeet3 = first.QuantityDemand3; itm.QuantityMeet4 = first.QuantityDemand4; itm.QuantityMeet5 = first.QuantityDemand5; itm.QuantityMeet6 = first.QuantityDemand6; itm.QuantityMeet7 = first.QuantityDemand7; itm.QuantityMeet8 = first.QuantityDemand8; itm.QuantityMeet9 = first.QuantityDemand9; itm.QuantityMeet10 = first.QuantityDemand10; itm.QuantityMeet11 = first.QuantityDemand11; itm.QuantityMeet12 = first.QuantityDemand12; itm.QuantityMeet13 = first.QuantityDemand13; itm.QuantityMeet14 = first.QuantityDemand14; itm.QuantityMeet15 = first.QuantityDemand15; itm.QuantityMeet16 = first.QuantityDemand16; itm.QuantityMeet17 = first.QuantityDemand17; itm.QuantityMeet18 = first.QuantityDemand18; itm.QuantityMeet19 = first.QuantityDemand19; itm.QuantityMeet20 = first.QuantityDemand20; itm.QuantityMeet21 = first.QuantityDemand21; itm.QuantityMeet22 = first.QuantityDemand22; itm.QuantityMeet23 = first.QuantityDemand23; itm.QuantityMeet24 = first.QuantityDemand24; itm.QuantityMeet25 = first.QuantityDemand25; itm.QuantityMeet26 = first.QuantityDemand26; itm.QuantityMeet27 = first.QuantityDemand27; itm.QuantityMeet28 = first.QuantityDemand28; itm.QuantityMeet29 = first.QuantityDemand29; itm.QuantityMeet30 = first.QuantityDemand30; itm.QuantityMeet31 = first.QuantityDemand31; itm.CreationTime = DateTime.Now; } } } 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 < SUPPLIER_CON_DATE > list = new List(); foreach (var p in query) { var con = new SUPPLIER_CON_DATE(); con.Id = p.Id; con.SupplierCode = "8EG"; con.ReleaseEdition = p.ReleaseEdition; con.MaterialCode = p.MaterialCode; con.PlantId = p.PlantId; con.FeedbackResults = "0"; con.VentureType = ""; con.VentureSpecific = ""; con.Measures = ""; con.StartDate = p.StartDate; con.QuantityMeet1 = p.QuantityDemand1 == null ? p.QuantityDemand1.Value : 0; con.QuantityMeet2 = p.QuantityDemand2 == null ? p.QuantityDemand2.Value : 0; con.QuantityMeet3 = p.QuantityDemand3; con.QuantityMeet4 = p.QuantityDemand4; con.QuantityMeet5 = p.QuantityDemand5; con.QuantityMeet6 = p.QuantityDemand6; con.QuantityMeet7 = p.QuantityDemand7; con.QuantityMeet8 = p.QuantityDemand8; con.QuantityMeet9 = p.QuantityDemand9; con.QuantityMeet10 = p.QuantityDemand10; con.QuantityMeet11 = p.QuantityDemand11; con.QuantityMeet12 = p.QuantityDemand12; con.QuantityMeet13 = p.QuantityDemand13; con.QuantityMeet14 = p.QuantityDemand14; con.QuantityMeet15 = p.QuantityDemand15; con.QuantityMeet16 = p.QuantityDemand16; con.QuantityMeet17 = p.QuantityDemand17; con.QuantityMeet18 = p.QuantityDemand18; con.QuantityMeet19 = p.QuantityDemand19; con.QuantityMeet20 = p.QuantityDemand20; con.QuantityMeet21 = p.QuantityDemand21; con.QuantityMeet22 = p.QuantityDemand22; con.QuantityMeet23 = p.QuantityDemand23; con.QuantityMeet24 = p.QuantityDemand24; con.QuantityMeet25 = p.QuantityDemand25; con.QuantityMeet26 = p.QuantityDemand26; con.QuantityMeet27 = p.QuantityDemand27; con.QuantityMeet28 = p.QuantityDemand28; con.QuantityMeet29 = p.QuantityDemand29; con.QuantityMeet30 = p.QuantityDemand30; con.QuantityMeet31 = p.QuantityDemand31; con.CreationTime = DateTime.Now; list.Add(con); } _jobDbContext.BulkInsert(list); //else //{ // existList = new List(); //} //var query = from item in list // join existItem in existList // on item.Id equals existItem.Id into gj // from subItem in gj.DefaultIfEmpty() // where subItem == null // select item; //_jobDbContext.BulkUpdate(existList.ToList()); //_jobDbContext.BulkInsert(query.ToList()); //dbContext.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; } } }