using Apache.NMS.ActiveMQ.Commands; using Rhea.Common; using System; using System.Collections.Generic; using Newtonsoft.Json; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.IBusiness; using Tiger.Model.Minsun; using Tiger.Model; using Tiger.IBusiness.MES; using Tiger.Model.Entitys.MES.U9C; using System.Reflection; using Dm.filter; using System.Dynamic; using System.Data.Entity.Core.Metadata.Edm; using SqlSugar; namespace Tiger.Business.MES { /// /// 工单计划导入Excel /// public class ImportWoPlan : IImportWoPlan { /// /// 导入 /// /// /// /// /// public async Task Import(T newEntity, ImportInput input) where T : class, new() { var result = new ApiAction(); try { List list = JsonConvert.DeserializeObject>(input.EntityJson); List woList = new List(); if (!list.Any(q => q.VALIDATION_TYPE == "异常")) { foreach (var item in list) { item.ID = Guid.NewGuid().ToString("N"); if (item.VALIDATION_TYPE == "新增") { var _batchWos = await Biz.Db.Queryable().Where(x => x.ORDER_NO == item.ORDER_NO).ToListAsync(); if (_batchWos.Count > 0) { item.BATCH_NO = $"{item.ORDER_NO}-{(_batchWos.Max(x => x.BATCH) + 1).ToString("D2")}"; } else { item.BATCH_NO = $"{item.ORDER_NO}-01"; } } BIZ_MES_WO wo = Biz.Db.Queryable().Where(x => x.ORDER_NO == item.ORDER_NO).First(); if (wo != null) { wo.PLAN_DATE = (wo.PLAN_DATE ?? "") + ((wo.PLAN_DATE ?? "").Contains(item.PLAN_DATE.ToString("yyyy-MM-dd")) ? "" : $",{item.PLAN_DATE.ToString("yyyy-MM-dd")}"); item.ITEM_CODE = wo.ITEM_CODE; item.CUST_CODE = wo.CUST_CODE; woList.Add(wo); } } var db = Biz.Db; var dbTran = db.UseTran(() => { if (list.Count > 100) { db.Utilities.PageEach(list, 100, pageList => { var y = db.Storageable(pageList) .WhereColumns(t => new { t.ORDER_NO, t.PLAN_DATE, t.GHOST_ROW }) .ToStorage(); y.AsInsertable.ExecuteCommand(); y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); }); } else { var s = db.Storageable(list) .WhereColumns(t => new { t.ORDER_NO, t.PLAN_DATE, t.GHOST_ROW }) .ToStorage(); s.AsInsertable.ExecuteCommand(); s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); } db.Updateable(woList).UpdateColumns(x => new { x.PLAN_DATE }).ExecuteCommand(); }); if (!dbTran.IsSuccess) { result.IsSuccessed = false; result.LocaleMsg = new($"保存批次工单异常"); } } else { result.IsSuccessed = false; result.LocaleMsg = new("导入数据有异常,不能导入!"); } } catch (Exception ex) { result.CatchException(ex, $"验证导入异常"); } return result; } /// /// 导入Excel前验证 /// /// /// /// /// public async Task>> ValidateTableImport(T newEntity, ImportValidateInput input) { var result = new ApiAction>(); try { List list = JsonConvert.DeserializeObject>(input.EntityJson); List baths = list as List; List chkColumns = JsonConvert.DeserializeObject>(input.CheckJson); List wheres = JsonConvert.DeserializeObject>(input.where); //目前只有=,以后可以增加其他的查询条件 foreach (var item in baths) { item.VALIDATION_TYPE = "新增"; item.VALIDATION_RESULT = ""; if (!Biz.Db.Queryable().Any(x => x.ORDER_NO == item.ORDER_NO) || Biz.Db.Queryable().Any(x => x.ORDER_NO == item.ORDER_NO && x.STATUS == BIZ_MES_WO_BATCH.STATUSs.Closed.GetValue())) { item.VALIDATION_TYPE = "异常"; item.VALIDATION_RESULT = "工单不存在或者已经关闭,不能导入计划!"; } else { if (item.PLAN_DATE.IsNullOrEmpty()) { item.VALIDATION_TYPE = "异常"; item.VALIDATION_RESULT += $"计划日期值为空或不存在; "; } if (item.PLAN_QTY.IsNullOrEmpty()) { item.VALIDATION_TYPE = "异常"; item.VALIDATION_RESULT += $"计划数量为空; "; } var _wo = await Biz.Db.Queryable().Where(x => x.ORDER_NO == item.ORDER_NO).FirstAsync(); var _batchs = await Biz.Db.Queryable().Where(x => x.ORDER_NO == item.ORDER_NO).ToListAsync(); if (_batchs.Count > 0) { if ((_batchs.Sum(x => x.PLAN_QTY) + item.PLAN_QTY > _wo.PLAN_QTY) || item.PLAN_QTY > _wo.PLAN_QTY) { item.VALIDATION_TYPE = "异常"; item.VALIDATION_RESULT += $"工单下发的数量超过工单计划数量,不能下发!"; } } var _woBatch = _batchs.Where(x => x.ORDER_NO == item.ORDER_NO && SqlFunc.DateIsSame(x.PLAN_DATE, item.PLAN_DATE) && BIZ_MES_WO_BATCH.STATUSs.Init.GetValue() < x.STATUS && x.STATUS < BIZ_MES_WO_BATCH.STATUSs.Closed.GetValue()).FirstOrDefault(); if (!_woBatch.IsNullOrEmpty()) { item.VALIDATION_TYPE = "异常"; item.VALIDATION_RESULT += $"数据已经存在且状态不是初始化,不能更新。存在的计划数量为[{_woBatch.PLAN_QTY}]"; } var _woBatch2 = Biz.Db.Queryable().Where(x => x.ORDER_NO == item.ORDER_NO && SqlFunc.DateIsSame(x.PLAN_DATE, item.PLAN_DATE) && x.STATUS == BIZ_MES_WO_BATCH.STATUSs.Init.GetValue()).First(); if (!_woBatch2.IsNullOrEmpty()) { item.VALIDATION_TYPE = "更新"; item.VALIDATION_RESULT = $"数据可以更新"; item.BATCH_NO = _woBatch2.BATCH_NO; } } } result.Data = list; } catch (Exception ex) { result.CatchException(ex, $"验证导入异常"); } return result; } } }