//using Admin.NET.Core.TaskModule.Enum; //using iWareCC.Common.Helper; //using iWareCommon; //using iWareCommon.Common.Globle; //using iWareCommon.Utils; //using iWareModel; //using iWareModel.Entity.WCS; //using iWareSql.DataAccess; //using iWareSql.MyDbContext; //using Newtonsoft.Json; //using System; //using System.Collections.Generic; //using System.Data.Entity; //using System.Linq; //using System.Runtime.Remoting.Contexts; //using System.Threading; //namespace iWareCC //{ // /// // /// WCS任务完成线程(立体库) // /// // public static class LiTiKu_TaskFinishedTask // { // public static void Handler() // { // while (true) // { // Thread.Sleep(2000);//休眠2秒,将休眠写到前面,是为了下面的continue方法执行后不显示错误信息的提示!!!【EditBy shaocx,2022-05-24】 // SystemWarningMsg._lbl_Alert_SrmTaskFinish = string.Empty; // try // { // if (SystemValue.isAllowRuning_SrmTaskFinish && SystemValue.isStartedModel) // { // using (MyDbContext dbContext = new MyDbContext()) // { // var willDoTasks = dbContext.ware_task.Where(x => x.State == 1 && (x.IsDeleted == null || x.IsDeleted == false) && (x.AreaType == null || x.AreaType == (int)AreaTypeEnum.立体库)) // .Where(TaskHandler.CommonFilterExpressionForNoFinishAndNoCancel()) // .ToList(); // var willDoTasks_FlagFinish = willDoTasks.Where(x => x.IsFlagFinish == 1).ToList();//强制完成的 // var willDoTasks_Normal = willDoTasks.Where(x => x.IsFlagFinish == null || x.IsFlagFinish == 0).ToList(); // if (willDoTasks_FlagFinish != null && willDoTasks_FlagFinish.Count > 0) // { // List str = new List(); // foreach (var item in willDoTasks_FlagFinish) // { // str.Add(item.TaskNo); // } // var json = JsonConvert.SerializeObject(str); // List taskDatailsOutPutsList = MyExtendHelper.CreateSimulationWcsData(willDoTasks_FlagFinish); // foreach (var item in taskDatailsOutPutsList) // { // HandleByWcsResult(item, willDoTasks_FlagFinish, dbContext, "LiTiKu_TaskFinishedTask"); // } // Log4NetHelper.WriteInfoLog(LogType.SrmTaskFinish, "批量下发WCS任务[成功][注意:这是强制任务完成!!!!],taskOutputs:" + json); // SystemWarningMsg._lbl_Alert_SrmTaskFinish += "WCS任务完成线程,[强制任务完成。。。]:" + SysGloble.SPLIT_STR; // } // if (willDoTasks_Normal != null && willDoTasks_Normal.Count > 0) // { // List str = new List(); // foreach (var item in willDoTasks_Normal) // { // str.Add(item.TaskNo); // } // var json = JsonConvert.SerializeObject(str); // if (FormCC.IsSimulationPLC) // {//如果是模拟 // //记录日志 // List taskDatailsOutPutsList = MyExtendHelper.CreateSimulationWcsData(willDoTasks_Normal); // foreach (var item in taskDatailsOutPutsList) // { // HandleByWcsResult(item, willDoTasks_Normal, dbContext, "LiTiKu_TaskFinishedTask"); // } // Log4NetHelper.WriteInfoLog(LogType.SrmTaskFinish, "批量下发WCS任务[成功][注意:这是模拟测试!!!!],taskOutputs:" + json); // SystemWarningMsg._lbl_Alert_SrmTaskFinish += "WCS任务完成线程,[模拟完成。。。]:" + SysGloble.SPLIT_STR; // } // else // { // var data = WcsRequestHelper.GetBatchTask(json); // if (data.Data != null && data.Data.Count > 0) // { // foreach (var item in data.Data) // { // HandleByWcsResult(item, willDoTasks_Normal, dbContext, "LiTiKu_TaskFinishedTask"); // } // } // else // { // if (data != null && data.Message != null) // { // SystemWarningMsg._lbl_Alert_SrmTaskFinish += "WCS任务完成线程,获取WCS的任务结果:" + data.Message + SysGloble.SPLIT_STR; // } // else // { // SystemWarningMsg._lbl_Alert_SrmTaskFinish += "WCS任务完成线程,获取WCS的任务结果显示没有任务" + SysGloble.SPLIT_STR; // } // } // } // } // } // } // } // catch (Exception ex) // { // SystemWarningMsg._lbl_Alert_SrmTaskFinish += "WCS任务完成线程 出现异常:" + ex.Message + SysGloble.SPLIT_STR; // Log4NetHelper.WriteErrorLog(LogType.SrmTaskFinish, "WCS任务完成线程 出现异常:" + ex.Message, ex); // } // } // } // public static void HandleByWcsResult(TaskDatailsOutPut item, List model, MyDbContext dbContext, string funName) // { // string sql = ""; // int IsEmptyContainer = 0; // if (item.TaskState == 2 || item.TaskState == 3) // { // var tasks = model.Where(u => u.TaskNo == item.WmsTaskNo).FirstOrDefault(); // if (tasks == null) // { // throw new Exception($"任务数据不存在,任务号:{item.WmsTaskNo}"); // } // //tasks.TaskState = 3; // tasks.TaskState = Convert.ToInt32(WareTaskStateEnum.已完成); // tasks.FinishedTime = Convert.ToDateTime(item.FinishTime); // //子任务 // //sql = string.Format(@" select * from ware_task_sub where TaskId={0} and TaskState!=3 and IsDeleted=0", tasks.Id); // //var subTask = dbContext.Database.SqlQuery(sql).ToList(); // var subTask = dbContext.ware_task_sub.Where(x => x.TaskId == tasks.Id && x.TaskState != 3 && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // //var materialLockeds = new List(); // switch (tasks.TaskCategory) // { // case 1: // #region 入库任务完成 (托盘和材料关系改成入库完成状态 任务完成 子任务完成 按理来说(在这一步才加库存和容器物料关系 (库存和容器物料关系在下发时已加))) // DoTaskCategory1(subTask, IsEmptyContainer, item, tasks, dbContext, model); // #endregion // break; // case 2: // #region 出库任务完成 减去容器上所有物料库存但是不删除容器和物料关系 删除库位容器关系 库位解锁 // DoTaskCategory2(subTask, IsEmptyContainer, item, tasks, dbContext, model); // #endregion // break; // case 3: // #region 移库任务完成 // DoTaskCategory3(subTask, IsEmptyContainer, item, tasks, dbContext, model); // #endregion // break; // } // } // } // /// // /// 入库任务完成处理 // /// // /// // /// // /// // /// // /// // /// // /// // #region // //private static void DoTaskCategory1(List subTask, int IsEmptyContainer, TaskDatailsOutPut item, ware_task tasks, MyDbContext dbContext, List model) // //{ // // //List add_ware_Material_Locked_list = new List(); // // List add_ware_flow_record_list = new List(); // // //ware_material_locked add_ware_Material_Locked = null; // // ware_flow_record add_ware_flow_record = null; // // #region 入库任务完成 (托盘和材料关系改成入库完成状态 任务完成 子任务完成 按理来说(在这一步才加库存和容器物料关系 (库存和容器物料关系在下发时已加))) // // if (tasks.TaskCategory == 1)// 入库任务完成 托盘和材料关系改成入库完成状态 ---需要加库存 添加容器库位关系 // // { // // var cvm = new List(); // // //sql = string.Format(@" select * from ware_orders where OrderStatus!=2 and (OrderType = '1' or OrderType = '5') and IsDeleted=0 and WareContainerCode='{0}' ", tasks.ContainerCode); // // //var orders = dbContext.Database.SqlQuery(sql).FirstOrDefault(); // // var orders = dbContext.ware_orders.Where(x => x.OrderStatus != 2 && (x.OrderType == "1" || x.OrderType == "5") && (x.IsDeleted == null || x.IsDeleted == false) && x.WareContainerCode == tasks.ContainerCode).FirstOrDefault(); // // string addSql = string.Empty; // // if (orders != null)//订单件 加库存 改入库单 改容器和材料关系 // // { // // //sql = string.Format(@" select * from ware_container_vs_material where WareContainerCode='{0}' and StockStatus != 2 and IsDeleted=0 ", tasks.ContainerCode); // // //cvm = dbContext.Database.SqlQuery(sql).ToList(); // // cvm = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode && x.StockStatus != 2 && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // // if (cvm == null || cvm.Count <= 0) // // { // // throw new Exception("订单详情不存在!"); // // } // // //sql = string.Format(@" select * from ware_orders_details where OrdersId={0} and IsDeleted=0 ", orders.Id); // // //var wareOrderDetails = dbContext.Database.SqlQuery(sql).ToList(); // // var wareOrderDetails = dbContext.ware_orders_details.Where(x => x.OrdersId == orders.Id && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // // //List str1 = wareOrderDetails.Select(w => w.WareMaterialCode).Distinct().ToList(); // // //foreach (var item1 in str1) // // //{ // // // //sql = string.Format(@" select * from ware_material_locked where MaterialCode='{0}' ", item1); // // // //var wareMaterialLocked = dbContext.Database.SqlQuery(sql).FirstOrDefault(); // // // var wareMaterialLocked = dbContext.ware_material_locked.Where(x => x.MaterialCode == item1).FirstOrDefault(); // // // int qty = wareOrderDetails.Where(x => x.WareMaterialCode == item1).Sum(x => x.Quantity); // // // if (wareMaterialLocked == null) // // // { // // // //addSql += string.Format(" insert into ware_material_locked values('{0}','{1}',{2},{3},'{4}','{5}','','',null,null,0,0) ", item1 // // // // , null, qty, 0, DateTime.Now, "", "cc"); // // // add_ware_Material_Locked = new ware_material_locked() // // // { // // // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // // // MaterialCode = item1, // // // Quantity = qty, // // // LockedQty = 0, // // // FreeLockedQty = 0, // // // CreatedTime = DateTime.Now, // // // IsDeleted = false // // // }; // // // add_ware_Material_Locked_list.Add(add_ware_Material_Locked); // // // } // // // else // // // { // // // wareMaterialLocked.Quantity += qty; // // // //addSql += string.Format(" update ware_material_locked set Quantity={0} where id={1} ", wareMaterialLocked.Quantity, wareMaterialLocked.Id); // // // } // // //} // // int RecordType = 0; // // if (model.Where(x => x.TaskNo == item.WmsTaskNo).FirstOrDefault().TaskType == 2) // // { // // RecordType = 5; // // } // // foreach (var item2 in cvm) // // { // // //addSql += string.Format(@"insert into ware_flow_record values({0} ,{1},'{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}' ,'{12}' ,'{13}' ,'{14}' ,'{15}' // // // ,'{16}' ,'{17}' ,'{18}' ,'{19}' ,'{20}' ,'{21}' ,'{22}' ,'{23}' ,'{24}' ,'{25}','{26}','{27}')", // // // Yitter.IdGenerator.YitIdHelper.NextId(), RecordType, "", item2.OrdersNo, item2.PurchaseNo, item2.DeliveryNo, item2.CollectNo, tasks.ToLocationCode, // // // tasks.ContainerCode // // // , "", item2.WareMaterialCode, "", (item2.Quantity - item2.OCCQuantity), "", 1, "", "入库任务", "", 0, 0, DateTime.Now, // // // "", "", "cc", "", "", 0, ""); // // add_ware_flow_record = new ware_flow_record() // // { // // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // // RecordType = RecordType, // // WareHousingNo = item2.OrdersNo, // // PurchaseNo = item2.PurchaseNo, // // DeliveryNo = item2.DeliveryNo, // // CollectNo = item2.CollectNo, // // WareLocationCode = tasks.ToLocationCode, // // WareContainerCode = item2.WareContainerCode, // // WareMaterialCode = item2.WareMaterialCode, // // Quantity = (item2.Quantity - item2.OCCQuantity), // // WareHousStatus = 1, // // WarehousingType = "入库任务", // // CreatedTime = DateTime.Now, // // IsDeleted = false // // }; // // add_ware_flow_record_list.Add(add_ware_flow_record); // // ////更新收货区库存 【Editby shaocx,2022-12-24】 // // //MyExtendHelper.UpdateSHQYQuantityForZPQYInStore(dbContext, tasks, item2); // // } // // } // // else // // { // // //sql = string.Format(@" select * from ware_container_vs_material where WareContainerCode='{0}' and StockStatus = 2 and IsDeleted=0", tasks.ContainerCode); // // //cvm = dbContext.Database.SqlQuery(sql).ToList(); // // cvm = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode && x.StockStatus == 2 && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // // if (cvm != null && cvm.Count > 0) // // { // // //List str1 = cvm.Select(w => w.WareMaterialCode).Distinct().ToList(); // // //foreach (var item1 in str1) // // //{ // // // //sql = string.Format(@" select * from ware_material_locked where MaterialCode='{0}' ", item1); // // // //var wareMaterialLocked = dbContext.Database.SqlQuery(sql).FirstOrDefault(); // // // var wareMaterialLocked = dbContext.ware_material_locked.Where(x => x.MaterialCode == item1).FirstOrDefault(); // // // int qty = cvm.Where(x => x.WareMaterialCode == item1).Sum(x => Convert.ToInt32(x.Quantity)); // // // int occqty = cvm.Where(x => x.WareMaterialCode == item1).Sum(x => Convert.ToInt32(x.OCCQuantity)); // // // wareMaterialLocked.Quantity += (qty - occqty); // // // // addSql += string.Format(" update ware_material_locked set Quantity={0} where id={1} ", wareMaterialLocked.Quantity, wareMaterialLocked.Id); // // //} // // int RecordType = 1; // // if (model.Where(x => x.TaskNo == item.WmsTaskNo).FirstOrDefault().TaskType == 2) // // { // // RecordType = 5; // // } // // foreach (var item2 in cvm) // // { // // // addSql += string.Format(@"insert into ware_flow_record values({0} // // // ,{1},'{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}' ,'{12}' ,'{13}' ,'{14}' ,'{15}' // // // ,'{16}' ,'{17}' ,'{18}' ,'{19}' ,'{20}' ,'{21}' ,'{22}' ,'{23}' ,'{24}' ,'{25}','{26}','{27}')", // // // Yitter.IdGenerator.YitIdHelper.NextId(), RecordType, "", item2.OrdersNo, item2.PurchaseNo, item2.DeliveryNo, item2.CollectNo, tasks.ToLocationCode, tasks.ContainerCode // // // , "", item2.WareMaterialCode, "", (item2.Quantity - item2.OCCQuantity), "", 1, "", "回库任务", "", 0, 0, DateTime.Now, // // // "", "", "cc", "", "", 0, ""); // // add_ware_flow_record = new ware_flow_record() // // { // // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // // RecordType = RecordType, // // WareHousingNo = item2.OrdersNo, // // PurchaseNo = item2.PurchaseNo, // // DeliveryNo = item2.DeliveryNo, // // CollectNo = item2.CollectNo, // // WareLocationCode = tasks.ToLocationCode, // // WareContainerCode = item2.WareContainerCode, // // WareMaterialCode = item2.WareMaterialCode, // // Quantity = (item2.Quantity - item2.OCCQuantity), // // WareHousStatus = 1, // // WarehousingType = "回库任务", // // CreatedTime = DateTime.Now, // // IsDeleted = false // // }; // // add_ware_flow_record_list.Add(add_ware_flow_record); // // ////更新收货区库存 【Editby shaocx,2022-12-24】 // // //MyExtendHelper.UpdateSHQYQuantityForZPQYInStore(dbContext, tasks, item2); // // } // // } // // else // // { // // IsEmptyContainer = 1; // // } // // } // // //using var transaction = dbContext.Database.BeginTransaction(); // // try // // { // // /* // // sql = string.Format(" update ware_task set TaskState=3,UpdatedTime='{1}',DevTaskNo='{2}',FinishedTime='{1}' where Id={0} ", tasks.Id, tasks.FinishedTime, item.DevActNo); // // sql += string.Format(@"INSERT INTO dbo.ware_location_vs_container values // // ({0},'{1}','{2}','{3}','{4}','{5}',{6},{7},'{8}','{9}','{10}','{11}','{12}','{13}','{14}',{15},'{16}') ", Yitter.IdGenerator.YitIdHelper.NextId(), // // "", "", tasks.ToLocationCode, tasks.ContainerCode, "", IsEmptyContainer, 0, "", DateTime.Now, "", "", "cc", "", "", 0, "");//添加库位容器关系 // // if (subTask != null && subTask.Count > 0) // // { // // sql += string.Format(" update ware_task_sub set TaskState=3,UpdatedTime='{0}' where TaskId={1} and TaskState !=3 ", tasks.FinishedTime, tasks.Id); // // } // // if (orders != null) // // { // // sql += string.Format(" update ware_container_vs_material set StockStatus={0},UpdatedTime='{2}' where WareContainerCode='{1}' and StockStatus != {0} ", 2, tasks.ContainerCode, DateTime.Now); // // sql += string.Format(" update ware_orders set OrderStatus=2,UpdatedTime='{0}' where Id={1} ", DateTime.Now, orders.Id); // // } // // if (!string.IsNullOrWhiteSpace(addSql)) // // { // // dbContext.Database.ExecuteSqlCommand(addSql);//添加库存 // // Log.Warning($"{funName} (TaskCategory == 1 )执行addSql :" + addSql); // // } // // dbContext.Database.ExecuteSqlCommand(sql); // // Log.Warning($"{funName} (TaskCategory == 1 )执行sql :" + sql); // // dbContext.SaveChanges(); // // transaction.Commit(); // // //*/ // // #region 最新EF处理 // // //1、更新表ware_task的状态为 完成 // // UpdateTaskState(item, tasks); // // tasks.DevTaskNo = item.DevActNo; // // //2、插入表ware_location_vs_container // // var db_ware_location_vs_container = dbContext.ware_location_vs_container.Where(x => x.WareLocationCode == tasks.ToLocationCode // // && x.WareContainerCode == tasks.ContainerCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // // if (db_ware_location_vs_container == null) // // { // // ware_location_vs_container ware_Location_Vs_Container = new ware_location_vs_container() // // { // // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // // WareLocationCode = tasks.ToLocationCode, // // WareContainerCode = tasks.ContainerCode, // // IsEmptyContainer = IsEmptyContainer == 1 ? true : false, // // CreatedTime = DateTime.Now, // // UpdatedTime = DateTime.Now, // // IsDeleted = false, // // Status = 0, // // TenantId = 0, // // CreatedUserId = 0, // // CreatedUserName = "cc", // // UpdatedUserName = "cc", // // UpdatedUserId = 0, // // DetectionHeight = tasks.DetectionHeight //记录3巷道入库时的检测高度 【Editby shaocx,2023-02-07】 // // }; // // dbContext.ware_location_vs_container.Add(ware_Location_Vs_Container); // // } // // else // // { // // db_ware_location_vs_container.UpdatedTime = DateTime.Now; // // db_ware_location_vs_container.UpdatedUserName = "cc"; // // db_ware_location_vs_container.Status = 0; // // db_ware_location_vs_container.IsEmptyContainer = (IsEmptyContainer == 1 ? true : false); // // db_ware_location_vs_container.DetectionHeight = tasks.DetectionHeight;//记录3巷道入库时的检测高度 【Editby shaocx,2023-02-07】 // // } // // //获取库区对象 // // var v_wareLocation = dbContext.v_ware_location.Where(x => x.Code == tasks.ToLocationCode).FirstOrDefault(); // // if (subTask != null && subTask.Count > 0) // // { // // var updateSubTasks = subTask.Where(x => x.TaskId == tasks.Id && x.TaskState != 3).ToList(); // // foreach (var updateSub in updateSubTasks) // // { // // updateSub.TaskState = 3; // // updateSub.UpdatedTime = tasks.FinishedTime; // // } // // // sql += string.Format(" update ware_task_sub set TaskState=3,UpdatedTime='{0}' where TaskId={1} and TaskState !=3 ", tasks.FinishedTime, tasks.Id); // // } // // if (orders != null) // // { // // //sql += string.Format(" update ware_container_vs_material set StockStatus={0},UpdatedTime='{2}' where WareContainerCode='{1}' and StockStatus != {0} ", 2, tasks.ContainerCode, DateTime.Now); // // //sql += string.Format(" update ware_orders set OrderStatus=2,UpdatedTime='{0}' where Id={1} ", DateTime.Now, orders.Id); // // List update_ware_Container_Vs_MaterialList = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode && x.StockStatus != 2).ToList(); // // foreach (var update_ware_Container_Vs_Material in update_ware_Container_Vs_MaterialList) // // { // // update_ware_Container_Vs_Material.StockStatus = 2; // // update_ware_Container_Vs_Material.UpdatedTime = tasks.FinishedTime; // // //增加物料库区类型 // // update_ware_Container_Vs_Material.MaterialRegionId = v_wareLocation.RegionId; // // update_ware_Container_Vs_Material.MaterialRegionCode = v_wareLocation.RegionCode; // // update_ware_Container_Vs_Material.MaterialRegionName = v_wareLocation.RegionName; // // } // // ware_orders update_order = dbContext.ware_orders.Where(x => x.Id == orders.Id).FirstOrDefault(); // // update_order.OrderStatus = 2; // // update_order.UpdatedTime = tasks.FinishedTime; // // } // // if (add_ware_flow_record_list != null && add_ware_flow_record_list.Count > 0) // // { // // dbContext.ware_flow_record.AddRange(add_ware_flow_record_list); // // } // // //if (add_ware_Material_Locked_list != null && add_ware_Material_Locked_list.Count > 0) // // //{ // // // dbContext.ware_material_locked.AddRange(add_ware_Material_Locked_list); // // //} // // //保存数据,提交事务 // // dbContext.SaveChanges(); // // #endregion // // } // // catch (Exception) // // { // // //transaction.Rollback(); // // //transaction.Dispose(); // // throw; // // } // // } // // #endregion // //} // #endregion // private static void DoTaskCategory1(List subTask, int IsEmptyContainer, TaskDatailsOutPut item, ware_task tasks, MyDbContext dbContext, List model) // { // List add_ware_flow_record_list = new List(); // ware_flow_record add_ware_flow_record = null; // #region 入库任务完成 (托盘和材料关系改成入库完成状态 任务完成 子任务完成 按理来说(在这一步才加库存和容器物料关系 (库存和容器物料关系在下发时已加))) // if (tasks.TaskCategory == 1)// 入库任务完成 托盘和材料关系改成入库完成状态 ---需要加库存 添加容器库位关系 // { // var cvm = new List(); // //查找组盘区域是否存在该容器的库存,有就把组盘区域容器编号更新未当前容器编号 // cvm = dbContext.ware_container_vs_material.Where(x => x.RealWareContainerCode == tasks.ContainerCode && (x.IsDeleted == null || x.IsDeleted == false) && x.WareContainerCode == "ZPQY").ToList(); // string addSql = string.Empty; // if (cvm != null && cvm.Count > 0)//订单件 加库存 改入库单 改容器和材料关系 // { // int RecordType = 0; // if (model.Where(x => x.TaskNo == item.WmsTaskNo).FirstOrDefault().TaskType == 2) // { // RecordType = 5; // } // foreach (var item2 in cvm) // { // add_ware_flow_record = new ware_flow_record() // { // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // RecordType = RecordType, // WareHousingNo = item2.OrdersNo, // PurchaseNo = item2.PurchaseNo, // DeliveryNo = item2.DeliveryNo, // CollectNo = item2.CollectNo, // WareLocationCode = tasks.ToLocationCode, // WareContainerCode = item2.WareContainerCode, // WareMaterialCode = item2.WareMaterialCode, // Quantity = (item2.Quantity - item2.OCCQuantity), // WareHousStatus = 1, // WarehousingType = "入库任务", // CreatedTime = DateTime.Now, // IsDeleted = false // }; // add_ware_flow_record_list.Add(add_ware_flow_record); // item2.WareContainerCode = tasks.ContainerCode; // item2.RealWareContainerCode = ""; // } // } // else // { // cvm = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode && x.StockStatus == 2 && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // if (cvm != null && cvm.Count > 0) // { // int RecordType = 1; // if (model.Where(x => x.TaskNo == item.WmsTaskNo).FirstOrDefault().TaskType == 2) // { // RecordType = 5; // } // foreach (var item2 in cvm) // { // add_ware_flow_record = new ware_flow_record() // { // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // RecordType = RecordType, // WareHousingNo = item2.OrdersNo, // PurchaseNo = item2.PurchaseNo, // DeliveryNo = item2.DeliveryNo, // CollectNo = item2.CollectNo, // WareLocationCode = tasks.ToLocationCode, // WareContainerCode = item2.WareContainerCode, // WareMaterialCode = item2.WareMaterialCode, // Quantity = (item2.Quantity - item2.OCCQuantity), // WareHousStatus = 1, // WarehousingType = "回库任务", // CreatedTime = DateTime.Now, // IsDeleted = false // }; // add_ware_flow_record_list.Add(add_ware_flow_record); // } // } // else // { // IsEmptyContainer = 1; // } // cvm = null; // } // try // { // #region 最新EF处理 // //1、更新表ware_task的状态为 完成 // UpdateTaskState(item, tasks); // tasks.DevTaskNo = item.DevActNo; // //2、插入表ware_location_vs_container // var db_ware_location_vs_container = dbContext.ware_location_vs_container.Where(x => x.WareLocationCode == tasks.ToLocationCode // && x.WareContainerCode == tasks.ContainerCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // if (db_ware_location_vs_container == null) // { // ware_location_vs_container ware_Location_Vs_Container = new ware_location_vs_container() // { // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // WareLocationCode = tasks.ToLocationCode, // WareContainerCode = tasks.ContainerCode, // IsEmptyContainer = IsEmptyContainer == 1 ? true : false, // CreatedTime = DateTime.Now, // UpdatedTime = DateTime.Now, // IsDeleted = false, // Status = 0, // TenantId = 0, // CreatedUserId = 0, // CreatedUserName = "cc", // UpdatedUserName = "cc", // UpdatedUserId = 0, // DetectionHeight = tasks.DetectionHeight //记录3巷道入库时的检测高度 【Editby shaocx,2023-02-07】 // }; // dbContext.ware_location_vs_container.Add(ware_Location_Vs_Container); // } // else // { // db_ware_location_vs_container.UpdatedTime = DateTime.Now; // db_ware_location_vs_container.UpdatedUserName = "cc"; // db_ware_location_vs_container.Status = 0; // db_ware_location_vs_container.IsEmptyContainer = (IsEmptyContainer == 1 ? true : false); // db_ware_location_vs_container.DetectionHeight = tasks.DetectionHeight;//记录3巷道入库时的检测高度 【Editby shaocx,2023-02-07】 // } // //获取库区对象 // var v_wareLocation = dbContext.v_ware_location.Where(x => x.Code == tasks.ToLocationCode).FirstOrDefault(); // if (subTask != null && subTask.Count > 0) // { // var updateSubTasks = subTask.Where(x => x.TaskId == tasks.Id && x.TaskState != 3).ToList(); // foreach (var updateSub in updateSubTasks) // { // updateSub.TaskState = 3; // updateSub.UpdatedTime = tasks.FinishedTime; // } // } // if (add_ware_flow_record_list != null && add_ware_flow_record_list.Count > 0) // { // dbContext.ware_flow_record.AddRange(add_ware_flow_record_list); // } // //解锁库位 // MyExtendHelper.LockLocation(false, dbContext, tasks.ToLocationCode, "解锁库位,入库任务完成"); // //保存数据,提交事务 // dbContext.SaveChanges(); // #endregion // } // catch (Exception) // { // throw; // } // } // #endregion // } // /// // /// 出库任务完成处理 // /// // /// // /// // /// // /// // /// // /// // /// // private static void DoTaskCategory2(List subTask, int IsEmptyContainer, TaskDatailsOutPut item, ware_task tasks, MyDbContext dbContext, List model) // { // //List add_ware_Material_Locked_list = new List(); // List add_ware_flow_record_list = new List(); // ware_flow_record add_ware_flow_record = null; // if (tasks.TaskCategory == 2) // 出库任务完成 减去容器上所有物料库存但是不删除容器和物料关系 删除库位容器关系 库位解锁 // { // var cvm = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode && x.StockStatus == 2 && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // var sortingVsContainers = dbContext.ware_sorting_vs_container.Where(x => x.WareContainerCode == tasks.ContainerCode && (x.IsDeleted == null || x.IsDeleted == false) && x.Status == 0).ToList(); // var lvm = dbContext.ware_location_vs_container.Where(x => x.WareContainerCode == tasks.ContainerCode && x.WareLocationCode == tasks.FromLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // if (lvm != null && lvm.Count > 0) // { // string addSql = string.Empty; // //List wareMaterialLockeds = new List(); // string updSql = string.Empty; // if (cvm != null && cvm.Count > 0) // { // List str1 = cvm.Select(w => w.WareMaterialCode).Distinct().ToList(); // foreach (var item1 in str1) // { // ////去掉验证库存的验证,不需要验证 【Editby shaocx,2023-02-06】 // ////var inventoryQty = InventoryHelper.GetInventoryQtyForOutByMaterialCodeWithNoLockData(item1, dbContext);//查出可用库存 [Editby shaocx,2023-01-04] // ////if (inventoryQty <= 0) // ////{//验证库存 // //// throw new Exception($"材料:" + item1 + " 库存不足,实际可用库存:" + inventoryQty); // ////} // //if (tasks.AreaType == (int)AreaTypeEnum.立体库) // //{//只有当是立体库任务时,才会更新 ware_material_locked表 【Editby shaocx,2023-02-06】 // // UpdateMaterialLockedForOutStoreFinished(dbContext, item1, cvm, sortingVsContainers); // //} // //这段代码放在下面的地方执行了 【Editby shaocx,2023-02-21】 // //var update_ware_container_vs_materialList = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode).ToList(); // //foreach (var update_ware_container_vs_material in update_ware_container_vs_materialList) // //{ // // update_ware_container_vs_material.IsLocked = false; // // update_ware_container_vs_material.LockRemark = "cc出库任务完成处理,解锁为false"; // // update_ware_container_vs_material.DoLockTime = DateTime.Now; // //} // //出库解锁外侧物料容器信息 // //注释以下的方法,貌似这个方法不能用啊,内测出库完成,肯定外侧是空的,还解锁什么库位呢 【Editby shaocx,2023-02-02】 // //UnlockForSideLocation(dbContext, tasks); // } // int RecordType = 1; // if (model.Where(x => x.TaskNo == item.WmsTaskNo).FirstOrDefault().TaskType == 2) // { // RecordType = 6; // } // foreach (var item2 in cvm) // { // add_ware_flow_record = new ware_flow_record() // { // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // RecordType = RecordType, // WareHousingNo = item2.OrdersNo, // PurchaseNo = item2.PurchaseNo, // DeliveryNo = item2.DeliveryNo, // CollectNo = item2.CollectNo, // WareLocationCode = tasks.ToLocationCode, // WareContainerCode = item2.WareContainerCode, // WareMaterialCode = item2.WareMaterialCode, // Quantity = (item2.Quantity - item2.OCCQuantity), // WareHousStatus = 1, // WarehousingType = "出库任务", // CreatedTime = DateTime.Now, // IsDeleted = false // }; // add_ware_flow_record_list.Add(add_ware_flow_record); // } // } // var location = dbContext.ware_location.Where(x => x.Code == tasks.FromLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // if (location == null) // { // throw new Exception("库位:" + tasks.FromLocationCode + " 不存在"); // } // #region 最新EF处理 // try // { // //1、更新表ware_task的状态为 完成 // UpdateTaskState(item, tasks); // tasks.DevTaskNo = item.DevActNo; // tasks.ToLocationCode = item.ToPlace; // if (subTask != null && subTask.Count > 0) // { // var updateSubTasks = subTask.Where(x => x.TaskId == tasks.Id && x.TaskState != 3).ToList(); // foreach (var updateSub in updateSubTasks) // { // updateSub.TaskState = 3; // updateSub.UpdatedTime = tasks.FinishedTime; // } // } // if (add_ware_flow_record_list != null && add_ware_flow_record_list.Count > 0) // { // dbContext.ware_flow_record.AddRange(add_ware_flow_record_list); // } // //if (add_ware_Material_Locked_list != null && add_ware_Material_Locked_list.Count > 0) // //{ // // dbContext.ware_material_locked.AddRange(add_ware_Material_Locked_list); // //} // //解锁库位 // MyExtendHelper.LockLocation(false, dbContext, tasks.FromLocationCode, "解锁库位,出库任务完成"); // //解锁物料 // if (tasks.CheckMark != 1)//1是年度盘点 // { // var update_ware_container_vs_materialList = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode).ToList(); // foreach (var update_ware_container_vs_material in update_ware_container_vs_materialList) // { // update_ware_container_vs_material.IsLocked = false; // update_ware_container_vs_material.LockRemark = "cc出库任务完成处理,解锁为false"; // update_ware_container_vs_material.DoLockTime = DateTime.Now; // } // } // //删除库位容器关系 // var update_ware_location_vs_container_List = dbContext.ware_location_vs_container.Where(x => x.WareContainerCode == tasks.ContainerCode && x.WareLocationCode == tasks.FromLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // foreach (var update_ware_location_vs_container in update_ware_location_vs_container_List) // { // //获取库区对象 // var v_wareLocation = dbContext.v_ware_location.Where(x => x.Code == update_ware_location_vs_container.WareLocationCode).FirstOrDefault(); // if (v_wareLocation.IsVirtual == 1 || (v_wareLocation.isPingKu.HasValue && v_wareLocation.isPingKu.Value == true)) // {//平库不需要回库,所以不删除库位容器关系 // continue; // } // else // { // //update_ware_location_vs_container.IsDeleted = true;//逻辑删除!这里可能要改为 物理删除! // //改为物理删除 【Editby shaocx,2022-12-22】 // dbContext.ware_location_vs_container.Remove(update_ware_location_vs_container); // } // } // //保存数据,提交事务 // dbContext.SaveChanges(); // } // catch (Exception ex) // { // throw ex; // } // #endregion // } // } // } // /// // /// 出库解锁外侧物料容器信息 // /// // /// // /// // //private static void UnlockForSideLocation(MyDbContext dbContext, ware_task tasks) // //{ // ////出库解锁外侧物料容器信息 // //bool? isPingku = false; // //var vFromLocation = MyExtendHelper.GetWareLocationObject(dbContext, tasks.FromLocationCode, false); // //if (vFromLocation != null) // //{ // // isPingku = vFromLocation.isPingKu; // //} // //var query_WareLocationCode = string.Empty; // //if (isPingku == null || isPingku == false) // //{//立体库 // // var arr = tasks.FromLocationCode.Split('-'); // // if (arr.Length >= 4) // // { // // if (arr[2] == "1" || arr[2] == "4") // // { // // if (arr[2] == "1") // // { // // query_WareLocationCode = arr[0] + "-" + arr[1] + "-" + 2 + "-" + arr[3]; // // } // // else // // { // // query_WareLocationCode = arr[0] + "-" + arr[1] + "-" + 3 + "-" + arr[3]; // // } // // } // // } // //} // //var task = dbContext.ware_task.Where(x => x.FromLocationCode == query_WareLocationCode || x.ToLocationCode == query_WareLocationCode).FirstOrDefault(); // //if (task == null) // //{ // // var location_Vs_Container = dbContext.ware_location_vs_container.Where(x => x.WareLocationCode == query_WareLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // // if (location_Vs_Container != null) // // { // // var wareContainerVsMaterials = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == location_Vs_Container.WareContainerCode && (x.IsDeleted == null || x.IsDeleted == false) && x.IsLocked == true).ToList(); // // if (wareContainerVsMaterials != null && wareContainerVsMaterials.Count > 0) // // { // // foreach (var item2 in wareContainerVsMaterials) // // { // // if (item2.LocationType != 2) // // {//平库 不需要单独锁定这个托盘上的所有物料,因为不涉及到堆垛机动作 // // item2.IsLocked = false; // // item2.LockRemark = "cc出库任务完成处理,解锁为false"; // // item2.DoLockTime = DateTime.Now; // // } // // } // // } // // } // //} // //} // /// // /// 移库任务完成处理 // /// // /// // /// // /// // /// // /// // /// // /// // private static void DoTaskCategory3(List subTask, int IsEmptyContainer, TaskDatailsOutPut item, ware_task tasks, MyDbContext dbContext, List model) // { // //List add_ware_Material_Locked_list = new List(); // List add_ware_flow_record_list = new List(); // if (tasks.TaskCategory == 3) // { // //移库任务 删原来的库位容器关系 添加新的库位容器关系 解锁原来库位 // //sql = string.Format(@" select * from ware_location_vs_container where WareContainerCode='{0}' and WareLocationCode='{1}' and IsDeleted=0 ", tasks.ContainerCode, tasks.FromLocationCode); // //var locationVsContainer = dbContext.Database.SqlQuery(sql).FirstOrDefault(); // var locationVsContainer = dbContext.ware_location_vs_container.Where(x => x.WareContainerCode == tasks.ContainerCode && x.WareLocationCode == tasks.FromLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // if (locationVsContainer == null) // { // throw new Exception("容器关系不存在"); // } // if (locationVsContainer.IsEmptyContainer == true) // { // IsEmptyContainer = 1; // } // #region 新增表ware_location_vs_container // var db_ware_location_vs_container = dbContext.ware_location_vs_container.Where(x => x.WareLocationCode == tasks.ToLocationCode // && x.WareContainerCode == tasks.ContainerCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // if (db_ware_location_vs_container == null) // { // ware_location_vs_container wlvc = new ware_location_vs_container() // { // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // WareLocationCode = tasks.ToLocationCode, // WareContainerCode = tasks.ContainerCode, // IsEmptyContainer = IsEmptyContainer == 1 ? true : false, // CreatedTime = DateTime.Now, // IsDeleted = false, // Status = 0, // TenantId = 0, // CreatedUserId = 0, // CreatedUserName = "cc", // UpdatedUserId = 0, // DetectionHeight = tasks.DetectionHeight //记录3巷道入库时的检测高度 【Editby shaocx,2023-02-07】 // }; // dbContext.ware_location_vs_container.Add(wlvc);//增加关联关系 // } // else // { // db_ware_location_vs_container.UpdatedTime = DateTime.Now; // db_ware_location_vs_container.UpdatedUserName = "cc"; // db_ware_location_vs_container.Status = 0; // db_ware_location_vs_container.IsEmptyContainer = (IsEmptyContainer == 1 ? true : false); // db_ware_location_vs_container.DetectionHeight = tasks.DetectionHeight; //记录3巷道入库时的检测高度 【Editby shaocx,2023-02-07】 // } // #endregion // //sql = string.Format(@" select * from ware_location where Code='{0}' and IsDeleted=0 ", tasks.FromLocationCode); // //var location = dbContext.Database.SqlQuery(sql).FirstOrDefault(); // var location = dbContext.ware_location.Where(x => x.Code == tasks.FromLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // if (location == null) // { // throw new Exception("库位:" + tasks.FromLocationCode + " 不存在"); // } // /* // using var transaction = dbContext.Database.BeginTransaction(); // try // { // sql = string.Format(" update ware_task set TaskState=3,UpdatedTime='{1}',DevTaskNo='{2}',ToLocationCode='{3}',FinishedTime='{1}' where Id={0} ", tasks.Id, tasks.FinishedTime, item.DevActNo, item.ToPlace);//修改任务表 // //sql = string.Format(" update ware_task set TaskState=3,UpdatedTime='{1}',DevTaskNo='{2}' where Id={0} ", tasks.Id, DateTime.UtcNow, item.DevActNo);//修改任务表 // if (subTask != null && subTask.Count > 0) // { // sql += string.Format(" update ware_task_sub set TaskState=3,UpdatedTime='{0}' where TaskId={1} and TaskState !=3 ", tasks.FinishedTime, tasks.Id);//修改任务详情 // } // sql += string.Format(@" update ware_location set IsLocked=0 where Code='{0}' ", tasks.FromLocationCode);//解锁库位 // sql += string.Format(@" update ware_location_vs_container set IsDeleted=1 where WareContainerCode='{0}' and WareLocationCode='{1}' and IsDeleted=0 ", tasks.ContainerCode, tasks.FromLocationCode);//删除库位容器关系 // dbContext.Database.ExecuteSqlCommand(insertSql); // Log.Warning($"{funName} (TaskCategory == 3 )执行 insertSql :" + insertSql); // dbContext.Database.ExecuteSqlCommand(sql); // Log.Warning($"{funName} (TaskCategory == 3 )执行 sql :" + sql); // dbContext.SaveChanges(); // transaction.Commit(); // } // catch (Exception) // { // transaction.Rollback(); // transaction.Dispose(); // throw; // } // //*/ // #region 最新EF处理 // try // { // //1、更新表ware_task的状态为 完成 // UpdateTaskState(item, tasks); // tasks.DevTaskNo = item.DevActNo; // tasks.ToLocationCode = item.ToPlace; // if (subTask != null && subTask.Count > 0) // { // var updateSubTasks = subTask.Where(x => x.TaskId == tasks.Id && x.TaskState != 3).ToList(); // foreach (var updateSub in updateSubTasks) // { // updateSub.TaskState = 3; // updateSub.UpdatedTime = tasks.FinishedTime; // } // // sql += string.Format(" update ware_task_sub set TaskState=3,UpdatedTime='{0}' where TaskId={1} and TaskState !=3 ", tasks.FinishedTime, tasks.Id); // } // if (add_ware_flow_record_list != null && add_ware_flow_record_list.Count > 0) // { // dbContext.ware_flow_record.AddRange(add_ware_flow_record_list); // } // //if (add_ware_Material_Locked_list != null && add_ware_Material_Locked_list.Count > 0) // //{ // // dbContext.ware_material_locked.AddRange(add_ware_Material_Locked_list); // //} // //解锁库位 // MyExtendHelper.LockLocation(false, dbContext, tasks.FromLocationCode, "解锁库位,移库任务完成"); // MyExtendHelper.LockLocation(false, dbContext, tasks.ToLocationCode, "解锁库位,移库任务完成"); // //物料解锁 【Editby shaocx,2023-02-21】 // var update_ware_container_vs_materialList = dbContext.ware_container_vs_material.Where(x => x.WareContainerCode == tasks.ContainerCode).ToList(); // foreach (var update_ware_container_vs_material in update_ware_container_vs_materialList) // { // update_ware_container_vs_material.IsLocked = false; // update_ware_container_vs_material.LockRemark = "cc移库任务完成处理,解锁为false"; // update_ware_container_vs_material.DoLockTime = DateTime.Now; // } // //删除库位容器关系 // var update_ware_location_vs_container_List = dbContext.ware_location_vs_container.Where(x => x.WareContainerCode == tasks.ContainerCode && x.WareLocationCode == tasks.FromLocationCode && (x.IsDeleted == null || x.IsDeleted == false)).ToList(); // foreach (var update_ware_location_vs_container in update_ware_location_vs_container_List) // { // //update_ware_location_vs_container.IsDeleted = true;//逻辑删除!这里可能要改为 物理删除! // //改为物理删除 【Editby shaocx,2022-12-22】 // dbContext.ware_location_vs_container.Remove(update_ware_location_vs_container); // } // //保存数据,提交事务 // dbContext.SaveChanges(); // } // catch (Exception) // { // throw; // } // #endregion // } // } // #region 私有公共方法 // /// // /// 处理公共的任务状态 // /// // /// // /// // private static void UpdateTaskState(TaskDatailsOutPut item, ware_task tasks) // { // //tasks.TaskState = 3; // tasks.TaskState = Convert.ToInt32(WareTaskStateEnum.已完成); // tasks.UpdatedTime = DateTime.Now; // tasks.FinishedTime = Convert.ToDateTime(item.FinishTime); // } // ///// // ///// 出库任务完成后,处理ware_material_locked表数据 // ///// // ///// // ///// // ///// // ///// // //private static void UpdateMaterialLockedForOutStoreFinished(MyDbContext dbContext, string item1, List cvm, List sortingVsContainers) // //{ // // var vml = dbContext.ware_material_locked.Where(x => x.MaterialCode == item1).FirstOrDefault(); // // int qty = cvm.Where(x => x.WareMaterialCode == item1).Sum(x => Convert.ToInt32(x.Quantity)); // // int occqty = cvm.Where(x => x.WareMaterialCode == item1).Sum(x => Convert.ToInt32(x.OCCQuantity)); // // vml.Quantity = vml.Quantity - (qty - occqty); // // if (sortingVsContainers != null && sortingVsContainers.Count > 0) // // { // // var svc = sortingVsContainers.Where(x => x.WareMaterialCode == item1).FirstOrDefault(); // // if (svc != null) // // { // // var sortingOrderDetail = dbContext.ware_sorting_details.Where(x => x.Id == svc.SortingDetailsId && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // // var wareOrders = dbContext.ware_orders.Where(x => x.OrderNo == sortingOrderDetail.DeliveryNo && (x.IsDeleted == null || x.IsDeleted == false)).FirstOrDefault(); // // //注释 by baotian 20230106 免费件 FreeLockedQty 不再使用 // // //if (wareOrders.OrderType == "8")//免费件出库 // // //{ // // // vml.FreeLockedQty = vml.FreeLockedQty - (Convert.ToInt32(svc.Quantity));//锁定数量减去整个取货数量 // // //} // // //else // // if (wareOrders.OrderType == "2") //订单件出库 // // { // // vml.LockedQty = vml.LockedQty - (Convert.ToInt32(svc.Quantity));//锁定数量减去整个取货数量 // // } // // else // // { // // vml.LockedQty = vml.LockedQty - (Convert.ToInt32(svc.Quantity));//锁定数量减去整个取货数量 // // } // // vml.LockedQty = vml.LockedQty < 0 ? 0 : vml.LockedQty; // // } // // } // //} // #endregion // } //}