using iWareCommon.Common.Globle; using iWareCommon.Utils; using iWareModel; using iWareSql.DataAccess; using iWareSql.DBModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using XiGang.Core.Model; namespace XiGang_iWareTestForm.iWareTest.DialogForm { public partial class TestBatchForm : Form { delegate void Delegate_SetPostResult2(string content); public TestBatchForm() { InitializeComponent(); } private void button5_Click(object sender, EventArgs e) { string tb_SrmNo = this.tb_PlaceNo.Text.Trim(); //按照某个库位将发动机物料改为托盘 //先删除 ClearPlace(tb_SrmNo); //再新增托盘 do_button1_Click(tb_SrmNo); } /// /// 新建入库任务 /// /// /// private void button1_Click(object sender, EventArgs e) { //try //{ // ListItem selProFlag = null; // var itemType = ComboBoxHelper.GetComboxSelectValue(this.cmbItemType, ref selProFlag); // if (string.IsNullOrEmpty(tb_SrmNo)) // { // ShowResult("库位号不能为空"); // return; // } // var remark = ""; // int qty = 1; // if (selProFlag.Text == "托盘") // { // qty = Convert.ToInt32(tb_SalverCount.Text); // remark = "人工手动增加托盘库存"; // } // Base_Station toPlace = null; // using (DbModel context = new DbModel()) // { // toPlace = context.Base_Station.Where(x => x.SrmStationCode == tb_SrmNo).FirstOrDefault(); // if (toPlace == null) // { // ShowResult(tb_SrmNo + "库位不存在"); // return; // } // //看看有没有库存 // var abc = context.V_AllStore.Where(x => x.SrmStationCode == toPlace.SrmStationCode).FirstOrDefault(); // if (abc != null) // { // ShowResult(tb_SrmNo + "已经有库存了"); // return; // } // if (selProFlag.Text == "托盘") // { // Base_Material newMaterial = null; // Base_Salver salver = null; // StoreHandler.AddStoreForEmptySalverTransfer(context, remark, toPlace, qty, "人工手动", ref salver, ref newMaterial); // SaveLog(MaterialTypeEnum.托盘, newMaterial, context, tb_SrmNo, remark, qty, salver, toPlace, "", ""); // context.SaveChanges();//提交数据 // } // else // { // var SerialNumber = this.tb_SerialNumber.Text; // var OrderNo = this.tb_OrderNo.Text; // var SalverCode = this.tb_SalverCode.Text; // if (string.IsNullOrEmpty(SerialNumber)) // { // ShowResult(tb_SrmNo + "序列号不能为空"); // return; // } // if (string.IsNullOrEmpty(OrderNo)) // { // ShowResult(tb_SrmNo + "订货号不能为空"); // return; // } // if (string.IsNullOrEmpty(SalverCode)) // { // ShowResult(tb_SrmNo + "托盘号不能为空"); // return; // } // abc = context.V_AllStore.Where(x => x.SerialNumber == SerialNumber).FirstOrDefault(); // if (abc != null) // { // ShowResult("序列号" + SerialNumber + "已经有库存了"); // return; // } // abc = context.V_AllStore.Where(x => x.SalverCode == SalverCode).FirstOrDefault(); // if (abc != null) // { // ShowResult("托盘号" + SalverCode + "已经有库存了"); // return; // } // //绑定托盘和站点的关系 // //新建物料 // Base_Material newMaterial = MaterialHandler.CreateCargoMaterial(context, "入库时,新建物料", SerialNumber, OrderNo); // //判断托盘是否存在,如果存在,就不需要重建,如果不存在,就新建托盘 // var errMsg = ""; // Base_Salver salver = SalverHandler.GetSalveByCodeForInTask(context, SalverCode, out errMsg); // if (!string.IsNullOrEmpty(errMsg)) // { // ShowResult(tb_SrmNo + "errMsg"); // return; // } // //绑定托盘和物料的关系 // Salver_Material_Handler.CreateCvIRelation(context, "人工手动", salver, newMaterial, remark); // //绑定托盘和站点的关系 // Salver_Station_Handler.CreateCvPRelation(context, "人工手动", salver, toPlace, Salver_V_Station_StateEnum.入库绑定, remark); // SaveLog(MaterialTypeEnum.一般物料, newMaterial, context, tb_SrmNo, remark, qty, salver, toPlace, SerialNumber, OrderNo); // context.SaveChanges();//提交数据 // } // ShowResult(tb_SrmNo + "保存成功"); // } //} //catch (Exception ex) //{ // ShowResult(tb_SrmNo + "保存失败," + ex.Message); //} } private void do_button1_Click(string tb_SrmNo) { try { ListItem selProFlag = null; var itemType = ComboBoxHelper.GetComboxSelectValue(this.cmbItemType, ref selProFlag); if (string.IsNullOrEmpty(tb_SrmNo)) { ShowResult("库位号不能为空"); return; } var remark = ""; int qty = 1; if (selProFlag.Text == "托盘") { qty = Convert.ToInt32(tb_SalverCount.Text); remark = "人工手动增加托盘库存"; } Base_Station toPlace = null; using (DbModel context = new DbModel()) { toPlace = context.Base_Station.Where(x => x.SrmStationCode == tb_SrmNo).FirstOrDefault(); if (toPlace == null) { ShowResult(tb_SrmNo + "库位不存在"); return; } //看看有没有库存 var abc = context.V_AllStore.Where(x => x.SrmStationCode == toPlace.SrmStationCode).FirstOrDefault(); if (abc != null) { ShowResult(tb_SrmNo + "已经有库存了"); return; } if (selProFlag.Text == "托盘") { Base_Material newMaterial = null; Base_Salver salver = null; StoreHandler.AddStoreForEmptySalverTransfer(context, remark, toPlace, qty, "人工手动", ref salver, ref newMaterial); SaveLog(MaterialTypeEnum.托盘, newMaterial, context, tb_SrmNo, remark, qty, salver, toPlace, "", ""); context.SaveChanges();//提交数据 } else { var SerialNumber = this.tb_SerialNumber.Text; var OrderNo = this.tb_OrderNo.Text; var SalverCode = this.tb_SalverCode.Text; if (string.IsNullOrEmpty(SerialNumber)) { ShowResult(tb_SrmNo + "序列号不能为空"); return; } if (string.IsNullOrEmpty(OrderNo)) { ShowResult(tb_SrmNo + "订货号不能为空"); return; } if (string.IsNullOrEmpty(SalverCode)) { ShowResult(tb_SrmNo + "托盘号不能为空"); return; } abc = context.V_AllStore.Where(x => x.SerialNumber == SerialNumber).FirstOrDefault(); if (abc != null) { ShowResult("序列号" + SerialNumber + "已经有库存了"); return; } abc = context.V_AllStore.Where(x => x.SalverCode == SalverCode).FirstOrDefault(); if (abc != null) { ShowResult("托盘号" + SalverCode + "已经有库存了"); return; } //绑定托盘和站点的关系 //新建物料 Base_Material newMaterial = null;// MaterialHandler.CreateCargoMaterial(context, "入库时,新建物料", SerialNumber, OrderNo); //判断托盘是否存在,如果存在,就不需要重建,如果不存在,就新建托盘 var errMsg = ""; Base_Salver salver = SalverHandler.GetSalveByCodeForInTask(context, SalverCode, out errMsg); if (!string.IsNullOrEmpty(errMsg)) { ShowResult(tb_SrmNo + "errMsg"); return; } //绑定托盘和物料的关系 Salver_Material_Handler.CreateCvIRelation(context, "人工手动", salver, newMaterial, remark); //绑定托盘和站点的关系 Salver_Station_Handler.CreateCvPRelation(context, "人工手动", salver, toPlace, Salver_V_Station_StateEnum.入库绑定, remark); SaveLog(MaterialTypeEnum.一般物料, newMaterial, context, tb_SrmNo, remark, qty, salver, toPlace, SerialNumber, OrderNo); context.SaveChanges();//提交数据 } ShowResult(tb_SrmNo + "保存库存成功"); Log4NetHelper.WriteInfoLog(LogType.SS7, tb_SrmNo + "保存库存成功"); } } catch (Exception ex) { ShowResult(tb_SrmNo + "保存失败," + ex.Message); Log4NetHelper.WriteErrorLog(LogType.SS7, tb_SrmNo + "保存失败," + ex.Message); } } private void LoadItemType() { List itemList = new List(); itemList.Add(new ListItem() { Text = "发送机", Value = "1" }); itemList.Add(new ListItem() { Text = "托盘", Value = "2" }); foreach (var item in itemList) { this.cmbItemType.Items.Add(item); } cmbItemType.SelectedIndex = 1; } /// /// 显示请求结果 /// /// private void ShowResult(string content) { if (this.tb_Log.InvokeRequired) { Delegate_SetPostResult2 delegate_SetPostResult = new Delegate_SetPostResult2(ShowResult); this.Invoke(delegate_SetPostResult, new object[] { content }); } else { //content += "\r\n"; this.tb_Log.Text = StringHelper.GetLog(content) + this.tb_Log.Text; } } private void button2_Click(object sender, EventArgs e) { //ClearPlace(); } private void ClearPlace(string tb_SrmNo) { var msg = "清除"; try { if (string.IsNullOrEmpty(tb_SrmNo)) { ShowResult("库位号不能为空"); return; } Base_Station place = null; using (DbModel edm = new DbModel()) { place = edm.Base_Station.Where(x => x.SrmStationCode == tb_SrmNo || x.RgvStationCode == tb_SrmNo).FirstOrDefault(); //获取库存的信息 var store = edm.V_AllStore.Where(x => x.StationId == place.Id).FirstOrDefault(); if (store == null) { ShowResult("该库位上没有库存!"); return; } StoreHandler.ClearStockByPlaceId(edm, place, "人工手动清除"); if (store.IsSrmStation) {//如果是立体库库存,则在增加mian表 #region 增加Main表 //增加Main表和Part表数据 Task_Main mainTask = new Task_Main(); mainTask.IsVirtual = false;//非虚拟入库 MainTaskTypeEnum _taskType = default(MainTaskTypeEnum); DeviceTaskTypeEnum _DeviceTaskTypeEnum = default(DeviceTaskTypeEnum); string handlerType = ""; MaterialTypeEnum _MaterialType = (MaterialTypeEnum)Enum.Parse(typeof(MaterialTypeEnum), store.MaterialType.ToString()); switch (_MaterialType) { case MaterialTypeEnum.托盘: handlerType = "手动清除托盘库存"; _DeviceTaskTypeEnum = DeviceTaskTypeEnum.出库; mainTask.TaskNo = TaskNoHelper.GenerateTaskNo("OUT_SD_TP"); mainTask.TaskName = "手动清除托盘库存"; mainTask.InOutFlag = (int)MainInOutFlagEnum.出库; mainTask.InOutFlagName = MainInOutFlagEnum.出库.ToString(); _taskType = MainTaskTypeEnum.手动出库; mainTask.TaskType = Convert.ToInt32(_taskType); mainTask.TaskTypeName = _taskType.ToString(); break; case MaterialTypeEnum.一般物料: handlerType = "手动清除发动机库存"; _DeviceTaskTypeEnum = DeviceTaskTypeEnum.出库; mainTask.TaskNo = TaskNoHelper.GenerateTaskNo("OUT_SD"); mainTask.TaskName = "手动清除发动机库存"; mainTask.InOutFlag = (int)MainInOutFlagEnum.出库; mainTask.InOutFlagName = MainInOutFlagEnum.出库.ToString(); _taskType = MainTaskTypeEnum.手动出库; mainTask.TaskType = Convert.ToInt32(_taskType); mainTask.TaskTypeName = _taskType.ToString(); mainTask.SerialNumber = store.SerialNumber; mainTask.OrderNo = store.OrderNo; break; } mainTask.MaterialType = (int)_MaterialType; mainTask.MaterialTypeName = _MaterialType.ToString(); var _taskState = MainTaskStatusEnum.已完成; mainTask.TaskState = Convert.ToInt32(_taskState); mainTask.TaskStateName = _taskState.ToString(); mainTask.IsAllowSimulateExecute = true; mainTask.OperationRemark = handlerType; mainTask.Qty = store.Qty; mainTask.CreateTime = mainTask.ModifyTime = mainTask.StartTime = DateTime.Now; mainTask.CreateBy = mainTask.ModifyBy = SysGloble.WCSSystem; mainTask.MaterialId = store.MaterialId; mainTask.FinishTime = DateTime.Now; mainTask.SourcePlace = store.StationId; mainTask.RealSourcePlace = store.SrmStationCode; mainTask.ToPlace = 0; mainTask.RealToPlace = ""; //记录区域 [EditBy shaocx,2022-05-02] EDevice device = BusinessHelper.GetSrmDeviceByPlaceNo(store.SrmStationCode); mainTask.Area = ((int)device).ToString(); edm.Task_Main.Add(mainTask); #endregion #region 增加Part表 EDeviceType deviceType = EDeviceType.堆垛机; var plcTaskNo = BusinessHelper.CreatePlcTaskIdForSrmTask(); Task_Part partTask = new Task_Part() { Id = Guid.NewGuid().ToString(), InOutFlag = mainTask.InOutFlag, InOutFlagName = mainTask.InOutFlagName, DeviceType = (int)deviceType, DeviceTypeName = deviceType.ToString(), DeviceId = Convert.ToInt16(device), DeviceName = Convert.ToString(device), IsAllowSimulateExecute = true, TaskSequence = 1, MainTaskSequence = mainTask.TaskSequence,//增加主任务优先级 TaskDescribe = handlerType, OperationRemark = handlerType, MainTaskId = mainTask.Id, MainTaskNo = mainTask.TaskNo, MaterialId = mainTask.MaterialId, Qty = mainTask.Qty,//增加数量 【EditBy shaocx,2022-05-01】 //增加 订货号和序列号的赋值 [Editby shaocx,2022-04-21] SerialNumber = mainTask.SerialNumber, OrderNo = mainTask.OrderNo, //ToNumber = toNumber, //TaskGuid = taskGuid, //MatID = MatID, //MatName = MatName, //Remark = "手动入库创建设备任务" + description, //Creator = "手动入库创建设备任务" + "," + Dns.GetHostName(), //UpdateUser = "手动入库创建设备任务" + "," + Dns.GetHostName(), CreateTime = DateTime.Now, ModifyTime = DateTime.Now, PlcTaskId = plcTaskNo, //ContainerId = ctn.ContainerId, SalverId = store.SalverId, SalverCode = store.SalverCode, SourcePlace = store.StationId, ToPlace = 0, RealSourcePlace = store.SrmStationCode, RealToPlace = store.SrmStationCode, TaskName = string.Format("(来源:id-{0} no-{1},目标:id-{2} no-{3})", store.StationId, store.SrmStationCode, 0, ""), IsReleased = true, // IsCurrentTask = 0, IsFinished = true, //IsLastTask = 0, //Void = 0, TaskState = (int)DeviceTaskStatusEnum.已完成, TaskStateName = DeviceTaskStatusEnum.已完成.ToString(), TaskType = (int)_DeviceTaskTypeEnum, TaskTypeName = _DeviceTaskTypeEnum.ToString(), MaterialType = (int)_MaterialType, MaterialTypeName = _MaterialType.ToString(), IssueTime = DateTime.Now, FinishTime = DateTime.Now }; edm.Task_Part.Add(partTask); #endregion } //保存人工处理日志 [EditBy shaocx,2022-05-01] Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() { MainTaskNo = "", HandlerType = "库存删除", PartTaskId = "", PlcTaskId = "", RealSourcePlace = tb_SrmNo, RealToPlace = "", SalverCode = store.SalverCode, SerialNumber = store.SerialNumber, OrderNo = store.OrderNo, TaskTypeName = "", Qty = store.Qty, // ManualHandlerRemark = _AllowSimulateExecute_Rmark }; PersonHandlerRecordHandler.SavePersonHandlerRecord(edm, record); edm.SaveChanges(); ShowResult(msg + tb_SrmNo + "库存成功"); Log4NetHelper.WriteInfoLog(LogType.SS7, msg + tb_SrmNo + "库存成功"); } } catch (Exception ex) { ShowResult(msg + "库存失败," + ex.Message); Log4NetHelper.WriteErrorLog(LogType.SS7, msg + tb_SrmNo + "库存失败," + ex.Message); } } private void SaveLog(MaterialTypeEnum _MaterialTypeEnum, Base_Material newMaterial, DbModel context, string tb_SrmNo, string remark, int qty, Base_Salver salver, Base_Station toPlace, string serialNumber, string orderNo) { //增加Main表和Part表数据 Task_Main mainTask = new Task_Main(); mainTask.IsVirtual = false;//非虚拟入库 MainTaskTypeEnum _taskType = default(MainTaskTypeEnum); DeviceTaskTypeEnum _DeviceTaskTypeEnum = default(DeviceTaskTypeEnum); string handlerType = ""; MaterialTypeEnum _MaterialType = default(MaterialTypeEnum); switch (_MaterialTypeEnum) { case MaterialTypeEnum.托盘: handlerType = "手动添加托盘库存"; _DeviceTaskTypeEnum = DeviceTaskTypeEnum.空托转运到立体库; mainTask.TaskNo = TaskNoHelper.GenerateTaskNo("IN__SD_TP"); mainTask.TaskName = "手动添加托盘库存"; mainTask.InOutFlag = (int)MainInOutFlagEnum.入库; mainTask.InOutFlagName = MainInOutFlagEnum.入库.ToString(); _taskType = MainTaskTypeEnum.手动入库; mainTask.TaskType = Convert.ToInt32(_taskType); mainTask.TaskTypeName = _taskType.ToString(); _MaterialType = MaterialTypeEnum.托盘; break; case MaterialTypeEnum.一般物料: handlerType = "手动添加发动机库存"; _DeviceTaskTypeEnum = DeviceTaskTypeEnum.组盘入库; mainTask.TaskNo = TaskNoHelper.GenerateTaskNo("IN_SD"); mainTask.TaskName = "手动入库"; mainTask.InOutFlag = (int)MainInOutFlagEnum.入库; mainTask.InOutFlagName = MainInOutFlagEnum.入库.ToString(); _taskType = MainTaskTypeEnum.手动入库; mainTask.TaskType = Convert.ToInt32(_taskType); mainTask.TaskTypeName = _taskType.ToString(); mainTask.SerialNumber = serialNumber; mainTask.OrderNo = orderNo; _MaterialType = MaterialTypeEnum.一般物料; break; } mainTask.MaterialType = (int)_MaterialType; mainTask.MaterialTypeName = _MaterialType.ToString(); var _taskState = MainTaskStatusEnum.已完成; mainTask.TaskState = Convert.ToInt32(_taskState); mainTask.TaskStateName = _taskState.ToString(); mainTask.IsAllowSimulateExecute = true; mainTask.OperationRemark = handlerType; mainTask.Qty = qty; mainTask.CreateTime = mainTask.ModifyTime = mainTask.StartTime = DateTime.Now; mainTask.CreateBy = mainTask.ModifyBy = SysGloble.WCSSystem; mainTask.MaterialId = newMaterial.Id; mainTask.FinishTime = DateTime.Now; mainTask.ToPlace = toPlace.Id; mainTask.RealToPlace = toPlace.SrmStationCode; //记录区域 [EditBy shaocx,2022-05-02] EDevice device = BusinessHelper.GetSrmDeviceByPlaceNo(toPlace.SrmStationCode); mainTask.Area = ((int)device).ToString(); context.Task_Main.Add(mainTask); EDeviceType deviceType = EDeviceType.堆垛机; var plcTaskNo = BusinessHelper.CreatePlcTaskIdForSrmTask(); //中间点 var midPlace = StationHandler.GetRgvPlaceBySrmPlaceForInStore(context, toPlace); if (midPlace == null) { throw new Exception("没有找到RGV入库位置"); } Task_Part partTask = new Task_Part() { Id = Guid.NewGuid().ToString(), InOutFlag = mainTask.InOutFlag, InOutFlagName = mainTask.InOutFlagName, DeviceType = (int)deviceType, DeviceTypeName = deviceType.ToString(), DeviceId = Convert.ToInt16(device), DeviceName = Convert.ToString(device), IsAllowSimulateExecute = true, TaskSequence = 1, MainTaskSequence = mainTask.TaskSequence,//增加主任务优先级 TaskDescribe = handlerType, OperationRemark = handlerType, MainTaskId = mainTask.Id, MainTaskNo = mainTask.TaskNo, MaterialId = mainTask.MaterialId, Qty = mainTask.Qty,//增加数量 【EditBy shaocx,2022-05-01】 //增加 订货号和序列号的赋值 [Editby shaocx,2022-04-21] SerialNumber = mainTask.SerialNumber, OrderNo = mainTask.OrderNo, //ToNumber = toNumber, //TaskGuid = taskGuid, //MatID = MatID, //MatName = MatName, //Remark = "手动入库创建设备任务" + description, //Creator = "手动入库创建设备任务" + "," + Dns.GetHostName(), //UpdateUser = "手动入库创建设备任务" + "," + Dns.GetHostName(), CreateTime = DateTime.Now, ModifyTime = DateTime.Now, PlcTaskId = plcTaskNo, //ContainerId = ctn.ContainerId, SalverId = salver.Id, SalverCode = salver.SalverCode, SourcePlace = midPlace.Id, ToPlace = toPlace.Id, RealSourcePlace = midPlace.SrmStationCode, RealToPlace = toPlace.SrmStationCode, TaskName = string.Format("(来源:id-{0} no-{1},目标:id-{2} no-{3})", midPlace.Id, midPlace.SrmStationCode, toPlace.Id, toPlace.SrmStationCode), IsReleased = true, // IsCurrentTask = 0, IsFinished = true, //IsLastTask = 0, //Void = 0, TaskState = (int)DeviceTaskStatusEnum.已完成, TaskStateName = DeviceTaskStatusEnum.已完成.ToString(), TaskType = (int)_DeviceTaskTypeEnum, TaskTypeName = _DeviceTaskTypeEnum.ToString(), MaterialType = (int)_MaterialType, MaterialTypeName = _MaterialType.ToString(), IssueTime = DateTime.Now, FinishTime = DateTime.Now }; context.Task_Part.Add(partTask); //保存人工处理日志 [EditBy shaocx,2022-05-01] Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() { MainTaskNo = mainTask.TaskNo, HandlerType = handlerType, PartTaskId = partTask.Id, PlcTaskId = partTask.PlcTaskId, RealSourcePlace = tb_SrmNo, RealToPlace = tb_SrmNo, SalverCode = salver.SalverCode, SerialNumber = serialNumber, OrderNo = orderNo, TaskTypeName = partTask.TaskTypeName, Qty = qty, ManualHandlerRemark = remark, OperationRemark = remark }; PersonHandlerRecordHandler.SavePersonHandlerRecord(context, record); } private void TestBatchForm_Load(object sender, EventArgs e) { LoadItemType(); this.tb_SalverCount.Text = "1"; } private void button3_Click(object sender, EventArgs e) { //批量将发动机物料改为托盘 //获取库存的列表 int MaterialType = (int)MaterialTypeEnum.一般物料; List salverList = null; using (DbModel edm = new DbModel()) { salverList = edm.V_Store.Where(x => x.MaterialType == MaterialType).ToList(); //378 //去掉这些有发动机的库位 List strList = GetString(); salverList = salverList.Where(x => !strList.Contains(x.SrmStationCode)).ToList(); //16个,还有362 ////还要排除 第4库区,第1排,第一层的所有库位 //salverList = salverList.Where(x => !(x.Area == "4" && x.Layer == 1 && x.Row == 1)).ToList(); ////还有350,减去了 12个 } ////更新数据 foreach (var item in salverList) { var tb_SrmNo = item.SrmStationCode; //按照某个库位将发动机物料改为托盘 //先删除 ClearPlace(tb_SrmNo); //再新增托盘 do_button1_Click(tb_SrmNo); Thread.Sleep(1000); } } private List GetString() { List list = new List(); list.Add("2-01-10-02".Trim()); list.Add("1-01-04-01".Trim()); list.Add("1-01-06-04".Trim()); return list; } } }