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.Tasks; using System.Windows.Forms; using XiGang.Core.Model; using XiGang.Core.Model.PostParamModels; namespace iWareCC.Forms { public partial class SrmStockForm : Form { delegate void Delegate_SetPostResult2(string content); public SrmStockForm() { InitializeComponent(); this.tb_SalverCount.Text = "1"; } /// /// 人工新增库存 /// /// /// private void button1_Click(object sender, EventArgs e) { string tb_SrmNo = this.tb_PlaceNo.Text.Trim(); 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; } //绑定托盘和站点的关系 //新建物料 C_AnalyzeMaterialPostParam analyzeMaterialPostParam = new C_AnalyzeMaterialPostParam(); analyzeMaterialPostParam.SerialNumber = SerialNumber; analyzeMaterialPostParam.OrderNo = OrderNo; analyzeMaterialPostParam.CargoNo = " "; analyzeMaterialPostParam.Supplier = "";//供应商 Base_Material newMaterial = MaterialHandler.CreateCargoMaterial(context, analyzeMaterialPostParam, "入库时,新建物料", 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); toPlace.IsFull = true;//代表有货 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 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 button2_Click(object sender, EventArgs e) { ClearPlace(); } private void ClearPlace() { var msg = "清除"; try { string tb_SrmNo = this.tb_PlaceNo.Text.Trim(); if (string.IsNullOrEmpty(tb_SrmNo)) { ShowResult("库位号不能为空"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要按照库位号" + tb_SrmNo + "删除库存吗?", "确认", messButton); if (dr == DialogResult.OK)//如果点击“确定”按钮 { 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 + "库存成功"); } } else//如果点击“取消”按钮 { } } catch (Exception ex) { ShowResult(msg + "库存失败," + ex.Message); } } private void btn_close_Click(object sender, EventArgs e) { this.Close(); } private void SrmStockForm_Load(object sender, EventArgs e) { LoadItemType(); } 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 button3_Click(object sender, EventArgs e) { var msg = "解锁"; try { string tb_SrmNo = this.tb_PlaceNo.Text.Trim(); 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(); place.IsLock = false; place.IsDeleted = false; place.IsHasTaskDoing = false; place.OperationRemark = "人工手动解锁"; //保存人工处理日志 [EditBy shaocx,2022-05-01] Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() { MainTaskNo = "", HandlerType = "人工手动解锁", PartTaskId = "", PlcTaskId = "", RealSourcePlace = tb_SrmNo, RealToPlace = "", SalverCode = "", SerialNumber = "", OrderNo = "", TaskTypeName = "", Qty = 0, // ManualHandlerRemark = _AllowSimulateExecute_Rmark }; PersonHandlerRecordHandler.SavePersonHandlerRecord(edm, record); edm.SaveChanges(); ShowResult(msg + "解锁成功"); } } catch (Exception ex) { ShowResult(msg + "解锁失败," + ex.Message); } } private void SrmStockForm_Load_1(object sender, EventArgs e) { LoadItemType(); } private void button4_Click(object sender, EventArgs e) { var msg = "锁定"; try { string tb_SrmNo = this.tb_PlaceNo.Text.Trim(); 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(); place.IsLock = true; place.OperationRemark = "人工手动锁定"; //保存人工处理日志 [EditBy shaocx,2022-05-01] Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() { MainTaskNo = "", HandlerType = "人工手动锁定", PartTaskId = "", PlcTaskId = "", RealSourcePlace = tb_SrmNo, RealToPlace = "", SalverCode = "", SerialNumber = "", OrderNo = "", TaskTypeName = "", Qty = 0, // ManualHandlerRemark = _AllowSimulateExecute_Rmark }; PersonHandlerRecordHandler.SavePersonHandlerRecord(edm, record); edm.SaveChanges(); ShowResult(msg + "锁定成功"); } } catch (Exception ex) { ShowResult(msg + "锁定失败," + ex.Message); } } private void btn_ClearStoreBySalver_Click(object sender, EventArgs e) { //按托盘号清理库存 var msg = "按托盘号清理库存"; try { string tb_SalverCode = this.tb_SalverCode.Text.Trim(); if (string.IsNullOrEmpty(tb_SalverCode)) { ShowResult("托盘号不能为空"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要按照托盘号" + tb_SalverCode + "删除库存吗?", "确认", messButton); if (dr == DialogResult.OK)//如果点击“确定”按钮 { Base_Salver salver = null; using (DbModel edm = new DbModel()) { salver = edm.Base_Salver.Where(x => x.SalverCode == tb_SalverCode).FirstOrDefault(); if (salver == null) { ShowResult("没有找到托盘!"); return; } StoreHandler.ClearStockBySalverCode(edm, salver, "人工手动清除-按托盘号清理库存"); //保存人工处理日志 [EditBy shaocx,2022-05-01] Base_PersonHandlerRecord record = new Base_PersonHandlerRecord() { MainTaskNo = "", HandlerType = "人工手动清除-按托盘号清理库存", PartTaskId = "", PlcTaskId = "", RealSourcePlace = "", RealToPlace = "", SalverCode = salver.SalverCode, SerialNumber = "", OrderNo = "", TaskTypeName = "", Qty = 0, // ManualHandlerRemark = _AllowSimulateExecute_Rmark }; PersonHandlerRecordHandler.SavePersonHandlerRecord(edm, record); edm.SaveChanges(); ShowResult(msg + "库存成功"); } } else//如果点击“取消”按钮 { } } catch (Exception ex) { ShowResult(msg + "库存失败," + ex.Message); } } } }